✨ feat(礼包): 礼包添加保底
This commit is contained in:
@@ -514,6 +514,7 @@ export const FILENAME = {
|
||||
DIC_GACHA_PLAN: 'dic_zyz_gachaPlan',
|
||||
DIC_GACHA_FLOOR: 'dic_zyz_gachaFloor',
|
||||
DIC_GIFT_PACKAGE: 'dic_zyz_giftPackage',
|
||||
DIC_GIFT_PACKAGE_PLAN: 'dic_zyz_giftPackagePlan',
|
||||
DIC_RECRUIT: 'dic_zyz_recruit',
|
||||
DIC_RMB: 'dic_zyz_rmb',
|
||||
DIC_ACTIVITY_TYPE: 'dic_zyz_activityType',
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
|
||||
/**
|
||||
* 战斗记录接口
|
||||
*/
|
||||
@index({ roleId: 1, giftPackageId: 1, floorPlanId: 1 })
|
||||
|
||||
export default class GiftPackageFloor extends BaseModel {
|
||||
@prop({ required: true })
|
||||
roleId: string; // 角色 id
|
||||
@prop({ required: true })
|
||||
giftPackageId: number; // 礼包 id
|
||||
@prop({ required: true })
|
||||
floorPlanId: number; // 物品id
|
||||
|
||||
@prop({ required: true, default: 0 })
|
||||
getNum: number; // 获取次数,当allNum超过配置次数重置
|
||||
@prop({ required: true, default: 0 })
|
||||
allNum: number; // 全部次数,当超过配置次数重置
|
||||
@prop({ required: true, default: 0 })
|
||||
getSum: number; // 获取道具的全部次数
|
||||
@prop({ required: true, default: 0 })
|
||||
allSum: number; // 全部全部次数,不重置
|
||||
|
||||
|
||||
public static async findByPlanId(roleId: string, giftPackageId: number, floorPlanId: number, lean = true) {
|
||||
const result: GiftPackageFloorType = await GiftPackageFloorModel.findOneAndUpdate({ roleId, giftPackageId, floorPlanId}, {}, {new: true, upsert: true}).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async updateByPlanId(roleId: string, giftPackageId: number, floorPlanId: number, params: {getNum: number, allNum: number, getSum: number, allSum: number}, lean = true) {
|
||||
const result: GiftPackageFloorType = await GiftPackageFloorModel.findOneAndUpdate({roleId, giftPackageId, floorPlanId}, {$set: params}).lean(lean);
|
||||
return result;
|
||||
}
|
||||
|
||||
public static async deleteAccount(roleId: string) {
|
||||
let result = await GiftPackageFloorModel.deleteMany({roleId});
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
export const GiftPackageFloorModel = getModelForClass(GiftPackageFloor);
|
||||
|
||||
export interface GiftPackageFloorType extends Pick<DocumentType<GiftPackageFloor>, keyof GiftPackageFloor>{}
|
||||
@@ -117,6 +117,7 @@ import { dicArtifactQualityPlan, loadArtifactQualityPlan } from "./dictionary/Di
|
||||
import { dicArtifactSeid, loadArtifactSeid } from "./dictionary/DicArtifactSeid";
|
||||
import { DicArtifact } from "./dictionary/DicArtifact";
|
||||
import { DicArtifactQuality } from "./dictionary/DicArtifactQuality";
|
||||
import { dicGiftPackagePlan, loadGiftPackagePlan } from "./dictionary/DicGiftPackagePlan";
|
||||
|
||||
export const gameData = {
|
||||
daily: dicDaily,
|
||||
@@ -228,6 +229,7 @@ export const gameData = {
|
||||
gachaPickHeroCnt: new Map<number, number>(),
|
||||
heroTransPiece: new Map<number, number>(),
|
||||
giftPackage: dicGiftPackage,
|
||||
giftPackagePlan: dicGiftPackagePlan,
|
||||
comBtlLvRange: new Map<number, {min: number, max: number}>(),
|
||||
recruit: dicRecruit,
|
||||
rmb: dicRMB,
|
||||
@@ -1215,6 +1217,7 @@ function loadDatas() {
|
||||
loadGachaPlan();
|
||||
loadGachaFloor();
|
||||
loadGiftPackage();
|
||||
loadGiftPackagePlan();
|
||||
loadRecruit();
|
||||
loadRMB();
|
||||
loadActivityType();
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
// 礼包奖励表
|
||||
import { readFileAndParse } from '../util';
|
||||
import { FILENAME } from '../../consts';
|
||||
const _ = require('lodash');
|
||||
|
||||
export interface DicGiftPackagePlan {
|
||||
// 唯一id
|
||||
readonly id: number;
|
||||
// 礼包类型 dic_zyz_giftPackage的id
|
||||
readonly giftPackageId: number;
|
||||
// addReward中的type
|
||||
readonly contentType: number;
|
||||
// 物品id或武将id
|
||||
readonly content: number;
|
||||
// 数量
|
||||
readonly count: number;
|
||||
// 权重
|
||||
readonly weight: number;
|
||||
// 保底, 每floor必出floorCount个,提前获取到次数就重置
|
||||
readonly floorFrequency: number;
|
||||
// 保底数量
|
||||
readonly floorCount: number;
|
||||
}
|
||||
|
||||
type KeysEnum<T> = { [P in keyof Required<T>]: true };
|
||||
const DicGiftPackagePlanKeys: KeysEnum<DicGiftPackagePlan> = {
|
||||
id: true,
|
||||
giftPackageId: true,
|
||||
contentType: true,
|
||||
content: true,
|
||||
count: true,
|
||||
weight: true,
|
||||
floorFrequency: true,
|
||||
floorCount: true
|
||||
}
|
||||
|
||||
export const dicGiftPackagePlan = new Map<number, DicGiftPackagePlan[]>(); // packageId => [plan]
|
||||
export function loadGiftPackagePlan() {
|
||||
dicGiftPackagePlan.clear();
|
||||
let arr = readFileAndParse(FILENAME.DIC_GIFT_PACKAGE_PLAN);
|
||||
|
||||
arr.forEach(o => {
|
||||
if(o.floor == '&') {
|
||||
o.floorFrequency = 0;
|
||||
o.floorCount = 0;
|
||||
} else {
|
||||
let arr = o.floor.split('&');
|
||||
o.floorFrequency = isNaN(parseInt(arr[0]))? 0: parseInt(arr[0]);
|
||||
o.floorCount = isNaN(parseInt(arr[1]))? 0: parseInt(arr[1]);
|
||||
}
|
||||
if(!dicGiftPackagePlan.has(o.giftPackageId)) {
|
||||
dicGiftPackagePlan.set(o.giftPackageId, []);
|
||||
}
|
||||
dicGiftPackagePlan.get(o.giftPackageId)?.push(_.pick(o, Object.keys(DicGiftPackagePlanKeys)));
|
||||
});
|
||||
arr = undefined;
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user