寻宝:协助次数&匹配范围修改
This commit is contained in:
@@ -266,7 +266,6 @@ if (app.isMaster()) {
|
|||||||
// 全部服务器启动完毕后初始化 redis 数据
|
// 全部服务器启动完毕后初始化 redis 数据
|
||||||
redisService.checkConnectors();
|
redisService.checkConnectors();
|
||||||
redisService.readDataBase();
|
redisService.readDataBase();
|
||||||
redisService.clearComBtlQueue();
|
|
||||||
redisService.clearChannelServers();
|
redisService.clearChannelServers();
|
||||||
updateTeamStatus(COM_TEAM_STATUS.DEFAULT, COM_TEAM_STATUS.LOOSE);
|
updateTeamStatus(COM_TEAM_STATUS.DEFAULT, COM_TEAM_STATUS.LOOSE);
|
||||||
updateTeamStatus(COM_TEAM_STATUS.FIGHTING, COM_TEAM_STATUS.LOOSE);
|
updateTeamStatus(COM_TEAM_STATUS.FIGHTING, COM_TEAM_STATUS.LOOSE);
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import { difference } from 'underscore';
|
|||||||
* @Last Modified by: 梁桐川
|
* @Last Modified by: 梁桐川
|
||||||
* @Last Modified time: 2021-08-27 17:47:56
|
* @Last Modified time: 2021-08-27 17:47:56
|
||||||
*/
|
*/
|
||||||
import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, COM_BTL_QUALITY, MSG_SOURCE, QUALITY_TYPE, ROLE_SELECT, TASK_TYPE, KING_EXP_RATIO_TYPE, ITEM_CHANGE_REASON, getChannelType, CHANNEL_PREFIX } from './../../../consts';
|
import { IT_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, COM_TEAM_STATUS, COM_BTL_CONST, CONSUME_TYPE, MSG_SOURCE, ROLE_SELECT, TASK_TYPE, KING_EXP_RATIO_TYPE, ITEM_CHANGE_REASON, getChannelType, CHANNEL_PREFIX } from './../../../consts';
|
||||||
import Role, { RoleModel } from '../../../db/Role';
|
import Role, { RoleModel } from '../../../db/Role';
|
||||||
import { STATUS } from '../../../consts/statusCode';
|
import { STATUS } from '../../../consts/statusCode';
|
||||||
import { Application, BackendSession } from 'pinus';
|
import { Application, BackendSession } from 'pinus';
|
||||||
@@ -15,7 +15,7 @@ import { RoleStatus, ComBattleTeamModel, ComBattleTeamType, BossHp, ComRoleStatu
|
|||||||
import { ItemModel, ItemType } from '../../../db/Item';
|
import { ItemModel, ItemType } from '../../../db/Item';
|
||||||
import { addItems, handleCost } from '../../../services/rewardService';
|
import { addItems, handleCost } from '../../../services/rewardService';
|
||||||
import { checkRoleInQueue, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
import { checkRoleInQueue, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
||||||
import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, createComTeamData, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam } from '../../../services/comBattleService';
|
import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam } from '../../../services/comBattleService';
|
||||||
import { setAp } from '../../../services/actionPointService';
|
import { setAp } from '../../../services/actionPointService';
|
||||||
import { roleLevelup } from '../../../services/normalBattleService';
|
import { roleLevelup } from '../../../services/normalBattleService';
|
||||||
import { addUserToChannel, getSimpleRoleInfo } from '../../../services/roleService';
|
import { addUserToChannel, getSimpleRoleInfo } from '../../../services/roleService';
|
||||||
@@ -72,7 +72,7 @@ export class ComBattleHandler {
|
|||||||
let channel = channelService.getChannel(teamCode, true);
|
let channel = channelService.getChannel(teamCode, true);
|
||||||
|
|
||||||
// 创建队伍数据结构
|
// 创建队伍数据结构
|
||||||
let comTeam: MemComBtlTeam = createComTeamData(teamCode, pub, blueprtId, roleId, ceLimit);
|
let comTeam = new MemComBtlTeam(teamCode, pub, blueprtId, roleId, ceLimit);
|
||||||
addRoleToTeam(comTeam, roleInfo, true, false);
|
addRoleToTeam(comTeam, roleInfo, true, false);
|
||||||
addUserToChannel(channel, new ChannelUser(roleId, sid));
|
addUserToChannel(channel, new ChannelUser(roleId, sid));
|
||||||
// 将正在匹配的符合要求的玩家加入队伍,并推送入队消息
|
// 将正在匹配的符合要求的玩家加入队伍,并推送入队消息
|
||||||
@@ -96,50 +96,50 @@ export class ComBattleHandler {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 匹配队伍
|
* @description 匹配队伍
|
||||||
* @param {{qualityArr: [number]}} msg 要匹配的品质数组列表
|
* @param {{ lv: number }} msg 要匹配藏宝图品阶
|
||||||
* @param {BackendSession} session
|
* @param {BackendSession} session
|
||||||
* @returns
|
* @returns
|
||||||
* @memberof ComBattleHandler
|
* @memberof ComBattleHandler
|
||||||
*/
|
*/
|
||||||
async searchTeam(msg: {qualityArr: [number], lvRange: number}, session: BackendSession) {
|
async searchTeam(msg: { lv: number }, session: BackendSession) {
|
||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let sid = session.get('sid');
|
let sid = session.get('sid');
|
||||||
const { qualityArr, lvRange = 1 } = msg;
|
const { lv = 1 } = msg;
|
||||||
const roleInfo = await RoleModel.findByRoleId(roleId, null, true);
|
const roleInfo = await RoleModel.findByRoleId(roleId, null, true);
|
||||||
const { lv } = roleInfo;
|
const { lv: playerLv } = roleInfo;
|
||||||
let { topLineupCe = 1000 } = roleInfo;
|
let { topLineupCe = 1000 } = roleInfo;
|
||||||
|
|
||||||
if(await checkHasMyTeam(roleId)) {
|
if(await checkHasMyTeam(roleId)) {
|
||||||
return resResult(STATUS.COM_BATTLE_IS_RUNNING);
|
return resResult(STATUS.COM_BATTLE_IS_RUNNING);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (comBtlLvInvalid(lv, lvRange)) {
|
if (comBtlLvInvalid(playerLv, lv)) {
|
||||||
return resResult(STATUS.COM_BATTLE_ASSIST_LV_NOT_ENOUGH);
|
return resResult(STATUS.COM_BATTLE_ASSIST_LV_NOT_ENOUGH);
|
||||||
}
|
}
|
||||||
if (difference(qualityArr, COM_BTL_QUALITY).length !== 0) {
|
|
||||||
|
if (!gameData.blueprtByLv.has(lv)) {
|
||||||
return resResult(STATUS.COM_BLUEPRT_QUALITY_ERROR);
|
return resResult(STATUS.COM_BLUEPRT_QUALITY_ERROR);
|
||||||
}
|
}
|
||||||
|
|
||||||
const teams = await ComBattleTeamModel.getOtherTeamByQualityAndSt(roleId, qualityArr, COM_TEAM_STATUS.DEFAULT, lvRange, topLineupCe);
|
const teams = await ComBattleTeamModel.getOtherTeamByLvAndSt(roleId, lv, COM_TEAM_STATUS.DEFAULT, topLineupCe);
|
||||||
const team: ComBattleTeamType = await oneTeamNotInBlack(teams, roleId);
|
const team: ComBattleTeamType = await oneTeamNotInBlack(teams, roleId);
|
||||||
if (team && team.roleIds.length < 3 && team.status === COM_TEAM_STATUS.DEFAULT && team.roleIds.indexOf(roleId) === -1 && team.blacklist && team.blacklist.indexOf(roleId) === -1) {
|
if (team && team.roleIds.length < 3 && team.status === COM_TEAM_STATUS.DEFAULT && team.roleIds.indexOf(roleId) === -1 && team.blacklist && team.blacklist.indexOf(roleId) === -1) {
|
||||||
return resResult(STATUS.SUCCESS, {teamCode: team.teamCode});
|
return resResult(STATUS.SUCCESS, {teamCode: team.teamCode});
|
||||||
}
|
}
|
||||||
|
|
||||||
let teamCode = session.get('teamCode');
|
let teamCode = session.get('teamCode');
|
||||||
await setTeamSearchReq(roleId, sid, qualityArr, lvRange);
|
await setTeamSearchReq(roleId, sid, lv);
|
||||||
let thiz = this;
|
let thiz = this;
|
||||||
// 倒计时匹配两个机器人
|
// 倒计时匹配两个机器人
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
let inQueue = await checkRoleInQueue(roleId, sid, qualityArr, lvRange);
|
let inQueue = await checkRoleInQueue(roleId, sid, lv);
|
||||||
if (!inQueue) return;
|
if (!inQueue) return;
|
||||||
await rmRoleFromQueue(roleId, sid, qualityArr, lvRange);
|
await rmRoleFromQueue(roleId, sid, lv);
|
||||||
// 创建队伍
|
// 创建队伍
|
||||||
let blueprtId = getRandBlueprtId(qualityArr, lvRange).pop();
|
let blueprtId = getRandBlueprtId(lv).pop();
|
||||||
let comTeam: MemComBtlTeam = createComTeamData(teamCode, false, blueprtId, 'robot', 0)
|
let comTeam = new MemComBtlTeam(teamCode, false, blueprtId, 'robot', 0)
|
||||||
|
|
||||||
let { quality } = gameData.goods.get(blueprtId);
|
let isFrd = await getFrd(roleId);
|
||||||
let isFrd = await getFrd(roleId, quality);
|
|
||||||
// 将玩家加入队伍
|
// 将玩家加入队伍
|
||||||
addRoleToTeam(comTeam, roleInfo, false, isFrd);
|
addRoleToTeam(comTeam, roleInfo, false, isFrd);
|
||||||
let channelService = thiz.app.get('channelService');
|
let channelService = thiz.app.get('channelService');
|
||||||
@@ -169,7 +169,7 @@ export class ComBattleHandler {
|
|||||||
let roleId = session.get('roleId');
|
let roleId = session.get('roleId');
|
||||||
let sid = session.get('sid');
|
let sid = session.get('sid');
|
||||||
|
|
||||||
await rmRoleFromQueue(roleId, sid, COM_BTL_QUALITY, null);
|
await rmRoleFromQueue(roleId, sid);
|
||||||
return resResult(STATUS.SUCCESS);
|
return resResult(STATUS.SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,17 +194,16 @@ export class ComBattleHandler {
|
|||||||
|
|
||||||
let { lv = 1, head = EXTERIOR.EXTERIOR_FACE, topLineupCe = 0, frame = EXTERIOR.EXTERIOR_FACECASE, spine = EXTERIOR.EXTERIOR_APPEARANCE } = await Role.findByRoleId(roleId, null, true);
|
let { lv = 1, head = EXTERIOR.EXTERIOR_FACE, topLineupCe = 0, frame = EXTERIOR.EXTERIOR_FACECASE, spine = EXTERIOR.EXTERIOR_APPEARANCE } = await Role.findByRoleId(roleId, null, true);
|
||||||
|
|
||||||
let { quality } = gameData.goods.get(teamStatus.blueprtId);
|
|
||||||
if (lv < COM_BTL_CONST.ENABLE_LV) {
|
if (lv < COM_BTL_CONST.ENABLE_LV) {
|
||||||
return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH);
|
return resResult(STATUS.COM_BATTLE_LV_NOT_ENOUGH);
|
||||||
} else if (comBtlLvInvalid(lv, teamStatus.lvRange)) {
|
} else if (comBtlLvInvalid(lv, teamStatus.lv)) {
|
||||||
return resResult(STATUS.COM_BATTLE_ASSIST_LV_NOT_ENOUGH);
|
return resResult(STATUS.COM_BATTLE_ASSIST_LV_NOT_ENOUGH);
|
||||||
} else if (topLineupCe < teamStatus.ceLimit) {
|
} else if (topLineupCe < teamStatus.ceLimit) {
|
||||||
return resResult(STATUS.COM_BATTLE_CE_LIMIT);
|
return resResult(STATUS.COM_BATTLE_CE_LIMIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isFrd) {
|
if (!isFrd) {
|
||||||
isFrd = await getFrd(roleId, quality);
|
isFrd = await getFrd(roleId);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加入队伍
|
// 加入队伍
|
||||||
@@ -242,7 +241,7 @@ export class ComBattleHandler {
|
|||||||
if (!teamStatus || teamStatus.status !== COM_TEAM_STATUS.DEFAULT) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
if (!teamStatus || teamStatus.status !== COM_TEAM_STATUS.DEFAULT) return resResult(STATUS.COM_BATTLE_TEAM_INVALID);
|
||||||
if (teamStatus.capId === roleId) return resResult(STATUS.COM_BATTLE_SET_FRD_ERR);
|
if (teamStatus.capId === roleId) return resResult(STATUS.COM_BATTLE_SET_FRD_ERR);
|
||||||
if (!isFrd) {
|
if (!isFrd) {
|
||||||
isFrd = await getFrd(roleId, teamStatus.quality);
|
isFrd = await getFrd(roleId);
|
||||||
}
|
}
|
||||||
if (isFrd !== isFrdPre) {
|
if (isFrd !== isFrdPre) {
|
||||||
return resResult(STATUS.COM_BATTLE_ASSIST_NOT_ENOUGH);
|
return resResult(STATUS.COM_BATTLE_ASSIST_NOT_ENOUGH);
|
||||||
@@ -466,7 +465,7 @@ export class ComBattleHandler {
|
|||||||
updateRobotHurtByTime(teamStatus, st, COM_BTL_CONST.ROBOT_BASE_TIME_INTERVAL + idx, channel, this.robotHurtTimer, this.teamMap);
|
updateRobotHurtByTime(teamStatus, st, COM_BTL_CONST.ROBOT_BASE_TIME_INTERVAL + idx, channel, this.robotHurtTimer, this.teamMap);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
await checkTaskInComBattleStart(teamStatus.roleStatus, teamStatus.capId, teamStatus.quality);
|
await checkTaskInComBattleStart(teamStatus.roleStatus, teamStatus.capId, teamStatus.lv);
|
||||||
return resResult(STATUS.SUCCESS);
|
return resResult(STATUS.SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -774,61 +773,4 @@ export class ComBattleHandler {
|
|||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { list: result });
|
return resResult(STATUS.SUCCESS, { list: result });
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 藏宝图合成
|
|
||||||
* @param {{original: Array<{id: number, count: number}>}} msg
|
|
||||||
* @param {BackendSession} session
|
|
||||||
* @returns
|
|
||||||
* @memberof ComBattleHandler
|
|
||||||
*/
|
|
||||||
async composeBlueprt(msg: {original: Array<{id: number, count: number}>}, session: BackendSession) {
|
|
||||||
const roleId = session.get('roleId');
|
|
||||||
const roleName = session.get('roleName');
|
|
||||||
const sid = session.get('sid');
|
|
||||||
const serverId = session.get('serverId');
|
|
||||||
|
|
||||||
|
|
||||||
const { original } = msg;
|
|
||||||
|
|
||||||
// 原材料检查
|
|
||||||
let originalQuality: number, originalSum: number = 0;
|
|
||||||
for(let {id, count} of original) {
|
|
||||||
const goodInfo = gameData.goods.get(id);
|
|
||||||
if(!originalQuality) originalQuality = goodInfo.quality;
|
|
||||||
if(originalQuality != goodInfo.quality) {
|
|
||||||
return resResult(STATUS.COM_BLUEPRT_QUALITY_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(goodInfo.itid == IT_TYPE.BLUEPRT) {
|
|
||||||
originalSum += count;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
const dicCompose = gameData.blurprtCompose.get(originalQuality);
|
|
||||||
if(!dicCompose) {
|
|
||||||
return resResult(STATUS.COM_BLUEPRT_QUALITY_CANNOT_COMPOSE);
|
|
||||||
}
|
|
||||||
if(originalSum != dicCompose.blueprtNum) {
|
|
||||||
return resResult(STATUS.COM_BLUEPRT_COUNT_ERROR);
|
|
||||||
}
|
|
||||||
// 添加寻宝币
|
|
||||||
original.push(...dicCompose.coinNum);
|
|
||||||
// 消耗藏宝图和寻宝币
|
|
||||||
|
|
||||||
let costResult = await handleCost(roleId, sid, original, ITEM_CHANGE_REASON.BLUEPRT_COMPOSE);
|
|
||||||
if(!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH);
|
|
||||||
|
|
||||||
const targetList = gameData.blueprt.get(dicCompose.targetQuality);
|
|
||||||
const target = getRandSingleEelm(targetList);
|
|
||||||
const reward = [{id: target, count: 1}];
|
|
||||||
const goods = await addItems(roleId, roleName, sid, reward, ITEM_CHANGE_REASON.BLUEPRT_COMPOSE);
|
|
||||||
if (dicCompose.targetQuality >= QUALITY_TYPE.ORANGE) {
|
|
||||||
const { name } = gameData.goods.get(target);
|
|
||||||
pushNormalItemMsg(roleId, roleName, serverId, MSG_SOURCE.ORANGE_BLUEPRT_COMPOSE, target, name);
|
|
||||||
}
|
|
||||||
await checkTask(roleId, sid, TASK_TYPE.COM_BATTLE_BLUEPRT, 1, true, { quality: dicCompose.targetQuality });
|
|
||||||
|
|
||||||
return resResult(STATUS.SUCCESS, { goods, costGold: 0 });
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ export class EntryHandler {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
reportTAUserSet(TA_USERSET_TYPE.ADD, roleId, { total_play_time: nowSeconds() - loginTime });
|
reportTAUserSet(TA_USERSET_TYPE.ADD, roleId, { total_play_time: nowSeconds() - loginTime });
|
||||||
rmRoleFromQueue(roleId, sid, COM_BTL_QUALITY, null); // 删除redis中寻宝的匹配记录
|
rmRoleFromQueue(roleId, sid); // 删除redis中寻宝的匹配记录
|
||||||
let channelService = this.app.get('channelService');
|
let channelService = this.app.get('channelService');
|
||||||
let channel = channelService.getChannel(roleId, true);
|
let channel = channelService.getChannel(roleId, true);
|
||||||
channel.leave(roleId, sid);
|
channel.leave(roleId, sid);
|
||||||
|
|||||||
@@ -1,43 +1,33 @@
|
|||||||
import { MemComBtlTeam } from './../domain/battleField/ComBattleTeamField';
|
import { MemComBtlTeam } from './../domain/battleField/ComBattleTeamField';
|
||||||
import { ItemModel } from './../db/Item';
|
import { ItemModel } from './../db/Item';
|
||||||
import { ITEM_CHANGE_REASON, IT_TYPE } from './../consts';
|
import { ITEM_CHANGE_REASON, IT_TYPE } from './../consts';
|
||||||
import { COM_BTL_QUALITY } from './../consts/constModules/itemConst';
|
|
||||||
import { FriendRelationModel } from './../db/FriendRelation';
|
import { FriendRelationModel } from './../db/FriendRelation';
|
||||||
import { RoleModel, RoleType } from './../db/Role';
|
import { RoleModel, RoleType } from './../db/Role';
|
||||||
import { EquipPrintDropType, EquipPrintDropModel } from './../db/EquipPrintDrop';
|
import { EquipPrintDropType, EquipPrintDropModel } from './../db/EquipPrintDrop';
|
||||||
import { FriendPointModel } from './../db/FriendPoint';
|
|
||||||
import { STATUS } from './../consts/statusCode';
|
import { STATUS } from './../consts/statusCode';
|
||||||
import { COM_TEAM_STATUS, FRIEND_DROP_TYPE, COM_BTL_CONST, FRIEND_DROP_MAX } from './../consts';
|
import { COM_TEAM_STATUS, FRIEND_DROP_TYPE, COM_BTL_CONST, FRIEND_DROP_MAX } from './../consts';
|
||||||
import { RoleStatus, ComBattleTeamModel, ComBattleTeamType } from './../db/ComBattleTeam';
|
import { RoleStatus, ComBattleTeamModel, ComBattleTeamType } from './../db/ComBattleTeam';
|
||||||
import { getRandEelm, getRandValue, resResult, ratioReward, getRandValueByMinMax, getRandEelmWithWeight, getRobotInfo } from "../pubUtils/util";
|
import { getRandEelm, getRandValue, resResult, ratioReward, getRandValueByMinMax, getRandEelmWithWeight, getRobotInfo } from "../pubUtils/util";
|
||||||
import { getRandRobot, transBossHpArr } from "./battleService";
|
import { getRandRobot, transBossHpArr } from "./battleService";
|
||||||
import { difference, omit } from 'underscore';
|
|
||||||
import { Channel, ChannelService, pinus } from 'pinus';
|
import { Channel, ChannelService, pinus } from 'pinus';
|
||||||
import { TREASURE, EXTERIOR } from '../pubUtils/dicParam';
|
import { TREASURE, EXTERIOR } from '../pubUtils/dicParam';
|
||||||
import { getFriendLvAdd } from './friendService';
|
import { getFriendLvAdd } from './friendService';
|
||||||
import { getRoleIds } from '../pubUtils/friendUtil';
|
import { getRoleIds } from '../pubUtils/friendUtil';
|
||||||
import { getTeamSearchByQuality, rmRoleFromQueue } from './redisService';
|
import { getTeamSearchByLv, rmRoleFromQueue } from './redisService';
|
||||||
import { addUserToChannel } from './roleService';
|
import { addUserToChannel } from './roleService';
|
||||||
import { ChannelUser } from '../domain/ChannelUser';
|
import { ChannelUser } from '../domain/ChannelUser';
|
||||||
import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId } from '../pubUtils/data';
|
import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId, getDicBlueprtById } from '../pubUtils/data';
|
||||||
import { getFriendPointObject } from '../pubUtils/itemUtils';
|
|
||||||
import { DicWar } from '../pubUtils/dictionary/DicWar';
|
|
||||||
import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil';
|
import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil';
|
||||||
import { dispatch } from '../pubUtils/dispatcher';
|
|
||||||
import { handleCost } from './rewardService';
|
import { handleCost } from './rewardService';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在给定的品质列表中随机返回一定数量的藏宝图Id
|
* 在给定的品质列表中随机返回一定数量的藏宝图Id
|
||||||
* @param qualityArr 品质数组,在所有给定品质的藏宝图中筛选1
|
* @param lv 品质数组,在所有给定品质的藏宝图中筛选1
|
||||||
* @param cnt 返回藏宝图数量
|
* @param cnt 返回藏宝图数量
|
||||||
*/
|
*/
|
||||||
export function getRandBlueprtId(qualityArr: number[], lvRange: number, cnt = 1) {
|
export function getRandBlueprtId(lv: number, cnt = 1) {
|
||||||
if (!qualityArr || !qualityArr.length) return null;
|
if (!gameData.blueprtByLv.has(lv)) return null;
|
||||||
let blueprtIdArr: number[] = [];
|
let blueprtIdArr: number[] = gameData.blueprtByLv.get(lv)||[];
|
||||||
for (let q of qualityArr) {
|
|
||||||
blueprtIdArr = blueprtIdArr.concat(gameData.blueprtWithQualityAndStar.get(`${q}_${lvRange}`));
|
|
||||||
}
|
|
||||||
if (blueprtIdArr.length === 0) return null;
|
|
||||||
|
|
||||||
const res = getRandEelm(blueprtIdArr, cnt);
|
const res = getRandEelm(blueprtIdArr, cnt);
|
||||||
// console.log('******** getRandBlueprtId', blueprtIdArr, cnt, res)
|
// console.log('******** getRandBlueprtId', blueprtIdArr, cnt, res)
|
||||||
@@ -167,37 +157,14 @@ export async function getRealReward(blueprtId: number, roleSt: RoleStatus) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function getAllAssistCnt(roleId: string) {
|
export async function getAllAssistCnt(roleId: string) {
|
||||||
let cntMap = await getAssistTimesByQuality(roleId);
|
let teams = await ComBattleTeamModel.getAssistTeamsByTime(roleId, getZeroPointD(), true);
|
||||||
let cnt = [];
|
return teams.length;
|
||||||
for (let i = 0; i < COM_BTL_QUALITY.length; ++i) {
|
|
||||||
cnt[i] = cntMap.get(i + 1) || 0;
|
|
||||||
}
|
|
||||||
return cnt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getAssistTimesByQuality(roleId: string, qualityArr?: number[]) {
|
export async function getFrd(roleId: string) {
|
||||||
let teams = await ComBattleTeamModel.getAssistTeamsByTime(roleId, qualityArr, getZeroPointD(), true);
|
|
||||||
let cntMap = new Map<number, number>();
|
|
||||||
teams.forEach(team => {
|
|
||||||
if (team && team.quality && team.roleStatus) {
|
|
||||||
for (let st of team.roleStatus) {
|
|
||||||
if (st.roleId !== roleId || st.isFrd) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
let cnt = cntMap.get(team.quality) || 0;
|
|
||||||
cntMap.set(team.quality, cnt + 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return cntMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
export async function getFrd(roleId: string, quality: number) {
|
|
||||||
let isFrd = false;
|
let isFrd = false;
|
||||||
let assistTimes = await getAssistTimesByQuality(roleId, [quality]);
|
let cnt = await getAllAssistCnt(roleId);
|
||||||
let assistTime = assistTimes.get(quality);
|
if (cnt >= TREASURE.TREASURE_ASSIST_TIME) isFrd = true;
|
||||||
let { assistanceTime } = gameData.xunbao.get(quality);
|
|
||||||
if (assistTime >= assistanceTime) isFrd = true;
|
|
||||||
return isFrd;
|
return isFrd;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,7 +209,7 @@ function updateRobotKilled(bossHp: number, roleSt: RoleStatus) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export async function handleComBtlProgress(teamStatus: MemComBtlTeam, robotHurtTimer: Map<string, NodeJS.Timer>, teamMap: Map<string, MemComBtlTeam>, channel: Channel) {
|
export async function handleComBtlProgress(teamStatus: MemComBtlTeam, robotHurtTimer: Map<string, NodeJS.Timer>, teamMap: Map<string, MemComBtlTeam>, channel: Channel) {
|
||||||
const { teamCode, roleIds, capId, quality } = teamStatus;
|
const { teamCode } = teamStatus;
|
||||||
// 判断战斗是否结束
|
// 判断战斗是否结束
|
||||||
let battleSt = checkComBattleResult(teamStatus);
|
let battleSt = checkComBattleResult(teamStatus);
|
||||||
teamStatus.status = battleSt;
|
teamStatus.status = battleSt;
|
||||||
@@ -351,15 +318,15 @@ export function clearRobotHurtTimer(teamStatus, robotHurtTimer: Map<string, Node
|
|||||||
/**
|
/**
|
||||||
* @description 检查寻宝等级是否合法
|
* @description 检查寻宝等级是否合法
|
||||||
* @export
|
* @export
|
||||||
* @param {number} lv 玩家等级
|
* @param {number} playerLv 玩家等级
|
||||||
* @param {number} lvRange 藏宝图等级范围
|
* @param {number} blueprtLv 藏宝图等级
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export function comBtlLvInvalid(lv: number, lvRange: number) {
|
export function comBtlLvInvalid(playerLv: number, blueprtLv: number) {
|
||||||
const range = gameData.comBtlLvRange.get(lvRange);
|
const range = gameData.comBtlLvRange.get(blueprtLv);
|
||||||
if (!range) return true;
|
if (!range) return true;
|
||||||
let { min, max } = range;
|
let { min, max } = range;
|
||||||
return lv < min || lv > max;
|
return playerLv < min || playerLv > max;
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function dismissTeam(teamStatus: MemComBtlTeam, teamMap: Map<string, MemComBtlTeam>, roleId: string, teamDisTimer: Map<string, NodeJS.Timer>, channel) {
|
export async function dismissTeam(teamStatus: MemComBtlTeam, teamMap: Map<string, MemComBtlTeam>, roleId: string, teamDisTimer: Map<string, NodeJS.Timer>, channel) {
|
||||||
@@ -501,18 +468,17 @@ async function teammateValid(roleInfo: Partial<RoleType>, roleId: string, roleId
|
|||||||
* @param {string} roleId 要加入玩家的信息
|
* @param {string} roleId 要加入玩家的信息
|
||||||
* @param {string[]} roleIds 队伍中当前玩家列表
|
* @param {string[]} roleIds 队伍中当前玩家列表
|
||||||
* @param {number} ceLimit
|
* @param {number} ceLimit
|
||||||
* @param {number} quality
|
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export async function getValidTeammateRoleSt(roleId: string, roleIds: string[], ceLimit: number, quality: number) {
|
export async function getValidTeammateRoleSt(roleId: string, roleIds: string[], ceLimit: number) {
|
||||||
let roleInfo = await RoleModel.findByRoleId(roleId, null, true);
|
let roleInfo = await RoleModel.findByRoleId(roleId, null, true);
|
||||||
let { roleName, head = EXTERIOR.EXTERIOR_FACE, frame = EXTERIOR.EXTERIOR_FACECASE, spine = EXTERIOR.EXTERIOR_APPEARANCE, topLineupCe, lv } = roleInfo;
|
let { roleName, head = EXTERIOR.EXTERIOR_FACE, frame = EXTERIOR.EXTERIOR_FACECASE, spine = EXTERIOR.EXTERIOR_APPEARANCE, topLineupCe, lv: playerLv } = roleInfo;
|
||||||
|
|
||||||
const valid = await teammateValid(roleInfo, roleId, roleIds, ceLimit);
|
const valid = await teammateValid(roleInfo, roleId, roleIds, ceLimit);
|
||||||
if (!valid) return null;
|
if (!valid) return null;
|
||||||
|
|
||||||
let isFrd = await getFrd(roleId, quality);
|
let isFrd = await getFrd(roleId);
|
||||||
const result = new RoleStatus(roleId, roleName, false, isFrd, head, frame, spine, topLineupCe, lv);
|
const result = new RoleStatus(roleId, roleName, false, isFrd, head, frame, spine, topLineupCe, playerLv);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -532,36 +498,7 @@ export async function teammateInBlackList(roleId: string, roleIds: string[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function blueprtIdValid(id: number) {
|
export function blueprtIdValid(id: number) {
|
||||||
const goodData = gameData.goods.get(id);
|
return gameData.blueprt.has(id);
|
||||||
return goodData && goodData.itid === IT_TYPE.BLUEPRT && COM_BTL_QUALITY.indexOf(goodData.quality) !== -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @description 创建 ComBattleTeam 的数据结构
|
|
||||||
* @export
|
|
||||||
* @param {string} teamCode
|
|
||||||
* @param {boolean} pub
|
|
||||||
* @param {number} blueprtId
|
|
||||||
* @param {number} status
|
|
||||||
* @param {string} capId
|
|
||||||
* @param {number} ceLimit
|
|
||||||
* @param {number} bossHp
|
|
||||||
* @param {number} quality
|
|
||||||
* @param {BossHp[]} bossHpArr
|
|
||||||
* @returns
|
|
||||||
*/
|
|
||||||
export function createComTeamData(teamCode: string, pub: boolean, blueprtId: number, capId: string, ceLimit: number) {
|
|
||||||
const { equipLvl, quality } = gameData.goods.get(blueprtId);
|
|
||||||
const { bossHpSum, bossHpArr } = getBossHpByBlueprtId(blueprtId);
|
|
||||||
const curRnd = 0;
|
|
||||||
const roleCnt = 1;
|
|
||||||
const timeout = false;
|
|
||||||
const bossCurHp = bossHpSum;
|
|
||||||
const bossHp = bossHpSum;
|
|
||||||
const status = COM_TEAM_STATUS.DEFAULT;
|
|
||||||
return {
|
|
||||||
teamCode, pub, blueprtId, status, capId, ceLimit, bossHp, bossCurHp, quality, bossHpArr: transBossHpArr(bossHpArr), curRnd, roleCnt, timeout, lvRange: equipLvl, blacklist: []
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -619,14 +556,14 @@ export function addRoleStToTeam(comTeam: MemComBtlTeam, roleSt: RoleStatus) {
|
|||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export async function addValidSearchingRoles(comTeam: MemComBtlTeam, channelService: ChannelService) {
|
export async function addValidSearchingRoles(comTeam: MemComBtlTeam, channelService: ChannelService) {
|
||||||
const { quality, equipLvl } = gameData.goods.get(comTeam.blueprtId);
|
const { lv } = getDicBlueprtById(comTeam.blueprtId);
|
||||||
let teammates = await getTeamSearchByQuality(quality, equipLvl);
|
let teammates = await getTeamSearchByLv(lv);
|
||||||
if (teammates && teammates.length) {
|
if (teammates && teammates.length) {
|
||||||
for (let teammate of teammates) {
|
for (let teammate of teammates) {
|
||||||
const { roleId: teammateRoleId, sid } = teammate;
|
const { roleId: teammateRoleId, sid } = teammate;
|
||||||
const st = await getValidTeammateRoleSt(teammateRoleId, comTeam.roleIds, comTeam.ceLimit, quality);
|
const st = await getValidTeammateRoleSt(teammateRoleId, comTeam.roleIds, comTeam.ceLimit);
|
||||||
if (!st) continue;
|
if (!st) continue;
|
||||||
await rmRoleFromQueue(teammateRoleId, sid, COM_BTL_QUALITY, null); // 匹配成功后删除redis中该用户的匹配记录
|
await rmRoleFromQueue(teammateRoleId, sid); // 匹配成功后删除redis中该用户的匹配记录
|
||||||
addRoleStToTeam(comTeam, st);
|
addRoleStToTeam(comTeam, st);
|
||||||
const channel = channelService.getChannel(comTeam.teamCode, false);
|
const channel = channelService.getChannel(comTeam.teamCode, false);
|
||||||
addUserToChannel(channel, new ChannelUser(teammateRoleId, sid));
|
addUserToChannel(channel, new ChannelUser(teammateRoleId, sid));
|
||||||
|
|||||||
@@ -133,11 +133,10 @@ export async function updateUserInfo(key: string, roleId: string, arr: Array<{fi
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @description 拼接匹配分组的 key
|
* @description 拼接匹配分组的 key
|
||||||
* @param {number} quality 品质
|
* @param {number} lv 藏宝图品阶
|
||||||
* @param {number} lvRange 等级范围
|
|
||||||
*/
|
*/
|
||||||
function getComTeamKey(quality: number, lvRange: number) {
|
function getComTeamKey(lv: number) {
|
||||||
return `${REDIS_KEY.COM_TEAM_SEARCH_PRE}:${quality}_${lvRange}`;
|
return `${REDIS_KEY.COM_TEAM_SEARCH_PRE}:${lv}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -159,14 +158,9 @@ function getComTeamValue(roleId: string, sid: string) {
|
|||||||
* @param {number} lvRange
|
* @param {number} lvRange
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export async function setTeamSearchReq(roleId: string, sid: string, qualityArr: Array<number>, lvRange: number) {
|
export async function setTeamSearchReq(roleId: string, sid: string, lv: number) {
|
||||||
let cmds = [];
|
|
||||||
qualityArr.forEach(quality => {
|
const res = await redisClient().saddAsync(getComTeamKey(lv), [getComTeamValue(roleId, sid)]);
|
||||||
if (quality) {
|
|
||||||
cmds.push(['sadd', getComTeamKey(quality, lvRange), getComTeamValue(roleId, sid)]);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
const res = await redisClient().multi(cmds).execAsync();
|
|
||||||
console.log('setTeamSearchReq: ', res);
|
console.log('setTeamSearchReq: ', res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@@ -176,21 +170,18 @@ export async function setTeamSearchReq(roleId: string, sid: string, qualityArr:
|
|||||||
* @export
|
* @export
|
||||||
* @param {string} roleId
|
* @param {string} roleId
|
||||||
* @param {string} sid
|
* @param {string} sid
|
||||||
* @param {Array<number>} qualityArr
|
* @param {number} lv 如果不填表示所有品阶
|
||||||
* @param {number} lvRange
|
|
||||||
*/
|
*/
|
||||||
export async function rmRoleFromQueue(roleId: string, sid: string, qualityArr: Array<number>, lvRange: number) {
|
export async function rmRoleFromQueue(roleId: string, sid: string, lv?: number) {
|
||||||
|
|
||||||
let cmds = [];
|
let cmds = [];
|
||||||
for (let q of qualityArr) {
|
if (lv) {
|
||||||
if (lvRange) {
|
cmds.push(['srem', getComTeamKey(lv), getComTeamValue(roleId, sid)]);
|
||||||
cmds.push(['srem', getComTeamKey(q, lvRange), getComTeamValue(roleId, sid)]);
|
} else {
|
||||||
} else {
|
for (let range of comBtlRanges()) {
|
||||||
for (let range of comBtlRanges()) {
|
cmds.push(['srem', getComTeamKey(range), getComTeamValue(roleId, sid)]);
|
||||||
cmds.push(['srem', getComTeamKey(q, range), getComTeamValue(roleId, sid)]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
await redisClient().multi(cmds).execAsync();
|
await redisClient().multi(cmds).execAsync();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,10 +192,10 @@ export async function rmRoleFromQueue(roleId: string, sid: string, qualityArr: A
|
|||||||
* @param {number} lvRange 等级范围
|
* @param {number} lvRange 等级范围
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export async function getTeamSearchByQuality(quality: number, lvRange: number) {
|
export async function getTeamSearchByLv(lv: number) {
|
||||||
// TODO: 操作不具有原子性
|
// TODO: 操作不具有原子性
|
||||||
const userInfos = await redisClient().srandmemberAsync(getComTeamKey(quality, lvRange), 2);
|
const userInfos = await redisClient().srandmemberAsync(getComTeamKey(lv), 2);
|
||||||
console.log('getTeamSearchByQuality: ' + userInfos);
|
console.log('getTeamSearchByLv: ' + userInfos);
|
||||||
if (!userInfos || !userInfos.length) return null;
|
if (!userInfos || !userInfos.length) return null;
|
||||||
|
|
||||||
let res = [];
|
let res = [];
|
||||||
@@ -213,7 +204,7 @@ export async function getTeamSearchByQuality(quality: number, lvRange: number) {
|
|||||||
if (decodeData.length !== 2) return null;
|
if (decodeData.length !== 2) return null;
|
||||||
res.push({roleId: decodeData[0], sid: decodeData[1]});
|
res.push({roleId: decodeData[0], sid: decodeData[1]});
|
||||||
}
|
}
|
||||||
console.log('getTeamSearchByQuality res: ', res);
|
console.log('getTeamSearchByLv res: ', res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -222,17 +213,14 @@ export async function getTeamSearchByQuality(quality: number, lvRange: number) {
|
|||||||
* @export
|
* @export
|
||||||
* @param {string} roleId
|
* @param {string} roleId
|
||||||
* @param {string} sid
|
* @param {string} sid
|
||||||
* @param {Array<number>} qualityArr
|
* @param {number} lv
|
||||||
* @param {number} lvRange
|
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
export async function checkRoleInQueue(roleId: string, sid: string, qualityArr: Array<number>, lvRange: number) {
|
export async function checkRoleInQueue(roleId: string, sid: string, lv: number) {
|
||||||
for (let quality of qualityArr) {
|
let res = await redisClient().sismemberAsync(getComTeamKey(lv), `${roleId}:${sid}`);
|
||||||
let res = await redisClient().sismemberAsync(getComTeamKey(quality, lvRange), `${roleId}:${sid}`);
|
if (res) {
|
||||||
if (res) {
|
return true;
|
||||||
return true;
|
}
|
||||||
}
|
|
||||||
};
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,11 +229,7 @@ export async function checkRoleInQueue(roleId: string, sid: string, qualityArr:
|
|||||||
* @export
|
* @export
|
||||||
*/
|
*/
|
||||||
export async function clearComBtlQueue() {
|
export async function clearComBtlQueue() {
|
||||||
for (let q of COM_BTL_QUALITY) {
|
await delKeys(REDIS_KEY.COM_TEAM_SEARCH_PRE);
|
||||||
for (let lvRange of comBtlRanges()) {
|
|
||||||
await redisClient().delAsync(getComTeamKey(q, lvRange));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export function setRedis(key: string, data: string) {
|
export function setRedis(key: string, data: string) {
|
||||||
|
|||||||
@@ -117,58 +117,6 @@ export class WarReward {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private async handlerBlueprtReward(num: number) {
|
|
||||||
const refTime = getZeroPointD();
|
|
||||||
const battleBlueprtDrop = await BattleBlueprtDropModel.findByTime(this.roleId, refTime);
|
|
||||||
if(battleBlueprtDrop) {
|
|
||||||
let { getNum = 0, curCostAp = 0, getSum = 0, costAp = 0 } = battleBlueprtDrop;
|
|
||||||
for(let i = 0; i < num; i ++) {
|
|
||||||
let flag = false; // 是否可以获得
|
|
||||||
if( curCostAp >= BLUEPRT_CONST.PER_AP) {
|
|
||||||
curCostAp = curCostAp - BLUEPRT_CONST.PER_AP; getNum = 0;
|
|
||||||
}
|
|
||||||
costAp += this.costAp; curCostAp += this.costAp;
|
|
||||||
if(getNum == 0) {
|
|
||||||
let r = Math.random();
|
|
||||||
console.log(r, 1/BLUEPRT_CONST.PER_AP*curCostAp);
|
|
||||||
if(r <= 1/BLUEPRT_CONST.PER_AP*curCostAp || (curCostAp >= BLUEPRT_CONST.PER_AP) ) {
|
|
||||||
flag = true; // 独立概率随机
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(getSum >= BLUEPRT_CONST.DAILY_CNT) {
|
|
||||||
flag = false;
|
|
||||||
}
|
|
||||||
if(flag) {
|
|
||||||
getNum ++; getSum++;
|
|
||||||
const obj = await this.randomBlueprt();
|
|
||||||
if(obj) {
|
|
||||||
this.rewards.push({type: BATTLE_REWARD_TYPE.RANDOM_REWARD, times: i +1, ...obj});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
await BattleBlueprtDropModel.updateByTime(this.roleId, refTime, {
|
|
||||||
getNum, curCostAp, getSum, costAp
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private async randomBlueprt() {
|
|
||||||
const { lv } = await RoleModel.findByRoleId(this.roleId);
|
|
||||||
const dicPossibility = gameData.blueprtPossibility;
|
|
||||||
|
|
||||||
const result = dicPossibility.find(cur => {return cur.min <= lv && cur.max >= lv});
|
|
||||||
|
|
||||||
if(result) {
|
|
||||||
const {dic: {id}} = getRandEelmWithWeight(result.possibility);
|
|
||||||
|
|
||||||
const blueprtList = gameData.blueprt.get(id);
|
|
||||||
const gid = getRandSingleEelm(blueprtList);
|
|
||||||
return {id: gid, count:1}
|
|
||||||
} else {
|
|
||||||
return null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public async saveReward(num: number, combine: boolean = false) {
|
public async saveReward(num: number, combine: boolean = false) {
|
||||||
this.rewards = new Array();
|
this.rewards = new Array();
|
||||||
// let warType = this.warInfo.warType;
|
// let warType = this.warInfo.warType;
|
||||||
|
|||||||
@@ -143,9 +143,9 @@ export default class ComBattleTeam extends BaseModel {
|
|||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
blueprtId: number;
|
blueprtId: number;
|
||||||
|
|
||||||
// 藏宝图品质
|
// 藏宝图品阶,用来匹配
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
quality: number;
|
lv: number;
|
||||||
|
|
||||||
// 战斗状态 0:未开始,1:已开始,2:胜利,3:失败
|
// 战斗状态 0:未开始,1:已开始,2:胜利,3:失败
|
||||||
@prop({ required: true, default: 0 })
|
@prop({ required: true, default: 0 })
|
||||||
@@ -166,10 +166,6 @@ export default class ComBattleTeam extends BaseModel {
|
|||||||
@prop({ required: true, default: 1 })
|
@prop({ required: true, default: 1 })
|
||||||
roleCnt: number;
|
roleCnt: number;
|
||||||
|
|
||||||
// 藏宝图等级所处范围,用来匹配
|
|
||||||
@prop({ required: true, default: 1 })
|
|
||||||
lvRange: number;
|
|
||||||
|
|
||||||
// 单个 boss 血量状态
|
// 单个 boss 血量状态
|
||||||
@prop({ required: false, type: BossHp, default: [] })
|
@prop({ required: false, type: BossHp, default: [] })
|
||||||
bossHpArr: BossHp[];
|
bossHpArr: BossHp[];
|
||||||
@@ -293,9 +289,9 @@ export default class ComBattleTeam extends BaseModel {
|
|||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async getOtherTeamByQualityAndSt(roleId: string, qualityArr: number[], status: number, lvRange: number, ce = 0, pub = true, cntLmt = 2, lean = true) {
|
public static async getOtherTeamByLvAndSt(roleId: string, lv: number, status: number, ce = 0, pub = true, cntLmt = 2, lean = true) {
|
||||||
const curTime = new Date(Date.now() - 10 * 60 * 1000); // 10分钟之前
|
const curTime = new Date(Date.now() - 10 * 60 * 1000); // 10分钟之前
|
||||||
const team: ComBattleTeamType[] = await ComBattleTeamModel.find({quality: {$in: qualityArr}, status, lvRange, ceLimit: {$lte: ce}, pub, roleCnt: {$lte: cntLmt}, roleIds: {$nin: [roleId]}, updatedAt: {$gte: curTime}}).lean(lean);
|
const team: ComBattleTeamType[] = await ComBattleTeamModel.find({ lv, status, ceLimit: {$lte: ce}, pub, roleCnt: {$lte: cntLmt}, roleIds: {$nin: [roleId]}, updatedAt: {$gte: curTime}}).lean(lean);
|
||||||
return team;
|
return team;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -314,11 +310,8 @@ export default class ComBattleTeam extends BaseModel {
|
|||||||
return teams;
|
return teams;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async getAssistTeamsByTime(roleId: string, qualityArr?: number[], time?: Date, isAssist?: boolean, lean = true) {
|
public static async getAssistTeamsByTime(roleId: string, time?: Date, isAssist?: boolean, lean = true) {
|
||||||
let query = {roleIds: roleId, status: {$in: [0, 1, 2]}}; // 失败不计入助战
|
let query = {roleIds: roleId, status: {$in: [0, 1, 2]}}; // 失败不计入助战
|
||||||
if (qualityArr) {
|
|
||||||
query = Object.assign(query, {quality: {$in: qualityArr}});
|
|
||||||
}
|
|
||||||
if (time) {
|
if (time) {
|
||||||
query = Object.assign(query, {createdAt: {$gte: time}});
|
query = Object.assign(query, {createdAt: {$gte: time}});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoos
|
|||||||
|
|
||||||
export class ScienceTree {
|
export class ScienceTree {
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
id: number;
|
id: number;
|
||||||
@prop({ required: true })
|
@prop({ required: true })
|
||||||
endTime: number;//科技树研发成功结束事件,时间戳,小于当前时间,说明开发完成
|
endTime: number;//科技树研发成功结束事件,时间戳,小于当前时间,说明开发完成
|
||||||
@prop({ required: true, default: [], type: String, _id: false})
|
@prop({ required: true, default: [], type: String, _id: false})
|
||||||
|
|||||||
@@ -1,2 +1,29 @@
|
|||||||
import { ComBattleTeamParam } from './../../db/ComBattleTeam';
|
import { COM_TEAM_STATUS } from '../../consts';
|
||||||
export type MemComBtlTeam = ComBattleTeamParam & { bossCurHp: number; curRnd: number; bossHp: number };
|
import { getBossHpByBlueprtId, getDicBlueprtById } from '../../pubUtils/data';
|
||||||
|
import { transBossHpArr } from '../../services/battleService';
|
||||||
|
import ComBattleTeam from './../../db/ComBattleTeam';
|
||||||
|
export class MemComBtlTeam extends ComBattleTeam {
|
||||||
|
bossCurHp: number;
|
||||||
|
curRnd: number;
|
||||||
|
bossHp: number;
|
||||||
|
|
||||||
|
constructor(teamCode: string, pub: boolean, blueprtId: number, capId: string, ceLimit: number) {
|
||||||
|
super();
|
||||||
|
const { lv } = getDicBlueprtById(blueprtId);
|
||||||
|
this.lv = lv;
|
||||||
|
const { bossHpSum, bossHpArr } = getBossHpByBlueprtId(blueprtId);
|
||||||
|
this.bossHpArr = transBossHpArr(bossHpArr);
|
||||||
|
this.teamCode = teamCode;
|
||||||
|
this.pub = pub;
|
||||||
|
this.blueprtId = blueprtId;
|
||||||
|
this.status = COM_TEAM_STATUS.DEFAULT;
|
||||||
|
this.capId = capId;
|
||||||
|
this.ceLimit = ceLimit;
|
||||||
|
this.curRnd = 0;
|
||||||
|
this.roleCnt = 1;
|
||||||
|
this.timeout = false;
|
||||||
|
this.bossCurHp = bossHpSum;
|
||||||
|
this.bossHp = bossHpSum;
|
||||||
|
this.blacklist = [];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { dicHero, dicMyHeroes, loadHero } from "./dictionary/DicHero";
|
import { dicHero, dicMyHeroes, loadHero } from "./dictionary/DicHero";
|
||||||
import { dicGoods, blueprtWithQuality, blueprtWithQualityAndStar, figureCondition, loadGoods } from "./dictionary/DicGoods";
|
import { dicGoods, figureCondition, loadGoods } from "./dictionary/DicGoods";
|
||||||
import { dicBlueprtCompose, loadBlueprtCompose } from "./dictionary/DicBlueprtCompose";
|
import { dicBlueprtCompose, loadBlueprtCompose } from "./dictionary/DicBlueprtCompose";
|
||||||
import { dicBlueprtPossibility, loadBlueprtPossibility } from "./dictionary/DicBlueprtPossibility";
|
import { dicBlueprtPossibility, loadBlueprtPossibility } from "./dictionary/DicBlueprtPossibility";
|
||||||
import { dicDaily, loadDaily } from "./dictionary/DicDaily";
|
import { dicDaily, loadDaily } from "./dictionary/DicDaily";
|
||||||
@@ -18,7 +18,7 @@ import { dicTowerTask, loadTowerTask } from "./dictionary/DicTowerTask";
|
|||||||
import { dicWar, dicWarPvp, dicDailyWarByType, loadWar } from "./dictionary/DicWar";
|
import { dicWar, dicWarPvp, dicDailyWarByType, loadWar } from "./dictionary/DicWar";
|
||||||
import { dicWarJson, loadWarJson } from "./dictionary/DicWarJson";
|
import { dicWarJson, loadWarJson } from "./dictionary/DicWarJson";
|
||||||
import { dicXunbao, loadXunbao } from "./dictionary/DicXunbao";
|
import { dicXunbao, loadXunbao } from "./dictionary/DicXunbao";
|
||||||
import { AUCTION_TIME, CONSUME_TYPE, ITID, SPECIAL_ATTR } from "../consts";
|
import { AUCTION_TIME, CONSUME_TYPE, ITID } from "../consts";
|
||||||
import { dicFashions, dicFashionsByHeroId, loadFashions } from "./dictionary/DicFashions";
|
import { dicFashions, dicFashionsByHeroId, loadFashions } from "./dictionary/DicFashions";
|
||||||
import { friendShips, friendShipHidAandIds, loadFriendShip } from "./dictionary/DicFriendShip";
|
import { friendShips, friendShipHidAandIds, loadFriendShip } from "./dictionary/DicFriendShip";
|
||||||
import { maxFriendShipLv, dicFriendShipLevelMap, loadFriendShipLevel } from "./dictionary/DicFriendShipLevel";
|
import { maxFriendShipLv, dicFriendShipLevelMap, loadFriendShipLevel } from "./dictionary/DicFriendShipLevel";
|
||||||
@@ -101,7 +101,7 @@ import { dicServerConst, loadServerConst } from './dictionary/DicServerConst';
|
|||||||
import { pick } from "underscore";
|
import { pick } from "underscore";
|
||||||
import _ = require("underscore");
|
import _ = require("underscore");
|
||||||
import { dicEquipById, dicEquipIdByJobClassAndEplace, loadEquip } from "./dictionary/DicEquip";
|
import { dicEquipById, dicEquipIdByJobClassAndEplace, loadEquip } from "./dictionary/DicEquip";
|
||||||
import { dicJewel, loadJewel } from "./dictionary/DicJewel";
|
import { dicBlueprt, dicBlueprtByLv, dicJewel, loadJewel } from "./dictionary/DicJewel";
|
||||||
import { dicStone, loadStone } from './dictionary/DicStone';
|
import { dicStone, loadStone } from './dictionary/DicStone';
|
||||||
import { dicEquipStrength, loadEquipStrength } from "./dictionary/DicEquipStrength";
|
import { dicEquipStrength, loadEquipStrength } from "./dictionary/DicEquipStrength";
|
||||||
import { dicEquipQuality, dicEquipQualityIdByEquipIdAndPoint, loadEquipQuality } from "./dictionary/DicEquipQuality";
|
import { dicEquipQuality, dicEquipQualityIdByEquipIdAndPoint, loadEquipQuality } from "./dictionary/DicEquipQuality";
|
||||||
@@ -141,9 +141,6 @@ export const gameData = {
|
|||||||
xunbao: dicXunbao,
|
xunbao: dicXunbao,
|
||||||
btlBossHpSum: new Map<number, number>(),
|
btlBossHpSum: new Map<number, number>(),
|
||||||
btlBossHp: new Map<number, Array<{ dataId: number, hp: number, actorId: number }>>(),
|
btlBossHp: new Map<number, Array<{ dataId: number, hp: number, actorId: number }>>(),
|
||||||
blueprtToWar: new Map<number, number>(),
|
|
||||||
blueprt: blueprtWithQuality,
|
|
||||||
blueprtWithQualityAndStar: blueprtWithQualityAndStar,
|
|
||||||
fashion: dicFashions,
|
fashion: dicFashions,
|
||||||
fashionBySkinId: dicFashionsByHeroId,
|
fashionBySkinId: dicFashionsByHeroId,
|
||||||
friendShips: friendShips,
|
friendShips: friendShips,
|
||||||
@@ -270,6 +267,8 @@ export const gameData = {
|
|||||||
equipSuit: dicEquipSuit,
|
equipSuit: dicEquipSuit,
|
||||||
equipSuitByJobClass: dicEquipSuitByJobClass,
|
equipSuitByJobClass: dicEquipSuitByJobClass,
|
||||||
jewelCondition: dicJewelCondition,
|
jewelCondition: dicJewelCondition,
|
||||||
|
blueprt: dicBlueprt,
|
||||||
|
blueprtByLv: dicBlueprtByLv,
|
||||||
};
|
};
|
||||||
|
|
||||||
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
||||||
@@ -362,21 +361,6 @@ export function getBossHpByWarId(warId: number) {
|
|||||||
return { bossHpSum, bossHpArr };
|
return { bossHpSum, bossHpArr };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export function getWarIdByBlueprtId(blueprtId: number) {
|
|
||||||
let warId = gameData.blueprtToWar.get(blueprtId);
|
|
||||||
if (!warId) {
|
|
||||||
let blueprt = gameData.goods.get(blueprtId);
|
|
||||||
if (blueprt) {
|
|
||||||
const { specialAttr } = blueprt;
|
|
||||||
warId = specialAttr.get(SPECIAL_ATTR.WAR_ID);
|
|
||||||
if (warId)
|
|
||||||
gameData.blueprtToWar.set(blueprtId, warId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return warId;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getBossHpByBlueprtId(blueprtId: number) {
|
export function getBossHpByBlueprtId(blueprtId: number) {
|
||||||
let { dispatchJsonId } = getWarByBlueprtId(blueprtId);
|
let { dispatchJsonId } = getWarByBlueprtId(blueprtId);
|
||||||
let bossHpInfo = getBossHpByWarId(dispatchJsonId);
|
let bossHpInfo = getBossHpByWarId(dispatchJsonId);
|
||||||
@@ -384,8 +368,8 @@ export function getBossHpByBlueprtId(blueprtId: number) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function getWarByBlueprtId(blueprtId: number) {
|
export function getWarByBlueprtId(blueprtId: number) {
|
||||||
let warId = getWarIdByBlueprtId(blueprtId);
|
let dicBlueprt = getDicBlueprtById(blueprtId);
|
||||||
return gameData.war.get(warId);
|
return gameData.war.get(dicBlueprt.gkId);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getRewardByBlueprtId(blueprtId: number) {
|
export function getRewardByBlueprtId(blueprtId: number) {
|
||||||
@@ -401,7 +385,7 @@ function parseComBtlLvRange() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export function comBtlRanges() {
|
export function comBtlRanges() {
|
||||||
return Array.from(gameData.comBtlLvRange.keys());
|
return Array.from(gameData.blueprtByLv.keys());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -926,6 +910,11 @@ export function getJewelConditionByLvAndSeId(lv: number, randSeId: number) {
|
|||||||
return gameData.jewelCondition.get(`${lv}_${randSeId}`);
|
return gameData.jewelCondition.get(`${lv}_${randSeId}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getDicBlueprtById(id: number) {
|
||||||
|
let jewel = gameData.blueprt.get(id);
|
||||||
|
return gameData.jewel.get(jewel);
|
||||||
|
}
|
||||||
|
|
||||||
// 初始加载
|
// 初始加载
|
||||||
function initDatas() {
|
function initDatas() {
|
||||||
parseDicParam();
|
parseDicParam();
|
||||||
|
|||||||
@@ -66,7 +66,8 @@ export const ARMY = {
|
|||||||
export const TREASURE = {
|
export const TREASURE = {
|
||||||
CAPTAIN_DROP: 5, // 普通套装图纸队长必掉落次数
|
CAPTAIN_DROP: 5, // 普通套装图纸队长必掉落次数
|
||||||
TEAMMATE_DROP: 10, // 普通套装图纸队员必掉落次数
|
TEAMMATE_DROP: 10, // 普通套装图纸队员必掉落次数
|
||||||
TREASURE_ASSIST_LIMITED: '1&1&999|2&21&999|3&41&999|4&61&999|5&81&999|6&100&999', // 协助寻宝星级开启玩家等级限制
|
TREASURE_ASSIST_LIMITED: '1&1&999|2&20&999|3&30&999|4&40&999|5&50&999|6&60&999|7&70&999|8&80&999|9&90&999', // 协助寻宝星级开启玩家等级限制
|
||||||
|
TREASURE_ASSIST_TIME: 6, // 协助寻宝总次数
|
||||||
};
|
};
|
||||||
export const FRIEND = {
|
export const FRIEND = {
|
||||||
FRIEND_CLOSEPOINT_ADD: 5, // 每赠送/领取一次增加的亲密度
|
FRIEND_CLOSEPOINT_ADD: 5, // 每赠送/领取一次增加的亲密度
|
||||||
|
|||||||
@@ -109,14 +109,10 @@ const DicGoodsKeys: KeysEnum<DicGoods> = {
|
|||||||
equipLvl: true
|
equipLvl: true
|
||||||
}
|
}
|
||||||
export const dicGoods = new Map<number, DicGoods>();
|
export const dicGoods = new Map<number, DicGoods>();
|
||||||
export const blueprtWithQuality = new Map<number, Array<number>>();
|
|
||||||
export const blueprtWithQualityAndStar = new Map<string, Array<number>>();
|
|
||||||
export const figureCondition = new Map<number, { params: number[], id: number, gid: number }[]>(); // type => {params, id, gid}
|
export const figureCondition = new Map<number, { params: number[], id: number, gid: number }[]>(); // type => {params, id, gid}
|
||||||
|
|
||||||
export function loadGoods() {
|
export function loadGoods() {
|
||||||
dicGoods.clear();
|
dicGoods.clear();
|
||||||
blueprtWithQuality.clear();
|
|
||||||
blueprtWithQualityAndStar.clear();
|
|
||||||
figureCondition.clear();
|
figureCondition.clear();
|
||||||
|
|
||||||
let arr = readFileAndParse(FILENAME.DIC_GOODS);
|
let arr = readFileAndParse(FILENAME.DIC_GOODS);
|
||||||
@@ -145,15 +141,6 @@ export function loadGoods() {
|
|||||||
o.jobLimited = parseNumberList(o.jobLimited);
|
o.jobLimited = parseNumberList(o.jobLimited);
|
||||||
o.charLimited = parseNumberList(o.charLimited);
|
o.charLimited = parseNumberList(o.charLimited);
|
||||||
dicGoods.set(o.good_id, _.pick(o, Object.keys(DicGoodsKeys)));
|
dicGoods.set(o.good_id, _.pick(o, Object.keys(DicGoodsKeys)));
|
||||||
|
|
||||||
if (o.itid == IT_TYPE.BLUEPRT) {
|
|
||||||
let arr = blueprtWithQualityAndStar.get(`${o.quality}_${o.equipLvl}`) || new Array<number>();
|
|
||||||
arr.push(o.good_id);
|
|
||||||
blueprtWithQualityAndStar.set(`${o.quality}_${o.equipLvl}`, arr);
|
|
||||||
let arr2 = blueprtWithQuality.get(o.quality) || new Array<number>();
|
|
||||||
arr.push(o.good_id);
|
|
||||||
blueprtWithQuality.set(o.quality, arr2);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
arr = undefined;
|
arr = undefined;
|
||||||
|
|||||||
@@ -24,10 +24,13 @@ export interface DicJewel {
|
|||||||
readonly mapGoodId: number;
|
readonly mapGoodId: number;
|
||||||
// 淬炼消耗
|
// 淬炼消耗
|
||||||
readonly quenchConsume: RewardInter[];
|
readonly quenchConsume: RewardInter[];
|
||||||
|
// 寻宝关卡id
|
||||||
|
readonly gkId: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export const dicJewel = new Map<number, DicJewel>();
|
export const dicJewel = new Map<number, DicJewel>();
|
||||||
|
export const dicBlueprt = new Map<number, number>();
|
||||||
|
export const dicBlueprtByLv = new Map<number, number[]>();
|
||||||
export function loadJewel() {
|
export function loadJewel() {
|
||||||
dicJewel.clear();
|
dicJewel.clear();
|
||||||
|
|
||||||
@@ -37,6 +40,11 @@ export function loadJewel() {
|
|||||||
o.randomEffect = parseNumberList(o.randomEffect);
|
o.randomEffect = parseNumberList(o.randomEffect);
|
||||||
o.quenchConsume = parseGoodStr(o.quenchConsume);
|
o.quenchConsume = parseGoodStr(o.quenchConsume);
|
||||||
dicJewel.set(o.good_id, o);
|
dicJewel.set(o.good_id, o);
|
||||||
|
dicBlueprt.set(o.mapGoodId, o.good_id);
|
||||||
|
if(!dicBlueprtByLv.has(o.lv)) {
|
||||||
|
dicBlueprtByLv.set(o.lv, []);
|
||||||
|
}
|
||||||
|
dicBlueprtByLv.get(o.lv).push(o.mapGoodId);
|
||||||
});
|
});
|
||||||
arr = undefined;
|
arr = undefined;
|
||||||
}
|
}
|
||||||
@@ -11,7 +11,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||||
"mapGoodId": 33001,
|
"mapGoodId": 33001,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6001
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 2,
|
"id": 2,
|
||||||
@@ -25,7 +26,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||||
"mapGoodId": 33002,
|
"mapGoodId": 33002,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6002
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 3,
|
"id": 3,
|
||||||
@@ -39,7 +41,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||||
"mapGoodId": 33003,
|
"mapGoodId": 33003,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6003
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 4,
|
"id": 4,
|
||||||
@@ -53,7 +56,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||||
"mapGoodId": 33004,
|
"mapGoodId": 33004,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6004
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 5,
|
"id": 5,
|
||||||
@@ -67,7 +71,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||||
"mapGoodId": 33005,
|
"mapGoodId": 33005,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6005
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 6,
|
"id": 6,
|
||||||
@@ -81,7 +86,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||||
"mapGoodId": 33006,
|
"mapGoodId": 33006,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6006
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 7,
|
"id": 7,
|
||||||
@@ -95,7 +101,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||||
"mapGoodId": 33007,
|
"mapGoodId": 33007,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6007
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 8,
|
"id": 8,
|
||||||
@@ -109,7 +116,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||||
"mapGoodId": 33008,
|
"mapGoodId": 33008,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6008
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 9,
|
"id": 9,
|
||||||
@@ -123,7 +131,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068&80054&80089",
|
||||||
"mapGoodId": 33009,
|
"mapGoodId": 33009,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6009
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 10,
|
"id": 10,
|
||||||
@@ -137,7 +146,8 @@
|
|||||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||||
"mapGoodId": 33010,
|
"mapGoodId": 33010,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6010
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 11,
|
"id": 11,
|
||||||
@@ -151,7 +161,8 @@
|
|||||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||||
"mapGoodId": 33011,
|
"mapGoodId": 33011,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6011
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 12,
|
"id": 12,
|
||||||
@@ -165,7 +176,8 @@
|
|||||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||||
"mapGoodId": 33012,
|
"mapGoodId": 33012,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6012
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 13,
|
"id": 13,
|
||||||
@@ -179,7 +191,8 @@
|
|||||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||||
"mapGoodId": 33013,
|
"mapGoodId": 33013,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6013
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 14,
|
"id": 14,
|
||||||
@@ -193,7 +206,8 @@
|
|||||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||||
"mapGoodId": 33014,
|
"mapGoodId": 33014,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6014
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 15,
|
"id": 15,
|
||||||
@@ -207,7 +221,8 @@
|
|||||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||||
"mapGoodId": 33015,
|
"mapGoodId": 33015,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6015
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 16,
|
"id": 16,
|
||||||
@@ -221,7 +236,8 @@
|
|||||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||||
"mapGoodId": 33016,
|
"mapGoodId": 33016,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6016
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 17,
|
"id": 17,
|
||||||
@@ -235,7 +251,8 @@
|
|||||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||||
"mapGoodId": 33017,
|
"mapGoodId": 33017,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6017
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 18,
|
"id": 18,
|
||||||
@@ -249,7 +266,8 @@
|
|||||||
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
"randomEffect": "60032&60034&80001&80012&80033&80047&80075",
|
||||||
"mapGoodId": 33018,
|
"mapGoodId": 33018,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6018
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 19,
|
"id": 19,
|
||||||
@@ -263,7 +281,8 @@
|
|||||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||||
"mapGoodId": 33019,
|
"mapGoodId": 33019,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6019
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 20,
|
"id": 20,
|
||||||
@@ -277,7 +296,8 @@
|
|||||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||||
"mapGoodId": 33020,
|
"mapGoodId": 33020,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6020
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 21,
|
"id": 21,
|
||||||
@@ -291,7 +311,8 @@
|
|||||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||||
"mapGoodId": 33021,
|
"mapGoodId": 33021,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6021
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 22,
|
"id": 22,
|
||||||
@@ -305,7 +326,8 @@
|
|||||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||||
"mapGoodId": 33022,
|
"mapGoodId": 33022,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6022
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 23,
|
"id": 23,
|
||||||
@@ -319,7 +341,8 @@
|
|||||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||||
"mapGoodId": 33023,
|
"mapGoodId": 33023,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6023
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 24,
|
"id": 24,
|
||||||
@@ -333,7 +356,8 @@
|
|||||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||||
"mapGoodId": 33024,
|
"mapGoodId": 33024,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6024
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 25,
|
"id": 25,
|
||||||
@@ -347,7 +371,8 @@
|
|||||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||||
"mapGoodId": 33025,
|
"mapGoodId": 33025,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6025
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 26,
|
"id": 26,
|
||||||
@@ -361,7 +386,8 @@
|
|||||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||||
"mapGoodId": 33026,
|
"mapGoodId": 33026,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6026
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 27,
|
"id": 27,
|
||||||
@@ -375,7 +401,8 @@
|
|||||||
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
"randomEffect": "60032&40035&80001&80019&80033&80047&80082",
|
||||||
"mapGoodId": 33027,
|
"mapGoodId": 33027,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6027
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 28,
|
"id": 28,
|
||||||
@@ -389,7 +416,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||||
"mapGoodId": 33028,
|
"mapGoodId": 33028,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6028
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 29,
|
"id": 29,
|
||||||
@@ -403,7 +431,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||||
"mapGoodId": 33029,
|
"mapGoodId": 33029,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6029
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 30,
|
"id": 30,
|
||||||
@@ -417,7 +446,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||||
"mapGoodId": 33030,
|
"mapGoodId": 33030,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6030
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 31,
|
"id": 31,
|
||||||
@@ -431,7 +461,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||||
"mapGoodId": 33031,
|
"mapGoodId": 33031,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6031
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 32,
|
"id": 32,
|
||||||
@@ -445,7 +476,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||||
"mapGoodId": 33032,
|
"mapGoodId": 33032,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6032
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 33,
|
"id": 33,
|
||||||
@@ -459,7 +491,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||||
"mapGoodId": 33033,
|
"mapGoodId": 33033,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6033
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 34,
|
"id": 34,
|
||||||
@@ -473,7 +506,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||||
"mapGoodId": 33034,
|
"mapGoodId": 33034,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6034
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 35,
|
"id": 35,
|
||||||
@@ -487,7 +521,8 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||||
"mapGoodId": 33035,
|
"mapGoodId": 33035,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6035
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"id": 36,
|
"id": 36,
|
||||||
@@ -501,6 +536,7 @@
|
|||||||
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
"randomEffect": "60031&10033&80002&80005&80026&80040&80061&80068",
|
||||||
"mapGoodId": 33036,
|
"mapGoodId": 33036,
|
||||||
"quenchConsume": "31001&500",
|
"quenchConsume": "31001&500",
|
||||||
"successConsume": "17057&100"
|
"successConsume": "17057&100",
|
||||||
|
"gkId": 6036
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
Reference in New Issue
Block a user