活动:统计套装宝石相同阶数的任务

This commit is contained in:
qiaoxin
2021-05-08 15:19:08 +08:00
parent 96804c4055
commit 43bca3a5b7
8 changed files with 157 additions and 55 deletions

View File

@@ -653,6 +653,7 @@ export enum TASK_TYPE {
HERO_WAKE_UP_COUNT = 75, // *名武将*品觉醒
HERO_WAKE_UP_STAR_UP_COUNT = 76, // *名武将升至觉醒*星
EQUIP_REFINE_LV = 77, // *件装备成功精炼到*级
EQUIP_SUIT_JEWEL_STAGE = 78, // *次触发,一个武将满装备情况下,必须都镶嵌有相同阶的宝石(阶数大于等于x情况下都算达成)
}
// 卡池类型

View File

@@ -25,13 +25,13 @@ export class Holes {
}
interface equipUpdate {
hid?: number;
quality?: number;
wearLv?: number;
_id?:number;
holes?:Array<Holes>;
hid?: number;
quality?: number;
wearLv?: number;
_id?: number;
holes?: Array<Holes>;
randSe?: Array<RandSe>;
ePlaceId?:number;
ePlaceId?: number;
}
@index({ roleId: 1, hid: 1, id: 1 })
@@ -50,7 +50,7 @@ export default class Equip extends BaseModel {
id: number; // 装备 id
@prop({ required: true })
name: string; // 装备名称
@prop({ required: false, default: 0 })
@prop({ required: false, default: 0 })
hid: number; // 装备此装备的武将 id
@prop({ required: false, default: 0 })
ePlaceId: number; // 武将装备的部位
@@ -75,24 +75,24 @@ export default class Equip extends BaseModel {
}
public static async findbySeqId(seqId: number, lean = true) {
const equip: EquipType = await EquipModel.findOne({ seqId }).lean(lean);
return equip;
const equip: EquipType = await EquipModel.findOne({ seqId }).lean(lean);
return equip;
}
public static async createEquip(equipInfo: {roleId: string, roleName: string, id: number, name: string, quality: number, suitId: number, ePlaceId: number, randSe: RandSe[], randRange: number, holes: Holes[], hid?: number}, lean = true) {
const seqId = await CounterModel.getNewCounter(COUNTER.EID);
const doc = new EquipModel();
const update = Object.assign(doc.toJSON(), seqId, equipInfo);
const equip: EquipType = await EquipModel.findOneAndUpdate({ seqId }, update, {upsert: true, new: true}).lean(lean);
if(equipInfo.hid > 0) {
await HeroModel.findOneAndUpdate(
{ roleId: equipInfo.roleId, hid: equipInfo.hid, 'ePlace.id': equipInfo.ePlaceId },
{$set: {'ePlace.$.equip': equip._id}},
{new: true}).lean(lean);
public static async createEquip(equipInfo: { roleId: string, roleName: string, id: number, name: string, quality: number, suitId: number, ePlaceId: number, randSe: RandSe[], randRange: number, holes: Holes[], hid?: number }, lean = true) {
const seqId = await CounterModel.getNewCounter(COUNTER.EID);
const doc = new EquipModel();
const update = Object.assign(doc.toJSON(), seqId, equipInfo);
const equip: EquipType = await EquipModel.findOneAndUpdate({ seqId }, update, { upsert: true, new: true }).lean(lean);
if (equipInfo.hid > 0) {
await HeroModel.findOneAndUpdate(
{ roleId: equipInfo.roleId, hid: equipInfo.hid, 'ePlace.id': equipInfo.ePlaceId },
{ $set: { 'ePlace.$.equip': equip._id } },
{ new: true }).lean(lean);
}
return equip;
}
return equip;
}
public static async putOnOrOff(equipId: string, hid: number, lean = true) {
const equip: EquipType = await EquipModel.findOneAndUpdate({ _id: equipId }, { hid }, { new: true }).lean(lean);
@@ -108,6 +108,11 @@ export default class Equip extends BaseModel {
return result;
}
public static async getEquipsByID(ids: Array<string>) {
let result = await EquipModel.find({ _id: { $in: ids } });
return result;
}
public static async getEquips(ids: Array<number>) {
let result = await EquipModel.find({ seqId: { $in: ids } });
return result;
@@ -118,20 +123,20 @@ export default class Equip extends BaseModel {
return equip;
}
public static async updateEquipInfo(seqId:number, equipUpdate: equipUpdate, lean = true) {
public static async updateEquipInfo(seqId: number, equipUpdate: equipUpdate, lean = true) {
delete equipUpdate._id;
let result: EquipType = await EquipModel.findOneAndUpdate({seqId}, {$set: equipUpdate}, {new: true}).lean(lean);
let result: EquipType = await EquipModel.findOneAndUpdate({ seqId }, { $set: equipUpdate }, { new: true }).lean(lean);
return result;
}
public static async lock(roleId: string, seqId: number, id: number, lock: boolean) {
let result: EquipType = await EquipModel.findOneAndUpdate({roleId, seqId, 'randSe.id': id}, {$set: {'randSe.$.locked': lock}}, {new: true, upsert: false}).select('seqId id randSe').lean();
return result;
let result: EquipType = await EquipModel.findOneAndUpdate({ roleId, seqId, 'randSe.id': id }, { $set: { 'randSe.$.locked': lock } }, { new: true, upsert: false }).select('seqId id randSe').lean();
return result;
}
public static async updateEquipInfobyObjectId(_id: string, equipUpdate: equipUpdate, lean = true) {
delete equipUpdate._id;
let result: EquipType = await EquipModel.findOneAndUpdate({_id}, {$set: equipUpdate}, {new: true}).lean(lean);
let result: EquipType = await EquipModel.findOneAndUpdate({ _id }, { $set: equipUpdate }, { new: true }).lean(lean);
return result;
}
@@ -141,10 +146,10 @@ export default class Equip extends BaseModel {
}
public static async findByField(field: string, value?: number|string, select?: string) {
public static async findByField(field: string, value?: number | string, select?: string) {
let searchObj = {};
if(field != 'all') {
if(field == 'roleName') {
if (field != 'all') {
if (field == 'roleName') {
searchObj['roleName'] = { $regex: new RegExp(value.toString(), 'i') }
} else {
searchObj[field] = value;

View File

@@ -132,6 +132,20 @@ export class ThirtyDaysData extends ActivityBase {
totalPoint: number = 0;//总共点数
consumePoint: number = 0;//消耗掉的点数
//未完成的任务
public findUncompleteTaskByType(type: number) {
let task = [];
for (let i = 0; i < this.list.length; i++) {
let items = this.list[i].item;
for (let itemData of items) {
if (itemData.taskType == type && !itemData.isComplete) {
task.push(itemData);
}
}
}
return task;
}
public findTaskByType(type: number) {
let task = [];
for (let i = 0; i < this.list.length; i++) {

View File

@@ -16,7 +16,7 @@ import { ACTIVITY_TYPE } from '../consts/constModules/activityConst';
import { ActivityGrowthModel } from '../db/ActivityGrowth';
import { ActivityDailyChallengesModel } from '../db/ActivityDailyChallenges';
import { ThirtyDaysData } from '../domain/activityField/thirtyDaysField';
import { ActivityThirtyDaysModel } from '../db/ActivityThirtyDays';
import { ActivityThirtyDaysModel, ActivityThirtyDaysModelType } from '../db/ActivityThirtyDays';
@@ -524,13 +524,19 @@ export async function accomplishTask(roleId: string, taskType: TASK_TYPE, count:
taskType === TASK_TYPE.EQUIP_STRENGTHEN ||
taskType === TASK_TYPE.EQUIP_REFINE_LV ||
taskType === TASK_TYPE.HERO_STAGE_UP
taskType === TASK_TYPE.HERO_STAGE_UP ||
taskType === TASK_TYPE.EQUIP_JEWEL_SUM ||
taskType === TASK_TYPE.EQUIP_JEWEL_STAGE ||
taskType === TASK_TYPE.EQUIP_SUIT_JEWEL_STAGE ||
taskType === TASK_TYPE.EQUIP_QUALITY
) {
allActivity = await ActivityModel.findOpenActivityByType(ACTIVITY_TYPE.THIRTY_DAYS, new Date());
for (let activity of allActivity) {
let thirtyDaysActivity = new ThirtyDaysData(activity);
let taskArray = thirtyDaysActivity.findTaskByType(taskType);
let playerRecords: ActivityThirtyDaysModelType[] = await ActivityThirtyDaysModel.findData(activity.acvitityId, roleId);
thirtyDaysActivity.setPlayerRecords(playerRecords);
let taskArray = thirtyDaysActivity.findUncompleteTaskByType(taskType);
for (let task of taskArray) {
let addCount = isComplete(roleId, task.taskType, task.taskParam, count, parma);
if (addCount) {
@@ -587,7 +593,15 @@ export function isComplete(roleId: string, taskType: TASK_TYPE, taskParam: strin
case TASK_TYPE.HERO_STAGE_UP://herocount&star&
addCount = (param[1] == paramObj.job) ? count : 0;
break;
case TASK_TYPE.EQUIP_JEWEL_STAGE://count&stage&
addCount = (param[1] == paramObj.stage) ? count : 0;
break;
case TASK_TYPE.EQUIP_SUIT_JEWEL_STAGE://count&stage&
addCount = (param[1] == paramObj.stage) ? count : 0;
break;
case TASK_TYPE.EQUIP_QUALITY:
addCount = param[1] == paramObj.quality ? count : 0;
break;
case TASK_TYPE.ROLE_TITLE://重置数据
addCount = param[0] <= count ? count : 0;

View File

@@ -1083,7 +1083,7 @@
"id": 73,
"name": "精英任务",
"info": "精英通关第x关",
"param": "warid",
"param": "warid&",
"string": "关卡id",
"content": 0,
"condition": "warid",
@@ -1098,7 +1098,7 @@
"id": 74,
"name": "武将",
"info": "x名x品质武将升至X品质",
"param": "herocount&quality&quality",
"param": "herocount&quality&quality&",
"string": "武将数量&武将初始品质&武将升级后品质",
"content": 0,
"condition": "herocount",
@@ -1113,7 +1113,7 @@
"id": 75,
"name": "武将",
"info": "x名x品质武将觉醒",
"param": "herocount&quality",
"param": "herocount&quality&",
"string": "武将数量&武将初始品质",
"content": 0,
"condition": "herocount",
@@ -1128,7 +1128,7 @@
"id": 76,
"name": "武将",
"info": "x名武将觉醒后升至x星",
"param": "herocount&star",
"param": "herocount&star&",
"string": "武将数量&星级",
"content": 0,
"condition": "herocount",
@@ -1143,7 +1143,7 @@
"id": 77,
"name": "装备",
"info": "x件装备成功精炼到x级",
"param": "count&lv",
"param": "count&lv&",
"string": "装备件数&精炼等级",
"content": 0,
"condition": "count",
@@ -1153,5 +1153,20 @@
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
},
{
"id": 78,
"name": "装备",
"info": "一个武将满装备情况下,必须都镶嵌有相同阶的宝石(阶数大于等于x情况下都算达成),触发x次数",
"param": "count&stage&",
"string": "发生次数&宝石阶数&",
"content": 0,
"condition": "count",
"__EMPTY": 0,
"__EMPTY_1": 0,
"__EMPTY_2": 0,
"__EMPTY_3": 0,
"__EMPTY_4": 0,
"__EMPTY_5": 0
}
]