✨ feat(兼容): 配表使用后台隐藏物品
This commit is contained in:
@@ -197,6 +197,9 @@ async function treatStartLogic(app: _pinus.Application) {
|
||||
timeTaskService.setPvpSeasonNum();
|
||||
timeTaskService.setPvpSettleSeasonNum();
|
||||
}
|
||||
if(app.getServerType() != 'systimer') {
|
||||
timeTaskService.initHiddenData();
|
||||
}
|
||||
|
||||
if(app.isMaster()) {
|
||||
redisService.initAllRank();
|
||||
|
||||
@@ -15,6 +15,7 @@ import { checkTaskInGacha } from "../../../services/task/taskService";
|
||||
import { createHeroes } from "../../../services/role/createHero";
|
||||
import { getGuideGachaData } from "../../../services/activity/gachaService";
|
||||
import { getPlayerNewHeroGachaData } from "../../../services/activity/newHeroService";
|
||||
import { isHeroHidden } from "../../../services/dataService";
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -225,6 +226,9 @@ export class GachaHandler {
|
||||
const { gachaId, activityId = 0, pickHero } = msg;
|
||||
const roleId: string = session.get('roleId');
|
||||
const serverId: number = session.get('serverId');
|
||||
|
||||
if(isHeroHidden(pickHero)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let dicHero = gameData.hero.get(pickHero);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
@@ -271,6 +275,7 @@ export class GachaHandler {
|
||||
const sid: string = session.get('sid');
|
||||
const { hid } = msg;
|
||||
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let dicRecruit = gameData.recruit.get(hid);
|
||||
|
||||
@@ -10,6 +10,7 @@ import { ActivityGroupModel } from '../../../db/ActivityGroup';
|
||||
import { deleteActivities, loadActivities, saveActivitiesToGroup, updateActivities, _getActivityById, _getActivitiesByType, _getActivities, _getActivitiesByServerId, saveGroupToServer } from '../../../services/activity/activityRemoteService';
|
||||
import { saveActivityMemory } from '../../../services/log/memoryLogService';
|
||||
import { setApiIsClose } from '../../../services/chatService';
|
||||
import { setHiddenData } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -148,4 +149,12 @@ export class ActivityRemote {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async setHiddenData(heroes: number[], goods: number[], refTime: number) {
|
||||
try {
|
||||
setHiddenData(heroes, goods, refTime);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,7 @@ import { HeroModel } from '../../../db/Hero';
|
||||
import { addUserToTeamChannel, delTeamChannel, removeFromTeamChannel, sendMessageToTeam, sendMessageToUsersWithSuc, sendMessageToUserWithSuc } from '../../../services/pushService';
|
||||
import { getFriendRelationType, getRecommendType } from '../../../services/friendService';
|
||||
import { FriendRelationModel } from '../../../db/FriendRelation';
|
||||
import { isHeroHidden } from '../../../services/dataService';
|
||||
|
||||
export default function(app: Application) {
|
||||
return new ComBattleHandler(app);
|
||||
@@ -301,6 +302,7 @@ export class ComBattleHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let { teamCode, heroes: hids, battleCode = 'default' } = msg;
|
||||
if (!hids || hids.length === 0) return resResult(STATUS.COM_BATTLE_HEROES_ERR);
|
||||
if(isHeroHidden(...hids)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
let teamStatus = this.teamMap.get(teamCode);
|
||||
if (!teamStatus || !teamStatus.roleIds || teamStatus.roleIds.indexOf(roleId) === -1) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@ import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil';
|
||||
import { reportTAEvent } from '../../../services/sdkService';
|
||||
import { getSumCe } from '../../../services/playerCeService';
|
||||
import { vipCanSkipExpedition } from '../../../services/activity/monthlyTicketService';
|
||||
import { isHeroHidden } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -149,7 +150,8 @@ export class ExpeditionBattleHandler {
|
||||
|
||||
let { isOK, hids } = await checkBattleHeroes(roleId, seqIds);
|
||||
if (!isOK) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
|
||||
|
||||
if(isHeroHidden(...hids)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let expeditionWarRecord = await ExpeditionWarRecordModel.getRecordByCodeAndId(expeditionCode, expeditionId);
|
||||
if (!expeditionWarRecord) {
|
||||
return resResult(STATUS.EXPEDITION_MISS_WAR_RECORD);
|
||||
|
||||
@@ -18,6 +18,7 @@ import { saveLadderDefCeByData } from '../../../services/redisService';
|
||||
import { pushLadderTopChangeMsg } from '../../../services/sysChatService';
|
||||
import { checkTaskInLadderEnd, checkTaskInLadderStart, checkTaskInLadderSweep } from '../../../services/task/taskService';
|
||||
import { BattleRecordModel } from '../../../db/BattleRecord';
|
||||
import { isHeroHidden } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -148,6 +149,9 @@ export class LadderHandler {
|
||||
if(!rec || rec.roleId1 != roleId) return resResult(STATUS.LADDER_REC_NOT_FOUND);
|
||||
if(rec.status != LADDER_STATUS.CHECK) return resResult(STATUS.LADDER_REC_STATUS_ERR);
|
||||
|
||||
for(let { actorId } of heroes) {
|
||||
if(isHeroHidden(actorId)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
}
|
||||
let { isOK, heroes: dbHeroes } = await checkBattleHeroesByHid(roleId, heroes.map(cur => cur.actorId));
|
||||
if(!isOK) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
|
||||
|
||||
@@ -273,6 +277,7 @@ export class LadderHandler {
|
||||
if(!ladderData) return resResult(STATUS.LADDER_NOT_OPEN);
|
||||
|
||||
let hids: number[] = heroes.map(cur => cur.actorId);
|
||||
if(isHeroHidden(...hids)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
let dbHeroes = await HeroModel.findByHidRange(hids, roleId, '_id hid ce', true);
|
||||
|
||||
let defenseHeroes = heroes.map(cur => {
|
||||
|
||||
@@ -31,6 +31,7 @@ import { RewardInter } from '../../../pubUtils/interface';
|
||||
import { addItems } from '../../../services/role/rewardService';
|
||||
import { treasureHuntChallengeConsume } from '../../../services/activity/treasureHuntService';
|
||||
import { combineItems } from '../../../services/role/util';
|
||||
import { isHeroHidden } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -73,6 +74,7 @@ export class NormalBattleHandler {
|
||||
|
||||
let { isOK, hids, heroes, lineup } = await checkBattleHeroes(roleId, seqIds);
|
||||
if (!isOK) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
|
||||
if(isHeroHidden(...hids)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
const battleCode = genCode(8); // 关卡唯一值
|
||||
let dailyNum = {};
|
||||
|
||||
@@ -26,6 +26,7 @@ import { PvpSaveDataModel } from '../../../db/PvpSaveData';
|
||||
import { PVPConfigModel } from '../../../db/PvpConfig';
|
||||
import { getAllServerName, getServerName } from '../../../services/redisService';
|
||||
import { RoleRankInfo } from '../../../domain/rank';
|
||||
import { isHeroHidden } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -363,6 +364,7 @@ export class PvpHandler {
|
||||
// 更新挑战阵容
|
||||
let scores: number[] = [];
|
||||
for(let { actorId } of heroes) {
|
||||
if(isHeroHidden(actorId)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
let heroScore = pvpDefense.heroScores.find(cur => cur.hid == actorId);
|
||||
if(heroScore) {
|
||||
scores.push(heroScore.score);
|
||||
@@ -431,6 +433,8 @@ export class PvpHandler {
|
||||
// 更新防守阵容
|
||||
let scores: number[] = [], heroIdMap = new Map<number, string>(), hids: number[] = [];
|
||||
for(let { actorId } of heroes) {
|
||||
if(isHeroHidden(actorId)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let heroScore = pvpDefense.heroScores.find(cur => cur.hid == actorId);
|
||||
if(heroScore) {
|
||||
scores.push(heroScore.score);
|
||||
|
||||
@@ -21,6 +21,7 @@ import { combineItems } from '../../../services/role/util';
|
||||
import { checkTaskInSkipTower } from '../../../services/task/taskService';
|
||||
import { Rank } from '../../../services/rankService';
|
||||
import { checkPopUpCondition } from '../../../services/activity/popUpShopService';
|
||||
import { isHeroHidden } from '../../../services/dataService';
|
||||
|
||||
export default function(app: Application) {
|
||||
return new TowerBattleHandler(app);
|
||||
@@ -227,8 +228,9 @@ export class TowerBattleHandler {
|
||||
if (seqIds.length !== dicTask.actorNeeded) { // 武将数,从策划表中读取
|
||||
return resResult(STATUS.TOWER_TASK_MAX_HERO);
|
||||
}
|
||||
let { isOK, heroes } = await checkBattleHeroes(roleId, seqIds);
|
||||
let { isOK, heroes, hids } = await checkBattleHeroes(roleId, seqIds);
|
||||
if(!isOK) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
|
||||
if(isHeroHidden(...hids)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
if (tasksCode.indexOf(taskCode) === -1) {
|
||||
return resResult(STATUS.TOWER_TASK_CODE_NOT_FOUND);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import { Application, ChannelService, HandlerService, } from 'pinus';
|
||||
import { PVPConfigModel, PVPConfigType } from '../../../db/PvpConfig';
|
||||
import { reloadResources } from '../../../pubUtils/data';
|
||||
import { setApiIsClose } from '../../../services/chatService';
|
||||
import { setHiddenData } from '../../../services/dataService';
|
||||
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
|
||||
import { savePvpSeasonMemory } from '../../../services/log/memoryLogService';
|
||||
import { taflush } from '../../../services/sdkService';
|
||||
@@ -155,4 +156,12 @@ export class BattleRemote {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async setHiddenData(heroes: number[], goods: number[], refTime: number) {
|
||||
try {
|
||||
setHiddenData(heroes, goods, refTime);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import { getServerMainten, setServerMainten, stopServerMainten } from '../../../
|
||||
import { errlogger } from '../../../util/logger';
|
||||
import { addUserToChannel, sendMessageToChannel, sendMessgeToChannelByBatch } from '../../../services/pushService';
|
||||
import { setApiIsClose } from '../../../services/chatService';
|
||||
import { setHiddenData } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -156,4 +157,12 @@ export class ChatRemote {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async setHiddenData(heroes: number[], goods: number[], refTime: number) {
|
||||
try {
|
||||
setHiddenData(heroes, goods, refTime);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import { sendMessageToAllWithSuc, sendMessageToUserWithSuc } from '../../../serv
|
||||
import { checkServerIsOpen, getIpLocation } from '../../../services/roleService';
|
||||
import { dispatch } from '../../../pubUtils/dispatcher';
|
||||
import { leaveRaceActivityToRemote } from '../../../services/guildActivity/guildActivityService';
|
||||
import { getHiddenData } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -176,6 +177,11 @@ export class EntryHandler {
|
||||
return resResult(STATUS.SUCCESS, { todayZeroPoint });
|
||||
}
|
||||
|
||||
async getHiddenData(msg: { }, session: FrontendSession) {
|
||||
let data = getHiddenData();
|
||||
return resResult(STATUS.SUCCESS, data);
|
||||
}
|
||||
|
||||
/**
|
||||
* User log out handler
|
||||
*
|
||||
|
||||
@@ -11,6 +11,8 @@ import { setWeek } from '../../../pubUtils/timeUtil';
|
||||
import { savePvpSeasonMemory } from '../../../services/log/memoryLogService';
|
||||
import { setApiIsClose } from '../../../services/chatService';
|
||||
import { setPvpSeasonNum, setPvpSettleSeasonNum } from '../../../services/timeTaskService';
|
||||
import { setHiddenData } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
return new ConnectorRemote(app);
|
||||
@@ -183,4 +185,12 @@ export class ConnectorRemote {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async setHiddenData(heroes: number[], goods: number[], refTime: number) {
|
||||
try {
|
||||
setHiddenData(heroes, goods, refTime);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
import { Application, BackendSession, pinus } from 'pinus';
|
||||
import { genCode, getRandSingleEelm, resResult } from '../../../pubUtils/util';
|
||||
import { STATUS } from '../../../consts/statusCode';
|
||||
import moment = require('moment');
|
||||
import { CreatePvpConfigParam, CreateServerParam, UpdateRegionParams } from '../../../domain/backEndField/params';
|
||||
import { UpdateHiddenDataParam, CreatePvpConfigParam, CreateServerParam, UpdateRegionParams } from '../../../domain/backEndField/params';
|
||||
import { RegionModel, RegionType } from '../../../db/Region';
|
||||
import { gameData } from '../../../pubUtils/data';
|
||||
import { Maintenance, ServerlistModel, ServerlistUpdate } from '../../../db/Serverlist';
|
||||
import { nowSeconds } from '../../../pubUtils/timeUtil';
|
||||
import { createNewServer, sendOpenServerMail } from '../../../services/gmService';
|
||||
import { calHiddenData, createNewServer, getFutureTime, getPastTime } from '../../../services/gmService';
|
||||
import { isNumber } from 'util';
|
||||
import { MarqueeModel } from '../../../db/Marquee';
|
||||
import { setApiIsCloseToRemote } from '../../../services/chatService';
|
||||
import { PVPConfigModel } from '../../../db/PvpConfig';
|
||||
import { initHiddenDataSchedule } from '../../../services/timeTaskService';
|
||||
import { HiddenDataByIdModel, HiddenDataByIdModelTypeParam } from '../../../db/HiddenDataById';
|
||||
import { isDevelopEnv } from '../../../services/utilService';
|
||||
|
||||
export default function (app: Application) {
|
||||
return new GmHandler(app);
|
||||
@@ -198,4 +200,49 @@ export class GmHandler {
|
||||
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
async initHiddenData(msg: {pubArr: number[], hideArr: number[], type: number}, session: BackendSession) {
|
||||
let { pubArr = [], hideArr = [], type } = msg;
|
||||
let uid = session.get('uid');
|
||||
let datas = await HiddenDataByIdModel.findExistData(type);
|
||||
let existIds = datas.map(cur => cur.id);
|
||||
let insertParam: HiddenDataByIdModelTypeParam[] = [];
|
||||
for(let id of pubArr) {
|
||||
if(existIds.indexOf(id) == -1) {
|
||||
insertParam.push({ type, id, publishTime: getPastTime(), createdBy: uid, updatedBy: uid });
|
||||
}
|
||||
}
|
||||
for(let id of hideArr) {
|
||||
if(existIds.indexOf(id) == -1) {
|
||||
insertParam.push({ type, id, publishTime: getFutureTime(), createdBy: uid, updatedBy: uid });
|
||||
}
|
||||
}
|
||||
await HiddenDataByIdModel.createDatas(insertParam);
|
||||
await calHiddenData(uid);
|
||||
await initHiddenDataSchedule(false);
|
||||
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
async saveHiddenData(msg: UpdateHiddenDataParam, session: BackendSession) {
|
||||
let params = new UpdateHiddenDataParam(msg);
|
||||
if(!params.checkParams()) return resResult(STATUS.WRONG_PARMS);
|
||||
let uid = session.get('uid');
|
||||
let heroes: number[] = [], goods: number[] = [];
|
||||
for(let {type, id} of params.arr) {
|
||||
if(type == 1) heroes.push(id);
|
||||
if(type == 2) goods.push(id);
|
||||
}
|
||||
if(!isDevelopEnv()) {
|
||||
if(!await HiddenDataByIdModel.checkById(1, heroes, params.publishTime) || !await HiddenDataByIdModel.checkById(2, goods, params.publishTime)) {
|
||||
return resResult(STATUS.GM_OLD_REF_TIME_ERR);
|
||||
}
|
||||
}
|
||||
for(let {type, id} of params.arr) {
|
||||
await HiddenDataByIdModel.updateData(type, id, params.publishTime, uid);
|
||||
}
|
||||
await calHiddenData(uid);
|
||||
await initHiddenDataSchedule(false);
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,7 @@
|
||||
import { Application, ChannelService, HandlerService, } from 'pinus';
|
||||
import { resResult } from '../../../pubUtils/util';
|
||||
import { STATUS } from '../../../consts';
|
||||
import { mongoose } from '@typegoose/typegoose';
|
||||
const { ObjectId } = mongoose.Types;
|
||||
import { setHiddenData } from '../../../services/dataService';
|
||||
import { errlogger } from '../../../util/logger';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
return new GMRemote(app);
|
||||
@@ -28,5 +27,13 @@ export class GMRemote {
|
||||
|
||||
private channelService: ChannelService;
|
||||
|
||||
|
||||
public async setHiddenData(heroes: number[], goods: number[], refTime: number) {
|
||||
try {
|
||||
setHiddenData(heroes, goods, refTime);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -4,7 +4,7 @@ import { AUCTION_STAGE, DEBUG_MAGIC_WORD, STATUS, CURRENCY_BY_TYPE, CURRENCY_TYP
|
||||
import { LotModel } from "../../../db/Lot";
|
||||
import { ItemReward } from "../../../domain/dbGeneral";
|
||||
import { genCode, resResult } from "../../../pubUtils/util";
|
||||
import { auctionStage, calculateDividend, genAuction, sendUngotDividend, startGuildAuction, startWorldAuction, stopAuction, todayGuildBegin, getBasePrice, debugAuctionLots, officialAuctionLots, auctionBidStatus, getMaxPrice, guildBidStatus, getAuction, pushAuctionOver, pushAuctionUpdate, checkAuctionStage, processDividendFormat, processSingleDividendFormat, tomorrowGuildBegin, processLotsFormat, processSingleLotFormat } from "../../../services/auctionService";
|
||||
import { auctionStage, calculateDividend, genAuction, sendUngotDividend, startGuildAuction, startWorldAuction, stopAuction, todayGuildBegin, getBasePrice, debugAuctionLots, officialAuctionLots, auctionBidStatus, getMaxPrice, guildBidStatus, getAuction, pushAuctionOver, pushAuctionUpdate, checkAuctionStage, processDividendFormat, processSingleDividendFormat, tomorrowGuildBegin, processLotsFormat, processSingleLotFormat, getAuctionRewardByPoolId } from "../../../services/auctionService";
|
||||
import { addItems, getGoldObject, handleCost } from '../../../services/role/rewardService';
|
||||
import { getSimpleRoleInfo } from '../../../services/roleService';
|
||||
import { getRoleOnlineInfo } from '../../../services/redisService';
|
||||
@@ -16,7 +16,7 @@ import { unlockTrain } from '../../../services/guildTrainService';
|
||||
import { UserGuildModel } from '../../../db/UserGuild';
|
||||
import { UserGuildApplyModel } from '../../../db/UserGuildApply';
|
||||
import * as dicParam from '../../../pubUtils/dicParam';
|
||||
import { gameData, getAuctionRewardByPoolId } from '../../../pubUtils/data';
|
||||
import { gameData } from '../../../pubUtils/data';
|
||||
import { sendMailByContent } from '../../../services/mailService';
|
||||
import { reportTAEvent } from '../../../services/sdkService';
|
||||
import { sendMessageToGuildWithSuc, sendMessageToServerWithSuc } from '../../../services/pushService';
|
||||
|
||||
@@ -11,7 +11,7 @@ import { DATA_NAME } from '../../../consts/dataName';
|
||||
import { UserGuildModel } from '../../../db/UserGuild';
|
||||
import { addActive } from '../../../services/guildService';
|
||||
import { GuildModel } from '../../../db/Guild';
|
||||
import { gameData, getAuctionRewardByPoolId, getBossByLv } from '../../../pubUtils/data';
|
||||
import { gameData, getBossByLv } from '../../../pubUtils/data';
|
||||
import { lockData } from '../../../services/redLockService';
|
||||
import { pushGuildBossSucMsg, getGuildChannelSid } from '../../../services/chatService';
|
||||
import { checkTask } from '../../../services/task/taskService';
|
||||
@@ -20,7 +20,7 @@ import { addItems, getGoldObject, handleCost } from '../../../services/role/rewa
|
||||
import * as dicParam from '../../../pubUtils/dicParam';
|
||||
import { RoleModel } from '../../../db/Role';
|
||||
import { sendMailToGuildByContent } from '../../../services/mailService';
|
||||
import { genAuction } from '../../../services/auctionService';
|
||||
import { genAuction, getAuctionRewardByPoolId } from '../../../services/auctionService';
|
||||
import { sendMessageToGuildWithSuc } from '../../../services/pushService';
|
||||
|
||||
export default function (app: Application) {
|
||||
|
||||
@@ -16,6 +16,7 @@ import { ARMY } from '../../../pubUtils/dicParam';
|
||||
import { guildInter } from '../../../pubUtils/interface';
|
||||
import { getSeconds, getZeroPoint, nowSeconds } from '../../../pubUtils/timeUtil';
|
||||
import { sendMessageToUserWithSuc } from '../../../services/pushService';
|
||||
import { isGoodsHidden } from '../../../services/dataService';
|
||||
export default function(app: Application) {
|
||||
return new WishPoolHandler(app);
|
||||
}
|
||||
@@ -39,6 +40,8 @@ export class WishPoolHandler {
|
||||
const { goodId, type, myUserGuild } = msg;
|
||||
const roleId: string = session.get('roleId');
|
||||
const serverId: number = parseInt(session.get('serverId'));
|
||||
|
||||
if(isGoodsHidden(goodId)) return resResult(STATUS.ITEM_IS_HIDDEN);
|
||||
let dicGoods = getGoodById(goodId)
|
||||
if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let dicItid = ITID.get(dicGoods.itid);
|
||||
@@ -101,6 +104,8 @@ export class WishPoolHandler {
|
||||
if (wishGood.receiveCnt >= wishGood.count)
|
||||
return resResult(STATUS.HAS_RECEIVE_WISH_GOOD);//已经收到
|
||||
|
||||
if(isGoodsHidden(wishGood.goodId)) return resResult(STATUS.ITEM_IS_HIDDEN);
|
||||
|
||||
let dicWishReward = getWishPoolReward(wishGood.goodId);
|
||||
if(!dicWishReward) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import { taflush, treatGuildName } from '../../../services/sdkService';
|
||||
import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService';
|
||||
import { errlogger } from '../../../util/logger';
|
||||
import { setApiIsClose } from '../../../services/chatService';
|
||||
import { setHiddenData } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -74,4 +75,12 @@ export class GuildRemote {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async setHiddenData(heroes: number[], goods: number[], refTime: number) {
|
||||
try {
|
||||
setHiddenData(heroes, goods, refTime);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import { getServerMainten, setServerMainten, stopServerMainten } from '../../../
|
||||
import { taflush } from '../../../services/sdkService';
|
||||
import { errlogger } from '../../../util/logger';
|
||||
import { setApiIsClose } from '../../../services/chatService';
|
||||
import { setHiddenData } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -86,4 +87,12 @@ export class OrderRemote {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async setHiddenData(heroes: number[], goods: number[], refTime: number) {
|
||||
try {
|
||||
setHiddenData(heroes, goods, refTime);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -25,6 +25,7 @@ import { SchoolModel } from '../../../db/School';
|
||||
import { SkinModel } from '../../../db/Skin';
|
||||
import { RoleCeModel } from '../../../db/RoleCe';
|
||||
import { saveRebirthLog } from '../../../pubUtils/logUtil';
|
||||
import { isGoodsHidden, isHeroHidden } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -43,15 +44,15 @@ export class HeroHandler {
|
||||
let sid: string = session.get('sid');
|
||||
let serverId: number = session.get('serverId');
|
||||
|
||||
|
||||
let { hid } = msg;
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
// 检查是否存在武将
|
||||
let hasHero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if (hasHero) return resResult(STATUS.ROLE_HERO_EXISTS);
|
||||
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let { pieceId, pieceCount } = dicHero;
|
||||
// 碎片数量是否足够
|
||||
let costResult = await handleCost(roleId, sid, [{ id: pieceId, count: pieceCount }], ITEM_CHANGE_REASON.COMPOSE_HERO);
|
||||
@@ -71,6 +72,7 @@ export class HeroHandler {
|
||||
const serverId = session.get('serverId');
|
||||
|
||||
let { hid, type } = msg;
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let addLv = 0;
|
||||
if (type == 1) {
|
||||
@@ -144,8 +146,9 @@ export class HeroHandler {
|
||||
const serverId = session.get('serverId');
|
||||
let sid: string = session.get('sid');
|
||||
|
||||
|
||||
let { hid, star, starStage, isOneClick } = msg;
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
@@ -208,8 +211,9 @@ export class HeroHandler {
|
||||
let sid: string = session.get('sid');
|
||||
let serverId: number = session.get('serverId');
|
||||
|
||||
|
||||
let { hid, quality } = msg;
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
// 根据dic_hero 获得 碎片id
|
||||
@@ -259,8 +263,9 @@ export class HeroHandler {
|
||||
let roleName: string = session.get('roleName');
|
||||
const serverId = session.get('serverId');
|
||||
|
||||
|
||||
let { hid, colorStar, colorStarStage, isOneClick } = msg;
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
// 根据dic_hero 获得 1. 碎片id 2. 碎片数量 3. 初始武将星级 4. 初始品质
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
@@ -336,6 +341,8 @@ export class HeroHandler {
|
||||
|
||||
const serverId = session.get('serverId');
|
||||
let { hid, isOneClick, canReplace = false } = msg;
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
|
||||
@@ -387,6 +394,8 @@ export class HeroHandler {
|
||||
let sid: string = session.get('sid');
|
||||
|
||||
let { hid } = msg;
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if (!hero)
|
||||
return resResult(STATUS.HERO_NOT_FIND);
|
||||
@@ -424,6 +433,7 @@ export class HeroHandler {
|
||||
let serverId: number = session.get('serverId');
|
||||
|
||||
let { hid, shipId, type } = msg;
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let dicFriendShip = getFriendShipByIdAndLv(hid, shipId, 1);
|
||||
if(!dicFriendShip) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
@@ -506,9 +516,12 @@ export class HeroHandler {
|
||||
let serverId: number = session.get('serverId');
|
||||
|
||||
let { id } = msg;
|
||||
if(isGoodsHidden(id)) return resResult(STATUS.FASHION_IS_HIDDEN);
|
||||
let dicSkin = gameData.fashion.get(id);
|
||||
// console.log('*****', id, dicSkin)
|
||||
if (!dicSkin) return resResult(STATUS.HERO_SKIN_NOT_FIND);
|
||||
if(isHeroHidden(dicSkin.actorId)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let hero = await HeroModel.findByHidAndRole(dicSkin.actorId, roleId);
|
||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
|
||||
@@ -637,11 +650,13 @@ export class HeroHandler {
|
||||
let serverId = session.get('serverId');
|
||||
let { hid, id } = msg;
|
||||
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if(!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let dicHeroTalent = gameData.heroTalent.get(id);
|
||||
if(!dicHeroTalent) return resResult(STATUS.WRONG_PARMS);
|
||||
if(!dicHeroTalent) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if(!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
|
||||
let skins = hero.skins||[];
|
||||
let curSkin = skins.find(cur => cur.enable);
|
||||
@@ -676,6 +691,11 @@ export class HeroHandler {
|
||||
let serverId = session.get('serverId');
|
||||
let { hid, id } = msg;
|
||||
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let dicHeroTalent = gameData.heroTalent.get(id);
|
||||
if(!dicHeroTalent) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if(!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
|
||||
@@ -686,9 +706,6 @@ export class HeroHandler {
|
||||
let talent = curSkin.talent.find(cur => cur.id == id);
|
||||
if(!talent) return resResult(STATUS.TALENT_NOT_UNLOCKED);
|
||||
|
||||
let dicHeroTalent = gameData.heroTalent.get(id);
|
||||
if(!dicHeroTalent) return resResult(STATUS.WRONG_PARMS);
|
||||
|
||||
let usedTalentPoint = curSkin.usedTalentPoint;
|
||||
let totalTalentPoint = gameData.talentPointOfJob.get(hero.job);
|
||||
let nextLv = dicHeroTalent.level.find(cur => cur.lv == talent.level + 1);
|
||||
@@ -712,6 +729,8 @@ export class HeroHandler {
|
||||
let serverId = session.get('serverId');
|
||||
let { hid } = msg;
|
||||
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId);
|
||||
if(!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ import { calculateCeWithHero, calculateCeWithRole } from '../../../services/play
|
||||
import { sendMessageToUserWithSuc } from '../../../services/pushService';
|
||||
import { GuildLeader } from '../../../domain/rank';
|
||||
import { checkPopUpCondition } from '../../../services/activity/popUpShopService';
|
||||
import { isGoodsHidden, isHeroHidden } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -200,6 +201,9 @@ export class RoleHandler {
|
||||
const serverId = session.get('serverId');
|
||||
|
||||
let { schoolId, positionId, hid } = msg;
|
||||
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
if (!gameData.school.has(schoolId)) {
|
||||
return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
}
|
||||
@@ -289,12 +293,14 @@ export class RoleHandler {
|
||||
|
||||
let { hid } = msg;
|
||||
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId, 'hid lv star colorStar quality scrollId scrollActive scrollStar scrollColorStar scrollQuality connections attr ce');
|
||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
if(isHeroHidden(hid)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if (!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let hero = await HeroModel.findByHidAndRole(hid, roleId, 'hid lv star colorStar quality scrollId scrollActive scrollStar scrollColorStar scrollQuality connections attr ce');
|
||||
if (!hero) return resResult(STATUS.HERO_NOT_FIND);
|
||||
|
||||
let { star, colorStar, quality, scrollId, scrollActive, scrollStar, scrollColorStar, scrollQuality } = hero;
|
||||
|
||||
let update = {
|
||||
@@ -338,6 +344,8 @@ export class RoleHandler {
|
||||
let roleId = session.get('roleId');
|
||||
let serverId = session.get('serverId');
|
||||
|
||||
if(isHeroHidden(...showLineup)) return resResult(STATUS.HERO_IS_HIDDEN);
|
||||
|
||||
let checkHeroes = await checkBattleHeroesByHid(roleId, showLineup);
|
||||
if (showLineup.length > 0 && !checkHeroes) return resResult(STATUS.BATTLE_HERO_NOT_FOUND);
|
||||
|
||||
@@ -357,6 +365,9 @@ export class RoleHandler {
|
||||
let { id } = msg;
|
||||
let roleId = session.get('roleId');
|
||||
let guildCode = session.get('guildCode');
|
||||
|
||||
if(isGoodsHidden(id)) return resResult(STATUS.ITEM_IS_HIDDEN);
|
||||
|
||||
let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS);
|
||||
if (!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||
|
||||
@@ -386,6 +397,9 @@ export class RoleHandler {
|
||||
let { id } = msg;
|
||||
let roleId = session.get('roleId');
|
||||
let guildCode = session.get('guildCode');
|
||||
|
||||
if(isGoodsHidden(id)) return resResult(STATUS.ITEM_IS_HIDDEN);
|
||||
|
||||
let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS);
|
||||
if (!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||
|
||||
@@ -415,6 +429,9 @@ export class RoleHandler {
|
||||
let { id } = msg;
|
||||
let roleId = session.get('roleId');
|
||||
let guildCode = session.get('guildCode');
|
||||
|
||||
if(isGoodsHidden(id)) return resResult(STATUS.ITEM_IS_HIDDEN);
|
||||
|
||||
let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS);
|
||||
if (!role) return resResult(STATUS.ROLE_NOT_FOUND);
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ import { checkShopInPurchase, getShopDicById, getShopListByType, getShopPrice }
|
||||
import { RewardInter } from "../../../pubUtils/interface";
|
||||
import { UserShopTypeModel } from "../../../db/UserShopType";
|
||||
import { nowSeconds } from "../../../pubUtils/timeUtil";
|
||||
import { isGoodsHidden } from "../../../services/dataService";
|
||||
|
||||
export default function(app: Application) {
|
||||
return new ShopHandler(app);
|
||||
@@ -99,6 +100,7 @@ export class ShopHandler {
|
||||
let sid = session.get('sid');
|
||||
let { goodsId, count } = msg;
|
||||
|
||||
if(isGoodsHidden(goodsId)) return resResult(STATUS.ITEM_IS_HIDDEN);
|
||||
let dicGoods = gameData.goods.get(goodsId);
|
||||
if(!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
let dicItid = ITID.get(dicGoods.itid);
|
||||
|
||||
@@ -8,6 +8,7 @@ import { getServerMainten, setServerMainten, stopServerMainten } from '../../../
|
||||
import { errlogger } from '../../../util/logger';
|
||||
import { setApiIsClose } from '../../../services/chatService';
|
||||
import { setPvpSeasonNum, setPvpSettleSeasonNum } from '../../../services/timeTaskService';
|
||||
import { setHiddenData } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
new HandlerService(app, {});
|
||||
@@ -141,4 +142,12 @@ export class RoleRemote {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async setHiddenData(heroes: number[], goods: number[], refTime: number) {
|
||||
try {
|
||||
setHiddenData(heroes, goods, refTime);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ import { ServerMailType } from '../../../db/ServerMail';
|
||||
import { ActivityModelType } from '../../../db/Activity';
|
||||
import { GUILD_ACTIVITY_TYPE, LADDER_STATUS } from '../../../consts';
|
||||
import { setApiIsClose } from '../../../services/chatService';
|
||||
import { setHiddenData } from '../../../services/dataService';
|
||||
|
||||
export default function (app: Application) {
|
||||
return new SystimerRemote(app);
|
||||
@@ -232,4 +233,13 @@ export class SystimerRemote {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
public async setHiddenData(heroes: number[], goods: number[], refTime: number) {
|
||||
try {
|
||||
setHiddenData(heroes, goods, refTime);
|
||||
} catch(e) {
|
||||
errlogger.error(`remote ${__filename} \n ${e.stack}`);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
96
game-server/app/services/dataService.ts
Normal file
96
game-server/app/services/dataService.ts
Normal 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;
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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";
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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}`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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 —————————————— //
|
||||
@@ -4,17 +4,20 @@ let logger: Logger;
|
||||
let infologger: Logger;
|
||||
let errlogger: Logger;
|
||||
let taLogger: Logger;
|
||||
let itemLogger: Logger;
|
||||
|
||||
export function loadLogger(sid: string) {
|
||||
logger = getLogger();
|
||||
infologger = getLogger('info', sid);
|
||||
errlogger = getLogger('err', sid);
|
||||
taLogger = getLogger('ta');
|
||||
itemLogger = getLogger('item');
|
||||
}
|
||||
|
||||
export {
|
||||
logger,
|
||||
infologger,
|
||||
errlogger,
|
||||
taLogger
|
||||
taLogger,
|
||||
itemLogger
|
||||
}
|
||||
@@ -113,6 +113,17 @@ module.exports = {
|
||||
'pattern': '%m',
|
||||
},
|
||||
'backups': 240,
|
||||
},
|
||||
'item': {
|
||||
'type': 'file',
|
||||
'filename': '/zyz_logs/item/log',
|
||||
'pattern': 'yyyy-MM-dd-hh',
|
||||
'alwaysIncludePattern': true,
|
||||
'layout': {
|
||||
'type': 'pattern',
|
||||
'pattern': '%m',
|
||||
},
|
||||
'backups': 240,
|
||||
}
|
||||
},
|
||||
|
||||
@@ -168,6 +179,10 @@ module.exports = {
|
||||
'ta': {
|
||||
'appenders': ['console', 'ta'],
|
||||
'level': 'info'
|
||||
},
|
||||
'item': {
|
||||
'appenders': ['console', 'item'],
|
||||
'level': 'info'
|
||||
}
|
||||
},
|
||||
'replaceConsole': true,
|
||||
|
||||
@@ -113,6 +113,17 @@ module.exports = {
|
||||
'pattern': '%m',
|
||||
},
|
||||
'backups': 240,
|
||||
},
|
||||
'item': {
|
||||
'type': 'file',
|
||||
'filename': '/zyz_logs/item/log',
|
||||
'pattern': 'yyyy-MM-dd-hh',
|
||||
'alwaysIncludePattern': true,
|
||||
'layout': {
|
||||
'type': 'pattern',
|
||||
'pattern': '%m',
|
||||
},
|
||||
'backups': 240,
|
||||
}
|
||||
},
|
||||
|
||||
@@ -168,6 +179,10 @@ module.exports = {
|
||||
'ta': {
|
||||
'appenders': ['console', 'ta'],
|
||||
'level': 'info'
|
||||
},
|
||||
'item': {
|
||||
'appenders': ['console', 'item'],
|
||||
'level': 'info'
|
||||
}
|
||||
},
|
||||
'replaceConsole': true,
|
||||
|
||||
@@ -151,6 +151,7 @@ module.exports = {
|
||||
{ 'id': 'guild-server-1', 'host': '172.26.145.161', 'port': 6057, "args": " --inspect=9239" },
|
||||
],
|
||||
'activity': [
|
||||
{ 'id': 'activity-server-1', 'host': '172.26.145.161', 'port': 6059, "args": " --inspect=9241" },
|
||||
],
|
||||
'order': [
|
||||
{ 'id': 'order-server-1', 'host': '172.26.145.161', 'port': 6060, "args": " --inspect=9242" },
|
||||
@@ -286,7 +287,6 @@ module.exports = {
|
||||
{ 'id': 'guild-server-3', 'host': '172.26.145.171', 'port': 6071 },
|
||||
],
|
||||
'activity': [
|
||||
{ 'id': 'activity-server-1', 'host': '172.26.145.171', 'port': 6059, "args": " --inspect=9241" },
|
||||
],
|
||||
},
|
||||
'sq1': {
|
||||
|
||||
@@ -201,4 +201,18 @@ export default class GameController extends Controller {
|
||||
ctx.body = await ctx.service.game.getPvpConfig(page, pageSize, sortField, sortOrder);
|
||||
return
|
||||
}
|
||||
|
||||
public async getHiddenData() {
|
||||
const { ctx } = this;
|
||||
const { page, pageSize, sortField, sortOrder, form } = ctx.request.body;
|
||||
ctx.body = await ctx.service.game.getHiddenData(page, pageSize, sortField, sortOrder, form);
|
||||
return
|
||||
}
|
||||
|
||||
public async getExistHiddenData() {
|
||||
const { ctx } = this;
|
||||
const { type } = ctx.request.body;
|
||||
ctx.body = await ctx.service.game.getExistHiddenData(type);
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,6 +57,8 @@ export default (app: Application) => {
|
||||
router.post('/api/game/getsurveylist', tokenParser, controller.game.getSurveylist);
|
||||
router.post('/api/game/getchannelinfo', controller.game.getChannelInfo);
|
||||
router.post('/api/game/updatechannel', controller.game.updateChannel);
|
||||
router.post('/api/game/gethiddendata', controller.game.getHiddenData);
|
||||
router.post('/api/game/getexisthiddendata', controller.game.getExistHiddenData);
|
||||
|
||||
router.post('/api/dic/getdicgoods', tokenParser, controller.game.getDicGoods);
|
||||
router.post('/api/dic/getdichero', tokenParser, controller.game.getDicHero);
|
||||
|
||||
@@ -22,6 +22,7 @@ import { SurveyModel } from '@db/Survery';
|
||||
import { RedisClient } from 'redis';
|
||||
import { ChannelInfoModel } from '@db/ChannelInfo';
|
||||
import { PVPConfigModel } from '@db/PvpConfig';
|
||||
import { HiddenDataByIdModel } from '@db/HiddenDataById';
|
||||
|
||||
/**
|
||||
* Test Service
|
||||
@@ -324,4 +325,26 @@ export default class Game extends Service {
|
||||
list, total
|
||||
});
|
||||
}
|
||||
|
||||
public async getHiddenData(page: number, pageSize: number, sortField: string, sortOrder: string, form: any) {
|
||||
const { ctx } = this;
|
||||
|
||||
const list = await HiddenDataByIdModel.findByCondition(page, pageSize, sortField, sortOrder, form);
|
||||
const total = await HiddenDataByIdModel.countByCondition(form);
|
||||
return ctx.service.utils.resResult(STATUS.SUCCESS, {
|
||||
list: list.map(cur => {
|
||||
return { ...cur, env: this.app.config.realEnv }
|
||||
}), total
|
||||
});
|
||||
}
|
||||
|
||||
public async getExistHiddenData(type: number) {
|
||||
const { ctx } = this;
|
||||
let datas = await HiddenDataByIdModel.findExistData(type);
|
||||
let existIds = datas.map(cur => cur.id);
|
||||
|
||||
return ctx.service.utils.resResult(STATUS.SUCCESS, {
|
||||
ids: existIds
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -166,4 +166,5 @@ export const PUSH_ROUTE = {
|
||||
LADDER_BATTLE_STOP: 'onLadderBattleStop',
|
||||
LADDER_RANK_UPDATE: 'onLadderRankUpdate',
|
||||
GROUP_SHOP_UPDATE: 'onGroupShopUpdate',
|
||||
HIDDEN_DATA: 'onHiddenData',
|
||||
}
|
||||
@@ -51,7 +51,8 @@ export const COUNTER = {
|
||||
REGION: { name: 'region', def: 1 },
|
||||
GATE_ACTIVITY: { name: 'guildAct', def: 1 },
|
||||
CITY_ACTIVITY: { name: 'cityAct', def: 1 },
|
||||
RACE_ACTIVITY: { name: 'raceAct', def: 1 }
|
||||
RACE_ACTIVITY: { name: 'raceAct', def: 1 },
|
||||
HIDDEN_DATA: { name: 'hiddendata', def: 1 },
|
||||
};
|
||||
|
||||
export const DEFAULT_HEROES = [19, 53,];
|
||||
|
||||
@@ -330,6 +330,9 @@ export const STATUS = {
|
||||
TALENT_POINT_NOT_ENOUGH: { code: 30313, simStr: '天赋点不足' },
|
||||
TALENT_NOT_UNLOCKED: { code: 30314, simStr: '该天赋未解锁' },
|
||||
TALENT_LEVEL_MAX: { code: 30315, simStr: '该天赋等级已达最高' },
|
||||
HERO_IS_HIDDEN: { code: 30316, simStr: '未找到该武将' },
|
||||
FASHION_IS_HIDDEN: { code: 30317, simStr: '未找到该时装' },
|
||||
ITEM_IS_HIDDEN: { code: 30318, simStr: '未找到该道具' },
|
||||
|
||||
// 装备养成 30400-30499
|
||||
ROLE_EQUIP_PLACE_NOT_ENOUGH: { code: 30400, simStr: '装备栏未装备或无可强化' },
|
||||
@@ -542,6 +545,10 @@ export const STATUS = {
|
||||
GM_MAIL_NOT_FOUND: { code: 60024, simStr: '未找到该邮件' },
|
||||
GM_MAIL_HAS_SENT: { code: 60025, simStr: '邮件已经审批过了' },
|
||||
GM_MAIL_CAN_NOT_SENT: { code: 60026, simStr: '邮件不可发送' },
|
||||
GM_REMOVED_GID: { code: 60027, simStr: '已移除过隐藏的id不可再次隐藏' },
|
||||
GM_HIDDEN_TIME_ERR: { code: 60028, simStr: '时间不可有所重叠' },
|
||||
GM_OLD_REF_TIME_ERR: { code: 60029, simStr: '正在进行中的时间不可更新成未来' },
|
||||
GM_HIDDEN_CANNOT_INIT: { code: 60030, simStr: '已初始化过' },
|
||||
// 支付相关状态 70000 - 79999
|
||||
NO_PRODUCT_ID: { code: 70001, simStr: '无效商品' },
|
||||
NO_PAY_TYPE: { code: 70002, simStr: '无效支付类型' },
|
||||
|
||||
44
shared/db/HiddenData.ts
Normal file
44
shared/db/HiddenData.ts
Normal file
@@ -0,0 +1,44 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
|
||||
/**
|
||||
* 累计充值活动
|
||||
*/
|
||||
@index({ refTime: -1 })
|
||||
|
||||
export default class HiddenData extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
refTime: number; // 刷新时间
|
||||
|
||||
@prop({ required: true, type: Number })
|
||||
heroes: number[]; // 武将id
|
||||
|
||||
@prop({ required: true, type: Number })
|
||||
goods: number[]; // 物品id
|
||||
|
||||
public static async clearData() {
|
||||
await HiddenDataModel.deleteMany({});
|
||||
}
|
||||
|
||||
public static async updateHiddenData(refTime: number, heroes: number[], goods: number[], uid: number) {
|
||||
let result: HiddenDataModelType = await HiddenDataModel.findOneAndUpdate({ refTime }, { $setOnInsert: { createdBy: uid }, $set: { heroes, goods, updatedBy: uid } }, { new: true, upsert: true});
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findCurData(now: number) {
|
||||
let result: HiddenDataModelType = await HiddenDataModel.findOne({ refTime: { $lte: now }}).sort({ refTime: -1 });
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findNextData(now: number) {
|
||||
console.log('####', now)
|
||||
let result: HiddenDataModelType = await HiddenDataModel.findOne({ refTime: { $gt: now } }).sort({ refTime: 1 });
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const HiddenDataModel = getModelForClass(HiddenData);
|
||||
|
||||
export interface HiddenDataModelType extends Pick<DocumentType<HiddenData>, keyof HiddenData> { }
|
||||
export type HiddenDataModelTypeParam = Partial<HiddenDataModelType>; // 将所有字段变成可选项
|
||||
103
shared/db/HiddenDataById.ts
Normal file
103
shared/db/HiddenDataById.ts
Normal file
@@ -0,0 +1,103 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
import { nowSeconds } from '../pubUtils/timeUtil';
|
||||
import { isArray } from 'util';
|
||||
|
||||
/**
|
||||
* 累计充值活动
|
||||
*/
|
||||
@index({ type: 1, id: -1 })
|
||||
@index({ refTime: 1 })
|
||||
|
||||
export default class HiddenDataById extends BaseModel {
|
||||
|
||||
@prop({ required: true })
|
||||
type: number; // 1-武将 2-道具
|
||||
|
||||
@prop({ required: true })
|
||||
id: number; // 武将id or 道具id
|
||||
|
||||
@prop({ required: false })
|
||||
publishTime: number; // 结束隐藏时间
|
||||
|
||||
public static async checkHasInit(type: number, ids: number[]) {
|
||||
return await HiddenDataByIdModel.exists({ type, id: ids });
|
||||
}
|
||||
|
||||
private static getSearchObj(form: any) {
|
||||
let searchObj = {};
|
||||
let orData = [];
|
||||
if(form.heroes && isArray(form.heroes) && form.heroes.length > 0) {
|
||||
orData.push({ type: 1, id: { $in: form.heroes }});
|
||||
}
|
||||
if(form.goods && isArray(form.goods) && form.goods.length > 0) {
|
||||
orData.push({ type: 2, id: { $in: form.goods }});
|
||||
}
|
||||
if(orData.length > 0) {
|
||||
searchObj['$or'] = orData;
|
||||
}
|
||||
return searchObj
|
||||
}
|
||||
|
||||
public static async findByCondition(page: number, pageSize: number, sortField: string = 'updatedAt', sortOrder: string = 'descend', form: any = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
let sort = {};
|
||||
if(sortField && sortOrder) {
|
||||
if(sortOrder == 'ascend') {
|
||||
sort[sortField] = 1;
|
||||
} else if (sortOrder == 'descend') {
|
||||
sort[sortField] = -1;
|
||||
}
|
||||
}
|
||||
const result: HiddenDataByIdModelType[] = await HiddenDataByIdModel.find(searchObj).limit(pageSize).skip((page - 1) * pageSize).sort(sort).lean({ getters: true, virtuals: true });
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
public static async countByCondition(form: any = {}) {
|
||||
|
||||
let searchObj = this.getSearchObj(form);
|
||||
const result = await HiddenDataByIdModel.count(searchObj);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async createDatas(datas: HiddenDataByIdModelTypeParam[]) {
|
||||
await HiddenDataByIdModel.insertMany(datas);
|
||||
}
|
||||
|
||||
public static async findAllData() {
|
||||
let result: { _id: number, ids: {type: number, id: number }[]}[] = await HiddenDataByIdModel.aggregate([
|
||||
{ $match: { publishTime: { $gte: nowSeconds() } } },
|
||||
{ $group: { _id: '$publishTime', ids: { $push: { type: '$type', id: '$id' } }} },
|
||||
{ $sort: { _id: -1 } }
|
||||
]);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async findExistData(type: number) {
|
||||
let result: { type: number, id: number }[] = await HiddenDataByIdModel.aggregate([
|
||||
{ $match: { type } },
|
||||
{ $project: { id: 1 } }
|
||||
]);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async checkById(type: number, ids: number[], publishTime: number) {
|
||||
let now = nowSeconds();
|
||||
if (publishTime >= now) { // 设为隐藏,不可有原来公开着的
|
||||
let result = await HiddenDataByIdModel.exists({ type, id: { $in: ids }, publishTime: { $lt: now } });
|
||||
return !result
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static async updateData(type: number, id: number, publishTime: number, uid: number) {
|
||||
await HiddenDataByIdModel.findOneAndUpdate({ type, id }, { $set: { publishTime, updatedBy: uid }, $setOnInsert: { createdBy: uid } }, { new: true, upsert: true }).lean();
|
||||
}
|
||||
}
|
||||
|
||||
export const HiddenDataByIdModel = getModelForClass(HiddenDataById);
|
||||
|
||||
export interface HiddenDataByIdModelType extends Pick<DocumentType<HiddenDataById>, keyof HiddenDataById> { }
|
||||
export type HiddenDataByIdModelTypeParam = Partial<HiddenDataByIdModelType>; // 将所有字段变成可选项
|
||||
@@ -470,4 +470,29 @@ export class CreatePvpConfigParam {
|
||||
let { seasonStartTime, seasonEndTime, seasonRewardTime, warIds } = this;
|
||||
return { seasonStartTime, seasonEndTime, seasonRewardTime, warIds: parseNumberList(warIds)}
|
||||
}
|
||||
}
|
||||
|
||||
export class UpdateHiddenDataParam {
|
||||
env: string = '';
|
||||
arr: { type: number, id: number }[] = [];
|
||||
publishTime: number = 0;
|
||||
constructor(obj?: any) {
|
||||
if(obj) {
|
||||
for(let key in obj) {
|
||||
this[key] = obj[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
checkParams() {
|
||||
// console.log('##### createNew', this.env, this.openTime, this.stopRegisterTime, this.hasOpenMail, this.hasCircleMail)
|
||||
if(!isArray(this.arr)) return false;
|
||||
for(let { type, id } of this.arr) {
|
||||
if(!isNumber(type) || !isNumber(id)) return false;
|
||||
}
|
||||
if(!this.env || !isNumber(this.publishTime)) {
|
||||
return false
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@@ -57,7 +57,7 @@ import { dicCityActivityReward, loadCityActivityReward } from "./dictionary/DicC
|
||||
import { dicRaceActivity, dicRaceTypes, loadRaceActivity } from './dictionary/DicRaceActivity';
|
||||
import { GUILDACTIVITY, RECRUIT } from "./dicParam";
|
||||
import * as param from "./dicParam";
|
||||
import { decodeIdCntArrayStr, parseGoodStr, decodeArrayListStr, getRandEelm, readTsFile, getRandEelmWithWeight, getRandSingleEelm } from "./util";
|
||||
import { decodeIdCntArrayStr, parseGoodStr, decodeArrayListStr, getRandEelm, readTsFile, getRandSingleEelm } from "./util";
|
||||
import { RACE_EVENT_TYPE } from "../consts";
|
||||
import { dicShopByType, dicShopItem, loadShop } from "./dictionary/DicShop";
|
||||
import { dicShopType, loadShopType } from "./dictionary/DicShopType";
|
||||
@@ -110,7 +110,6 @@ import { dicLadderMatch, loadLadderMatch } from "./dictionary/DicLadderMatch";
|
||||
import { dicLadderDifficultRatio, loadLadderDifficultRatio } from "./dictionary/DicLadderDifficultRatio";
|
||||
import { dicLadderRankReward, loadLadderRankReward } from "./dictionary/DicLadderRankReward";
|
||||
import { dicGeneralGoods, loadGeneralGoods } from "./dictionary/DicGeneralGoods";
|
||||
import { AuctionRewardInter } from "../domain/battleField/auction";
|
||||
|
||||
export const gameData = {
|
||||
daily: dicDaily,
|
||||
@@ -654,51 +653,6 @@ export function getTodayGuildActivity() {
|
||||
return dic;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据军团活动排名获得奖励
|
||||
* @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 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 getGuildAuctionBasicNum(aid: number, rank: number, struLv: number, cityId: number = 0) {
|
||||
let dic = getGuildAuction(aid, rank, struLv, cityId);
|
||||
return dic?.basicDividend||0;
|
||||
}
|
||||
|
||||
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(!rewards.has(id)) {
|
||||
rewards.set(id, []);
|
||||
}
|
||||
rewards.get(id).push({ goods: {id, count}, basePrice, maxPrice, sort });
|
||||
}
|
||||
}
|
||||
}
|
||||
return rewards;
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据军团活动排名获得功勋奖励
|
||||
* @param type 城池类型
|
||||
|
||||
@@ -908,5 +908,19 @@
|
||||
"name": "保存pvp赛季",
|
||||
"module": "sys",
|
||||
"type": "update"
|
||||
},
|
||||
{
|
||||
"id": 131,
|
||||
"api": "gm.gmServerHandler.initHiddenData",
|
||||
"name": "初始隐藏数据",
|
||||
"module": "sys",
|
||||
"type": "update"
|
||||
},
|
||||
{
|
||||
"id": 132,
|
||||
"api": "gm.gmServerHandler.saveHiddenData",
|
||||
"name": "更新隐藏数据",
|
||||
"module": "sys",
|
||||
"type": "update"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user