寻宝:伪随机掉落装备图纸
This commit is contained in:
@@ -17,7 +17,7 @@ import { ItemModel } from '../../../db/Item';
|
|||||||
import { handleFixedReward, addItems, handleCost, decreaseItems } from '../../../services/rewardService';
|
import { handleFixedReward, addItems, handleCost, decreaseItems } from '../../../services/rewardService';
|
||||||
import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
import { checkRoleInQueue, getTeamSearchByQuality, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService';
|
||||||
import { transBossHpArr } from '../../../services/battleService';
|
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 { setAp } from '../../../services/actionPointService';
|
||||||
import { roleLevelup } from '../../../services/normalBattleService';
|
import { roleLevelup } from '../../../services/normalBattleService';
|
||||||
|
|
||||||
@@ -677,6 +677,14 @@ export class ComBattleHandler {
|
|||||||
return resResult(STATUS.BATTLE_ACTION_POINT_LACK);
|
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);
|
await ComBattleTeamModel.updateRewardSt(teamCode, roleId, true);
|
||||||
const goods = await handleFixedReward(roleId, roleName, sid, roleSt.fixReward, 1);
|
const goods = await handleFixedReward(roleId, roleName, sid, roleSt.fixReward, 1);
|
||||||
let actordata = await roleLevelup(roleId, warInfo.kingExp, session);// 主公升级经验
|
let actordata = await roleLevelup(roleId, warInfo.kingExp, session);// 主公升级经验
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
// import { EquipPrintDropType, EquipPrintDropModel } from './../db/EquipPrintDrop';
|
import { EquipPrintDropType, EquipPrintDropModel } from './../db/EquipPrintDrop';
|
||||||
import { FriendPointModel } from './../db/FriendPoint';
|
import { FriendPointModel } from './../db/FriendPoint';
|
||||||
import { STATUS } from './../consts/statusCode';
|
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 { 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 { RoleStatus, ComBattleTeamModel } from './../db/ComBattleTeam';
|
||||||
import { getBluePrtByQuality, getComBtlSetByQuality, getRewardByBlueprtId, getWarById, getWarIdByBlueprtId, comBtlRangeInfo } from "../pubUtils/gamedata";
|
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 { getRandRobot } from "./battleService";
|
||||||
import { difference } from 'underscore';
|
import { difference, drop } from 'underscore';
|
||||||
import { Channel } from 'pinus';
|
import { Channel } from 'pinus';
|
||||||
|
import { TREASURE } from '../pubUtils/dicParam';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 在给定的品质列表中随机返回一定数量的藏宝图Id
|
* 在给定的品质列表中随机返回一定数量的藏宝图Id
|
||||||
@@ -325,3 +326,64 @@ export function setDismissTimer(teamStatus, teamMap: Map<string, any>, roleId: s
|
|||||||
teamDisTimer.set(teamStatus.teamCode, timer);
|
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;
|
||||||
|
}
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
import BaseModel from './BaseModel';
|
||||||
|
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 寻宝中图纸掉落的伪随机记录
|
||||||
|
*/
|
||||||
|
@index({ roleId: 1 })
|
||||||
|
|
||||||
|
export default class EquipPrintDrop extends BaseModel {
|
||||||
|
@prop({ required: true, unique: true })
|
||||||
|
roleId: string; // 角色 id
|
||||||
|
@prop({ required: true})
|
||||||
|
roleName: string; // 角色名
|
||||||
|
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
capTarget: number; // 本轮第几次会掉落,本轮结束后重置
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
capCur: number; // 本轮进行的次数
|
||||||
|
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
teammateTarget: number; // 本轮第几次会掉落,本轮结束后重置
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
teammateCur: number; // 本轮进行的次数
|
||||||
|
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
capDropAll: number; // 队长掉落总次数,累积
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
teammateDropAll: number; // 队员掉落总次数,累积
|
||||||
|
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
capAll: number; // 队长随机总次数,累积
|
||||||
|
@prop({ required: true, default: 0 })
|
||||||
|
teammateAll: number; // 队员随机总次数,累积
|
||||||
|
|
||||||
|
public static async getByRoleId(roleId: string, lean = true) {
|
||||||
|
return await EquipPrintDropModel.findOne({roleId}).lean(lean);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async createDoc(docData: EquipPrintDropType, lean = true) {
|
||||||
|
return await EquipPrintDropModel.findOneAndUpdate({}, {...docData}, {upsert: true, new: true}).lean(lean);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static async updateDoc(roleId: string, docData: Partial<EquipPrintDropType>, lean = true) {
|
||||||
|
return await EquipPrintDropModel.findOneAndUpdate({roleId}, {...docData}, {new: true}).lean(lean);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const EquipPrintDropModel = getModelForClass(EquipPrintDrop);
|
||||||
|
|
||||||
|
export interface EquipPrintDropType extends Pick<DocumentType<EquipPrintDrop>, keyof EquipPrintDrop>{}
|
||||||
@@ -51,4 +51,4 @@ export const ARMY = {
|
|||||||
export const TREASURE = {
|
export const TREASURE = {
|
||||||
CAPTAIN_DROP: 5, // 普通套装图纸队长必掉落次数
|
CAPTAIN_DROP: 5, // 普通套装图纸队长必掉落次数
|
||||||
TEAMMATE_DROP: 10, // 普通套装图纸队员必掉落次数
|
TEAMMATE_DROP: 10, // 普通套装图纸队员必掉落次数
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user