Merge branch 'feature/gacha'
This commit is contained in:
@@ -105,7 +105,7 @@ export const DAILY_CONST = {
|
||||
|
||||
export const DUNGEON_CONST = {
|
||||
REFRESH_TIME: 5, // 每天加点刷新
|
||||
MAX_CNT: 10, // 最大挑战次数
|
||||
MAX_CNT: 100, // 最大挑战次数
|
||||
MAX_BUY_CNT: 10 // 最大购买次数
|
||||
}
|
||||
|
||||
|
||||
@@ -644,9 +644,9 @@ export enum GACHA_ID {
|
||||
|
||||
// 抽卡保底类型
|
||||
export enum GACHA_FLOOR_TYPE {
|
||||
PURPLE = 1, // 元宝招募,保底紫色
|
||||
GOLD = 2, // 元宝招募,保底金色
|
||||
ASSIGN = 3, // 求贤若渴,保底指定武将
|
||||
PURPLE = 1, // 紫色保底,10连必定会出一个紫的,单抽不算
|
||||
GOLD = 2, // 金色武将保底,按次数给保底,抽到就重新计算次数,单抽也算
|
||||
ASSIGN = 3, // 求贤若渴,和活动抽卡金色保底,伪随机,n次内给且只给一个,单抽也算
|
||||
}
|
||||
|
||||
// 抽卡对应保底类型
|
||||
|
||||
@@ -2,12 +2,16 @@ import BaseModel from './BaseModel';
|
||||
import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose';
|
||||
|
||||
export class Record {
|
||||
@prop({ required: true })
|
||||
hid: number; // 选中的武将id
|
||||
@prop({ required: true })
|
||||
count: number; // 次数
|
||||
@prop({ required: true })
|
||||
reward: string; // 奖励内容
|
||||
@prop({ required: true })
|
||||
time: Date; // 抽卡时间
|
||||
@prop({ required: true })
|
||||
hasGetFloor: boolean; // 是否抽到保底了
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -23,44 +27,38 @@ export default class Activity_New_Hero_Gacha extends BaseModel {
|
||||
@prop({ required: true })
|
||||
roleId: string; // 用户Id
|
||||
@prop({ required: true })
|
||||
selected: boolean; // 是否选中默认false
|
||||
@prop({ required: true })
|
||||
hid: number; // 武将id
|
||||
selectedHid: number; // 玩家选中的武将id
|
||||
@prop({ required: true })
|
||||
count: number; // 抽卡次数,抽中大奖后重新统计
|
||||
@prop({ required: true })
|
||||
records: Record[]; // 抽卡历史记录
|
||||
@prop({ required: true })
|
||||
hasGetFloor: boolean; // 是否抽到保底了
|
||||
|
||||
//重置统计次数
|
||||
public static async resetCount(serverId: number, activityId: number, roleId: string, hid: number, count: number) {
|
||||
let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOneAndUpdate({ serverId, roleId, activityId, hid },
|
||||
public static async resetCount(serverId: number, activityId: number, roleId: string, count: number) {
|
||||
let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOneAndUpdate({ serverId, roleId, activityId, },
|
||||
{ $set: { count } }, { upsert: true, new: true }).lean(true);
|
||||
return result;
|
||||
}
|
||||
|
||||
//抽卡记录
|
||||
public static async addRecord(serverId: number, activityId: number, roleId: string, hid: number, count: number, reward: string) {
|
||||
let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOneAndUpdate({ serverId, roleId, activityId, hid },
|
||||
{ $inc: { count }, $push: { records: { count, reward, time: new Date() } } }, { upsert: true, new: true }).lean(true);
|
||||
public static async addRecord(serverId: number, activityId: number, roleId: string, hid: number, count: number, reward: string, hasGetFloor: boolean) {
|
||||
let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOneAndUpdate({ serverId, roleId, activityId },
|
||||
{ $set: { count, hasGetFloor }, $push: { records: { hid, count, reward, time: new Date(), hasGetFloor } } }, { upsert: true, new: true }).lean(true);
|
||||
return result;
|
||||
}
|
||||
|
||||
//设置选中武将
|
||||
public static async selectedHero(serverId: number, activityId: number, roleId: string, hid: number, selected: boolean) {
|
||||
let result: ActivityNewHeroGachaModelType[] = await ActivityNewHeroGachaModel.findOneAndUpdate(
|
||||
{ serverId, roleId, activityId, hid }, { $set: { selected } }, { upsert: true, new: true }).lean(true);
|
||||
return result;
|
||||
}
|
||||
|
||||
//根据活动id查询活动数据
|
||||
public static async findDataByHid(serverId: number, activityId: number, roleId: string, hid: number) {
|
||||
let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOne({ serverId, roleId, activityId, hid }).lean(true);
|
||||
public static async selectedHero(serverId: number, activityId: number, roleId: string, selectedHid: number) {
|
||||
let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOneAndUpdate(
|
||||
{ serverId, roleId, activityId }, { $set: { selectedHid } }, { upsert: true, new: true }).lean(true);
|
||||
return result;
|
||||
}
|
||||
|
||||
//根据活动id查询活动数据
|
||||
public static async findData(serverId: number, activityId: number, roleId: string) {
|
||||
let result: ActivityNewHeroGachaModelType[] = await ActivityNewHeroGachaModel.find({ serverId, roleId, activityId }).lean(true);
|
||||
let result: ActivityNewHeroGachaModelType = await ActivityNewHeroGachaModel.findOne({ serverId, roleId, activityId }).lean(true);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,8 @@ class Floor {
|
||||
id: number; // 保底类型 1-紫将保底 2-金将保底 3-指定将保底
|
||||
@prop({ required: true })
|
||||
count: number; // 抽卡次数
|
||||
@prop({ required: true })
|
||||
hasGetFloor: boolean; // 是否抽到保底了
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -4,7 +4,7 @@ import { prop } from '@typegoose/typegoose';
|
||||
import { UserGachaType } from '../../db/UserGacha';
|
||||
import { getTimeFun } from '../../pubUtils/timeUtil';
|
||||
import { DicGacha } from '../../pubUtils/dictionary/DicGacha';
|
||||
import { GACHA_OCCUPY_HID } from '../../consts';
|
||||
import { GACHA_OCCUPY_HID, GACHA_ID } from '../../consts';
|
||||
import { gameData } from '../../pubUtils/data';
|
||||
import { getFloorStatus } from '../../pubUtils/util';
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ export class NewHeroGachaItem {
|
||||
selected: boolean = false;//选中武将
|
||||
floorCount: number = 0;//保底最大的次数,一定会出现一次
|
||||
count: number = 0;//多少次没有抽中
|
||||
hasGetFloor: boolean = false; // 是否有抽到保底,伪随机算法,抽到后未到保底次数强制不给
|
||||
hid: number = 0;//武将id
|
||||
name: string = '';//名字
|
||||
cost: RewardInter[];//每次抽卡消耗资源
|
||||
@@ -51,13 +52,14 @@ export class NewHeroGachaData extends ActivityBase {
|
||||
}
|
||||
|
||||
//解析玩家记录
|
||||
public setPlayerRecords(data: ActivityNewHeroGachaModelType[]) {
|
||||
public setPlayerRecords(data: ActivityNewHeroGachaModelType) {
|
||||
if (!data) {
|
||||
return;
|
||||
}
|
||||
for (let item of this.list) {
|
||||
let index = data.findIndex(obj => { return obj.hid == item.hid });
|
||||
if (index != -1) {
|
||||
item.count = data[index].count ? data[index].count : 0;
|
||||
item.selected = data[index].selected ? data[index].selected : false;
|
||||
}
|
||||
item.count = data.count ? data.count : 0;
|
||||
item.hasGetFloor = data.hasGetFloor||false;
|
||||
item.selected = (data && data.selectedHid == item.hid);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ export interface DicGacha {
|
||||
readonly cost: RewardInter[];
|
||||
// 概率
|
||||
readonly percent: { id: number, weight: number }[];
|
||||
// 哪一个是大奖
|
||||
readonly floorReward: number;
|
||||
}
|
||||
|
||||
export const dicGacha = new Map<number, DicGacha>(); // id => dic
|
||||
|
||||
Reference in New Issue
Block a user