寻宝:伪随机掉落装备图纸

This commit is contained in:
liangtongchuan
2021-01-27 16:00:49 +08:00
parent da86ba4930
commit 8c6fc419ea
4 changed files with 125 additions and 5 deletions
@@ -17,7 +17,7 @@ import { ItemModel } from '../../../db/Item';
import { handleFixedReward, addItems, handleCost, decreaseItems } from '../../../services/rewardService';
import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
import { transBossHpArr } from '../../../services/battleService';
import { getRandBlueprtId, getRandComBtlRobots, checkComBattleResult, clearComBtlTimer, getRealReward, getAssistTimesByQuality, getFrd, updateRobotHurt, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam } from '../../../services/comBattleService';
import { getRandBlueprtId, getRandComBtlRobots, checkComBattleResult, clearComBtlTimer, getRealReward, getAssistTimesByQuality, getFrd, updateRobotHurt, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, incEquipPrintDrop, randEquipPrintId } from '../../../services/comBattleService';
import { setAp } from '../../../services/actionPointService';
import { roleLevelup } from '../../../services/normalBattleService';
@@ -677,6 +677,14 @@ export class ComBattleHandler {
return resResult(STATUS.BATTLE_ACTION_POINT_LACK);
}
const { dropResult } = await incEquipPrintDrop(roleSt);
if (dropResult) {
const dropEquipId = randEquipPrintId(warInfo);
if (dropEquipId) {
roleSt.fixReward = `${roleSt.fixReward}|${dropEquipId}&${1}`;
}
}
await ComBattleTeamModel.updateRewardSt(teamCode, roleId, true);
const goods = await handleFixedReward(roleId, roleName, sid, roleSt.fixReward, 1);
let actordata = await roleLevelup(roleId, warInfo.kingExp, session);// 主公升级经验
+65 -3
View File
@@ -1,13 +1,14 @@
// import { EquipPrintDropType, EquipPrintDropModel } from './../db/EquipPrintDrop';
import { EquipPrintDropType, EquipPrintDropModel } from './../db/EquipPrintDrop';
import { FriendPointModel } from './../db/FriendPoint';
import { STATUS } from './../consts/statusCode';
import { COM_BATTLE_ROBOT_ID_NAME, COM_TEAM_STATUS, CURRENCY_BY_TYPE, CURRENCY_TYPE, FRIEND_DROP_TYPE, COM_BTL_CONST, FRIEND_DROP_MAX } from './../consts';
import { RoleStatus, ComBattleTeamModel } from './../db/ComBattleTeam';
import { getBluePrtByQuality, getComBtlSetByQuality, getRewardByBlueprtId, getWarById, getWarIdByBlueprtId, comBtlRangeInfo } from "../pubUtils/gamedata";
import { getRandEelm, getRandValue, resResult, ratioReward, getRandValueByMinMax } from "../pubUtils/util";
import { getRandEelm, getRandValue, resResult, ratioReward, getRandValueByMinMax, getRandomWithWeight, decodeStr } from "../pubUtils/util";
import { getRandRobot } from "./battleService";
import { difference } from 'underscore';
import { difference, drop } from 'underscore';
import { Channel } from 'pinus';
import { TREASURE } from '../pubUtils/dicParam';
/**
* 在给定的品质列表中随机返回一定数量的藏宝图Id
@@ -325,3 +326,64 @@ export function setDismissTimer(teamStatus, teamMap: Map<string, any>, roleId: s
teamDisTimer.set(teamStatus.teamCode, timer);
}
}
function initEquipPrintDropData(roleId: string, roleName: string) {
let result: EquipPrintDropType = new EquipPrintDropModel().toJSON();
result.roleId = roleId;
result.roleName = roleName;
result.capTarget = getRandValueByMinMax(1, TREASURE.CAPTAIN_DROP, 0);
result.teammateTarget = getRandValueByMinMax(1, TREASURE.TEAMMATE_DROP, 0);
return result;
}
function incEquipPrintDropData(roleSt: RoleStatus, dropRec: EquipPrintDropType) {
const { isCap } = roleSt;
let dropResult = false;
if (isCap === true) {
dropRec.capAll += 1;
dropRec.capCur += 1;
if (dropRec.capCur > TREASURE.CAPTAIN_DROP) {
dropRec.capCur = 1;
dropRec.capTarget = getRandValueByMinMax(1, TREASURE.CAPTAIN_DROP, 0);
}
if (dropRec.capCur === dropRec.capTarget) {
dropResult = true;
dropRec.capDropAll += 1;
}
} else {
dropRec.teammateAll += 1;
dropRec.teammateCur += 1;
if (dropRec.teammateCur > TREASURE.TEAMMATE_DROP) {
dropRec.teammateCur = 1;
dropRec.teammateTarget = getRandValueByMinMax(1, TREASURE.TEAMMATE_DROP, 0);
}
if (dropRec.teammateCur === dropRec.teammateTarget) {
dropResult = true;
dropRec.teammateDropAll += 1;
}
}
return dropResult;
}
export async function incEquipPrintDrop(roleSt: RoleStatus) {
const { roleId, roleName } = roleSt;
let dropRec = await EquipPrintDropModel.getByRoleId(roleId);
if (!dropRec) {
dropRec = await EquipPrintDropModel.createDoc(initEquipPrintDropData(roleId, roleName));
}
const dropResult = incEquipPrintDropData(roleSt, dropRec);
dropRec = await EquipPrintDropModel.updateDoc(roleId, dropRec);
return { dropResult, dropRec };
}
export function randEquipPrintId(warInfo) {
if (!warInfo || !warInfo['jackpotReward']) {
return null;
}
const result = getRandomWithWeight(decodeStr('possibility', warInfo['jackpotReward']));
if (!result || !result.dic || !result.dic.id) {
return null;
}
return result.dic.id;
}