diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index 83793a357..3bf1e7f22 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -1,5 +1,5 @@ import { Application, BackendSession, HandlerService, } from "pinus"; -import { STATUS, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON } from "../../../consts"; +import { STATUS, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON, TASK_TYPE } from "../../../consts"; import { ItemInter, RewardInter } from "../../../pubUtils/interface"; import { resResult, parseGoodStr } from "../../../pubUtils/util"; @@ -13,6 +13,7 @@ import { getRandSeResult, updateEplace, updateEplaces, checkJewelCanPutOnEquip, import { isNumber, pick } from 'underscore'; import { JewelModel } from "../../../db/Jewel"; import { getJewelRandSe } from "../../../pubUtils/itemUtils"; +import { checkTask, checkTaskInPutJewel, checkTaskWithEplaces, checkTaskWithHero } from "../../../services/taskService"; export default function (app: Application) { new HandlerService(app, {}); @@ -32,8 +33,9 @@ export class EquipHandler { let hero = await HeroModel.findByHidAndRole(hid, roleId); if(!hero) return resResult(STATUS.HERO_NOT_FIND); - - let curEquip = hero.ePlace?.find(equip => equip.id == ePlaceId ); + + let oldEplace = hero.ePlace||[]; + let curEquip = oldEplace.find(equip => equip.id == ePlaceId ); if(curEquip) return resResult(STATUS.EQUIP_HAS_COMPOSE); let dicHero = gameData.hero.get(hid); @@ -44,10 +46,13 @@ export class EquipHandler { if(!consumeResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); let newEquip = new EPlace(ePlaceId, dicEquip.id); - let newEplace = hero.ePlace? [...hero.ePlace, newEquip]: [newEquip]; + let newEplace = [...oldEplace, newEquip]; hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COMPOSE_EQUIP, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId]); + await checkTask(roleId, sid, TASK_TYPE.EQUIP_COMPOSE, 1, true, {}); + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_COMPOSE_CNT, oldEplace, newEplace, [ePlaceId], {}); + return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, @@ -67,8 +72,8 @@ export class EquipHandler { let { hid, ePlaceId, isOneClick } = msg; let hero = await HeroModel.findByHidAndRole(hid, roleId); if (!hero) return resResult(STATUS.HERO_NOT_FIND); - - let curEquip = hero.ePlace?.find(cur => cur.id == ePlaceId); + let oldEplace = hero.ePlace||[]; + let curEquip = oldEplace.find(cur => cur.id == ePlaceId); if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND); if(curEquip.lv >= hero.lv) return resResult(STATUS.ROLE_EQUIP_REACH_MAX); let fromLv = curEquip.lv; @@ -87,11 +92,12 @@ export class EquipHandler { let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.EQUIP_STRENTHEN); if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); - let { newEplace, updatedEplace } = updateEplace(hero.ePlace, ePlaceId, { lv: newLv }); + let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, { lv: newLv }); hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId]); - // TODO 任务 + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_LV_TO, oldEplace, newEplace, [ePlaceId]); + await checkTask(roleId, sid, TASK_TYPE.EQUIP_LV_UP, 1, true, {}); const curHero = { hid, @@ -135,11 +141,12 @@ export class EquipHandler { let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.EQUIP_STRENTHEN); if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); - let { newEplace, updatedEplace } = updateEplaces(hero.ePlace, eplaceIds); + let { newEplace, updatedEplace } = updateEplaces(ePlace, eplaceIds); await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STRENGTH, sid, roleId, hero, { ePlace: newEplace }, [...eplaceIds.keys()]); - // TODO 任务 + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_LV_TO, ePlace, newEplace, [...eplaceIds.keys()]); + await checkTask(roleId, sid, TASK_TYPE.EQUIP_LV_UP, eplaceIds.size, true, {}); const curHero = { hid, @@ -161,7 +168,8 @@ export class EquipHandler { let hero = await HeroModel.findByHidAndRole(hid, roleId); if (!hero) return resResult(STATUS.HERO_NOT_FIND); - let curEquip = hero.ePlace?.find(cur => cur.id == ePlaceId); + let oldEplace = hero.ePlace||[]; + let curEquip = oldEplace.find(cur => cur.id == ePlaceId); if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND); let nextEquipQuality = getNextEquipQuality(curEquip.equipId, curEquip.quality, curEquip.qualityStage); @@ -198,10 +206,13 @@ export class EquipHandler { let isUpQuality = update.quality != curEquip.quality; - let { newEplace, updatedEplace } = updateEplace(hero.ePlace, ePlaceId, update); + let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, update); hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_QUALITY, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId]); - // TODO 任务 + if(isUpQuality) { + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_QUALITY_UP, oldEplace, newEplace, [ePlaceId], { hid }); + await checkTask(roleId, sid, TASK_TYPE.EQUIP_QUALITY_UP_CNT, 1, true, {}); + } const curHero = { hid, isUpQuality, @@ -222,7 +233,8 @@ export class EquipHandler { let hero = await HeroModel.findByHidAndRole(hid, roleId); if (!hero) return resResult(STATUS.HERO_NOT_FIND); - let curEquip = hero.ePlace?.find(cur => cur.id == ePlaceId); + let oldEplace = hero.ePlace||[]; + let curEquip = oldEplace.find(cur => cur.id == ePlaceId); if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND); let update = { @@ -267,10 +279,14 @@ export class EquipHandler { let result = await handleCost(roleId, sid, consumes, ITEM_CHANGE_REASON.EQUIP_STARUP); if (!result) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); - let { newEplace, updatedEplace } = updateEplace(hero.ePlace, ePlaceId, update); + let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, update); hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STAR, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId]); - // TODO 任务 + if(isUpStar) { + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_STAR_UP_TO, oldEplace, newEplace, [ePlaceId]); + await checkTask(roleId, sid, TASK_TYPE.EQUIP_STAR_UP_CNT, 1, true, {}); + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_SUIT_SEID_NUM, oldEplace, newEplace, [ePlaceId], { hid }); + } const curHero = { hid, @@ -290,7 +306,8 @@ export class EquipHandler { let hero = await HeroModel.findByHidAndRole(hid, roleId); if (!hero) return resResult(STATUS.HERO_NOT_FIND); - let curEquip = hero.ePlace?.find(cur => cur.id == ePlaceId); + let oldEplace = hero.ePlace||[]; + let curEquip = oldEplace.find(cur => cur.id == ePlaceId); if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND); let jewel = await JewelModel.findbySeqId(seqId); if(!jewel) return resResult(STATUS.JEWEL_IS_NOT_FIND); @@ -304,12 +321,15 @@ export class EquipHandler { let canSentMineToOrigin = false; // 自己的能不能塞到对方身上 if(jewel.hid != 0) { // 如果天晶石原本镶嵌在其他武将身上,把自己的给他 let originHero = await HeroModel.findByHidAndRole(jewel.hid, roleId); - let originEquip = originHero?.ePlace?.find(cur => cur.jewel == seqId); + let originEplace = originHero?.ePlace||[]; + let originEquip = originEplace.find(cur => cur.jewel == seqId); if(originEquip) { let canChange = originJewel && checkJewelCanPutOnEquip(originEquip, originJewel); if(canChange) canSentMineToOrigin = true; - let { newEplace, updatedEplace } = updateEplace(originHero.ePlace, ePlaceId, { jewel: canChange? originJewel.seqId: 0 }); + let { newEplace, updatedEplace } = updateEplace(originEplace, ePlaceId, { jewel: canChange? originJewel.seqId: 0 }); await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_JEWEL, sid, roleId, originHero, { ePlace: newEplace }, [ePlaceId], { oldJewel: jewel, newJewel: canChange? originJewel:null }); + await checkTaskInPutJewel(roleId, sid, originEplace, newEplace, ePlaceId, jewel, canChange? originJewel:null); + originHeroResult = { hid: originHero.hid, ePlace: updatedEplace }; } } @@ -319,8 +339,10 @@ export class EquipHandler { // 目标镶嵌上 let curJewel = await JewelModel.putOnOrOff(seqId, hid, ePlaceId); - let { newEplace, updatedEplace } = updateEplace(hero.ePlace, ePlaceId, { jewel: seqId }); + let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, { jewel: seqId }); await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_JEWEL, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId], { oldJewel: originJewel, newJewel: curJewel }); + await checkTaskInPutJewel(roleId, sid, oldEplace, newEplace, ePlaceId, originJewel, curJewel); + let curHero = { hid, eplace: updatedEplace @@ -338,13 +360,16 @@ export class EquipHandler { let hero = await HeroModel.findByHidAndRole(hid, roleId); if (!hero) return resResult(STATUS.HERO_NOT_FIND); - let curEquip = hero.ePlace?.find(cur => cur.id == ePlaceId); + let oldEplace = hero.ePlace||[]; + let curEquip = oldEplace.find(cur => cur.id == ePlaceId); if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND); if(curEquip.jewel == 0) return resResult(STATUS.JEWEL_NOT_SUIT); let curJewel = await JewelModel.putOnOrOff(curEquip.jewel, 0, 0); - let { newEplace, updatedEplace } = updateEplace(hero.ePlace, ePlaceId, { jewel: 0 }); + let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, { jewel: 0 }); await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_JEWEL, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId], { oldJewel: curJewel }); + await checkTaskInPutJewel(roleId, sid, oldEplace, newEplace, ePlaceId, null, curJewel); + let curHero = { hid, eplace: updatedEplace @@ -363,7 +388,8 @@ export class EquipHandler { let hero = await HeroModel.findByHidAndRole(hid, roleId); if (!hero) return resResult(STATUS.HERO_NOT_FIND); - let curEquip = hero.ePlace?.find(cur => cur.id == ePlaceId); + let oldEplace = hero.ePlace||[]; + let curEquip = oldEplace.find(cur => cur.id == ePlaceId); if(!curEquip) return resResult(STATUS.EQUIP_NOT_FIND); let curStone = curEquip.stones?.find(cur => cur.id == stonesId)||{ id: stonesId, stone: 0 }; @@ -382,9 +408,14 @@ export class EquipHandler { } let newStone = updateStone(curEquip.stones, stonesId, gid); - let { newEplace, updatedEplace } = updateEplace(hero.ePlace, ePlaceId, { stones: newStone }); + let { newEplace, updatedEplace } = updateEplace(oldEplace, ePlaceId, { stones: newStone }); let jewel = await JewelModel.findbySeqId(curEquip.jewel); await calPlayerCeAndSave(HERO_SYSTEM_TYPE.EQUIP_STONE, sid, roleId, hero, { ePlace: newEplace }, [ePlaceId], { jewel }); + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_PUT_STONE, oldEplace, newEplace, [ePlaceId]); + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_STONE_CNT, oldEplace, newEplace, [ePlaceId]); + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_STONE_CNT_LV, oldEplace, newEplace, [ePlaceId]); + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT, oldEplace, newEplace, [ePlaceId], { jewels: [ jewel ] }); + let curHero = { hid, eplace: updatedEplace @@ -506,8 +537,7 @@ export class EquipHandler { await calPlayerCeAndSave(HERO_SYSTEM_TYPE.JEWEL_RESET_RANDSE, sid, roleId, hero, {}, [ePlaceId], { oldJewel: jewel, newJewel }); } - // TODO 任务 - // await checkTask(roleId, sid, TASK_TYPE.EQUIP_RESTRENGTHEN, 1, true, {}); + await checkTask(roleId, sid, TASK_TYPE.JEWEL_RESET, 1, true, {}); return resResult(STATUS.SUCCESS, { curJewel: pick(newJewel, ['seqId', 'id', 'hid', 'ePlaceId', 'randSe', 'previewRandSe']) }); @@ -590,8 +620,8 @@ export class EquipHandler { await calPlayerCeAndSave(HERO_SYSTEM_TYPE.JEWEL_QUENCH, sid, roleId, hero, {}, [ePlaceId], { oldJewel: jewel, newJewel }); } - // TODO 任务 - // await checkTask(roleId, sid, TASK_TYPE.EQUIP_RESTRENGTHEN, 1, true, {}); + await checkTask(roleId, sid, TASK_TYPE.JEWEL_QUENCH, 1, true, {}); + if(isSuccess) await checkTask(roleId, sid, TASK_TYPE.JEWEL_QUENCH_SUCCESS, 1, true, {}); return resResult(STATUS.SUCCESS, { isSuccess, curJewel: pick(newJewel, ['seqId', 'id', 'hid', 'ePlaceId', 'randSe', 'previewRandSe']) }); @@ -668,6 +698,7 @@ export class EquipHandler { if (!costResult) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); let goods = await addItems(roleId, roleName, sid, [{ id, count }], ITEM_CHANGE_REASON.COMPOSE_STONE); + await checkTask(roleId, sid, TASK_TYPE.STONE_COMPOSE, count, true, {}); return resResult(STATUS.SUCCESS, { goods }); } diff --git a/game-server/app/services/taskService.ts b/game-server/app/services/taskService.ts index 7c595b778..d7c8d3468 100644 --- a/game-server/app/services/taskService.ts +++ b/game-server/app/services/taskService.ts @@ -4,7 +4,7 @@ import { pinus, FrontendOrBackendSession } from 'pinus'; import { resResult, shouldRefresh } from '../pubUtils/util'; import { STATUS, TASK_TYPE, TASK_FUN_TYPE, SHOP_REFRESH_TYPE, WAR_TYPE } from '../consts'; import { TaskParam, TaskListReturn } from '../domain/roleField/task'; -import { HeroType } from '../db/Hero'; +import { EPlace, HeroType } from '../db/Hero'; import { getRoleOnlineInfo } from './redisService'; import { HeroScores } from '../db/PvpHistoryOpp'; import { ItemInter } from '../pubUtils/interface'; @@ -15,6 +15,7 @@ import { gameData } from '../pubUtils/data'; import { getSeconds, getZeroPointD } from '../pubUtils/timeUtil'; import { RoleStatus } from '../db/ComBattleTeam'; import { getActivities } from './activity/activityService'; +import { JewelType } from '../db/Jewel'; export async function checkTaskWithRoles(serverId: number, roleId: string, sid: string, taskType: number, roles: RoleType[]) { for (let role of roles) { @@ -34,6 +35,11 @@ export async function checkTaskWithHero(roleId: string, sid: string, taskType: n pushTaskUpdate(roleId, sid, pushMessage); } +export async function checkTaskWithEplaces(roleId: string, sid: string, taskType: number, eplace: EPlace[], newEplace: EPlace[], eplaceIds: number[], params?: any) { + let pushMessage = await taskUtil.checkTaskWithEplaces(roleId, taskType, eplace, newEplace, eplaceIds, params); + pushTaskUpdate(roleId, sid, pushMessage); +} + // export async function checkTaskWithEquip(roleId: string, sid: string, taskType: number, equip: EquipType, args?: number[]) { // let pushMessage = await taskUtil.checkTaskWithEquip(roleId, taskType, equip, args); // pushTaskUpdate(roleId, sid, pushMessage); @@ -294,6 +300,12 @@ export async function getPvpTask(roleId: string) { return { taskList } } +export async function checkTaskInPutJewel(roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceId: number, originJewel: JewelType, curJewel: JewelType) { + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_PUT_JEWEL, oldEplace, newEplace, [ePlaceId], { jewels: [originJewel, curJewel ] }); + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_PUT_JEWEL_CNT, oldEplace, newEplace, [ePlaceId]); + await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT, oldEplace, newEplace, [ePlaceId], { jewels: [originJewel, curJewel ] }); +} + // 刷新每日任务 export async function refDailyTask(roleId: string, sid: string) { let userTask = await UserTaskModel.findByRole(roleId); diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 88715502e..4ac6d0db8 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -609,18 +609,18 @@ export enum TASK_TYPE { ROLE_TITLE = 19, // 爵位 ROLE_TERAPH_STRENGTHEN = 20, // 神像强化 ROLE_SCROLL_ACTIVE = 21, // 名将谱激活 - EQUIP_SUM = 22, // 总装备数 - EQUIP_BY_HERO = 23, // 各武将装备数量 - EQUIP_QUALITY = 24, // 装备品质 - EQUIP_STRENGTHEN = 25, // 装备栏强化 - EQUIP_JEWEL = 26, // 多少装备镶嵌宝石 - EQUIP_COMPOSE_SUIT = 27, // 合成套装 - EQUIP_SUIT = 28, // 拥有套装 + // EQUIP_SUM = 22, // 总装备数 + // EQUIP_BY_HERO = 23, // 各武将装备数量 + // EQUIP_QUALITY = 24, // 装备品质 + // EQUIP_STRENGTHEN = 25, // 装备栏强化 + // EQUIP_JEWEL = 26, // 多少装备镶嵌宝石 + // EQUIP_COMPOSE_SUIT = 27, // 合成套装 + // EQUIP_SUIT = 28, // 拥有套装 ROLE_SIGN = 29, // 签到 暂无 - EQUIP_REFINE = 30, // 成功精炼 - EQUIP_RESTRENGTHEN = 31, // 洗炼 - EQUIP_JEWEL_STAGE = 32, // 镶嵌几阶宝石 - EQUIP_JEWEL_SUM = 33, // 总计镶嵌多少宝石 + // EQUIP_REFINE = 30, // 成功精炼 + // EQUIP_RESTRENGTHEN = 31, // 洗炼 + // EQUIP_JEWEL_STAGE = 32, // 镶嵌几阶宝石 + // EQUIP_JEWEL_SUM = 33, // 总计镶嵌多少宝石 FRIEND_NUM = 34, // 好友人数 FRIEND_SEND_HEART = 35, // 赠送友情点 CHAT = 36, // 发送消息 @@ -664,16 +664,37 @@ export enum TASK_TYPE { HERO_QUALITY_TO_QUALITY_COUNT = 74,// *名武将*品升*品 HERO_QUALITY_WAKE_UP_COUNT = 75, // *名武将*品觉醒 HERO_WAKE_UP_STAR_UP_COUNT = 76, // *名武将升至觉醒*星 - EQUIP_REFINE_LV = 77, // *件装备成功精炼到*级 - EQUIP_SUIT_JEWEL_STAGE = 78, // *次触发,一个武将满装备情况下,必须都镶嵌有相同阶的宝石(阶数大于等于x情况下都算达成) + // EQUIP_REFINE_LV = 77, // *件装备成功精炼到*级 + // EQUIP_SUIT_JEWEL_STAGE = 78, // *次触发,一个武将满装备情况下,必须都镶嵌有相同阶的宝石(阶数大于等于x情况下都算达成) GUILD_TRAIN_COUNT = 79, // 练兵场通关x层 HERO_UNLOCK = 80, // 名将谱x阵营全部激活 GACHA_QUALITY_COUNT = 81, // 抽到*次品质*武将 ROLE_TERAPH_STAGE_UP = 82, // 神像进阶 - EQUIP_QUALITY_COUNT = 83, // 获得*件品质的*装备 + // EQUIP_QUALITY_COUNT = 83, // 获得*件品质的*装备 HERO_WAKE_UP_COUNT = 84, // *名武将觉醒 GUILD_JOIN_ACTIVITY_END = 85, // 参与*军团活动到结束 ACTIVITY_RMB = 86, // 累计充值*元 + EQUIP_LV_TO = 87, // x件装备强化至x级 + EQUIP_PUT_JEWEL = 88, // 多少件装备多少阶天晶石 + EQUIP_PUT_STONE = 89, // 多少件装备多少个地玉石 + EQUIP_STAR_UP_TO = 90, // 装备升到多少星 + EQUIP_STAR_UP_CNT = 91, // 装备升星多少次 + EQUIP_SUIT_SEID_NUM = 92, // 激活套装属性条数 + EQUIP_QUALITY_UP = 93, // 多少件装备升品 + EQUIP_QUALITY_UP_CNT = 94, // 装备升品多少次 + EQUIP_QUALITY_UP_TO = 95, // 装备升到多少品 + EQUIP_COMPOSE = 96, // 合成 + EQUIP_COMPOSE_CNT = 97, // 多少名武将有多少装备 + EQUIP_LV_UP = 98, // 装备等级 + EQUIP_PUT_JEWEL_CNT = 99, // 多少装备镶嵌天晶 + EQUIP_PUT_STONE_CNT = 100, // 多少装备镶嵌地玉 + EQUIP_STONE_CNT = 101, // 镶嵌了多少地玉 + EQUIP_STONE_CNT_LV = 102, // 多少装备镶嵌多少多少阶的地玉 + EQUIP_JEWEL_RANDSE_CNT = 103, // 多少天晶的多少条词条激活 + STONE_COMPOSE = 104, // 合成地玉石 + JEWEL_RESET = 105, // 天晶洗练 + JEWEL_QUENCH = 106, // 天晶淬炼 + JEWEL_QUENCH_SUCCESS = 107, // 天晶淬炼成功 } // 任务累积类型 diff --git a/shared/db/UserTaskRec.ts b/shared/db/UserTaskRec.ts index 884c887b1..b61f1f19f 100644 --- a/shared/db/UserTaskRec.ts +++ b/shared/db/UserTaskRec.ts @@ -33,6 +33,9 @@ export default class UserTaskRec extends BaseModel { @prop({ required: true, type: Number, default: [] }) received: number[]; // 是否已领取 + @prop({ required: true, type: String, default: [] }) + records: string[]; // 历史记录 + private static getRefreshCondition(type: number) { let today = getZeroPointD(); @@ -55,6 +58,8 @@ export default class UserTaskRec extends BaseModel { return rec; } + + public static async checkHistoryAndSetTaskRec(roleId: string, type: number, taskType: number, group: string, count: number) { let rec: UserTaskRecType = await UserTaskRecModel.findByRoleAndGroup(roleId, type, taskType, group); if(rec) { @@ -67,6 +72,15 @@ export default class UserTaskRec extends BaseModel { return rec; } + public static async checkRecordAndIncTaskRec(roleId: string, type: number, taskType: number, group: string, count: number, record: string) { + let rec: UserTaskRecType = await UserTaskRecModel.findByRoleAndGroup(roleId, type, taskType, group); + if(!rec || rec.records.indexOf(record) == -1) { + let condition = this.getRefreshCondition(type); + rec = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $inc: { count }, $push: { records: record } }, { new: true, upsert: true }).lean(); + } + return rec; + } + public static async findByRoleAndType(roleId: string, type: number) { let condition = this.getRefreshCondition(type); let rec: UserTaskRecType[] = await UserTaskRecModel.find({ roleId, ...condition }).lean(); diff --git a/shared/domain/roleField/task.ts b/shared/domain/roleField/task.ts index b3c6dbb44..7ccd812a4 100644 --- a/shared/domain/roleField/task.ts +++ b/shared/domain/roleField/task.ts @@ -25,6 +25,12 @@ export class TaskParam { aid?: number; isDebug?: boolean; oldCount?: number; + oldStar?: number; + hid?: number; + eplaceId?: number; + oldQuality?: number; + oldStoneLvs?: number[]; + newStoneLvs?: number[]; } export class TaskListReturn { diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 161c78923..1a0a48ede 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -871,6 +871,7 @@ function treatTaskGroup() { let taskByGroup = new Map(); // taskType => obj for(let [taskType, tasks] of gameData.taskType) { for(let obj of tasks) { + console.log('#####', taskType, obj.type, obj.id) let dicTaskType = taskType2Desc.get(taskType); let index = dicTaskType.param.split('&').indexOf(dicTaskType.condition); let params = obj.taskParam.filter((_, i) => index != i); diff --git a/shared/pubUtils/playerCe.ts b/shared/pubUtils/playerCe.ts index 0c9dfb09c..5142ecb7a 100644 --- a/shared/pubUtils/playerCe.ts +++ b/shared/pubUtils/playerCe.ts @@ -730,7 +730,7 @@ function setRandSeToSeidList(jewel: JewelType, equip: EPlace, list: number[]) { } } -function isRandSeUnLock(jewelId: number, randSeId: number, stones: Stone[]) { +export function isRandSeUnLock(jewelId: number, randSeId: number, stones: Stone[]) { let dicJewel = gameData.jewel.get(jewelId); let dicJewelCondition = getJewelConditionByLvAndSeId(dicJewel.lv, randSeId); let stoneCnt = 0, stoneLv = 0; diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index d13e73978..fdf747f5f 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -1,11 +1,11 @@ -import { gameData } from './data'; +import { gameData, getEquipSuitByHero } from './data'; import { DicTask } from './dictionary/DicTask'; import { TASK_TYPE, ABI_STAGE, WAR_TYPE, GUILD_JOB, TASK_SUM_TYPE } from '../consts'; import { UserTaskRecModel, UserTaskRecType } from '../db/UserTaskRec' import { RoleType, RoleModel } from '../db/Role'; import { TaskParam, TaskListReturn } from '../domain/roleField/task'; import { getZeroPoint } from './timeUtil'; -import { HeroType } from '../db/Hero'; +import { EPlace, HeroType } from '../db/Hero'; import { ItemInter } from './interface'; import { DailyChallengesData } from '../domain/activityField/dailyChallengesField'; import { splitString } from './util'; @@ -31,6 +31,8 @@ import { GuildModel } from '../db/Guild'; import { RefreshTaskData } from '../domain/activityField/refreshTaskField'; import { ActivityRefreshTaskModel } from '../db/ActivityRefreshTask'; import { ActivityInRemote, transActivityInRemoteToModelType } from '../domain/activityField/activityField'; +import { JewelType } from '../db/Jewel'; +import { isRandSeUnLock } from './playerCe'; @@ -113,10 +115,7 @@ export async function checkTaskWithHero(roleId: string, taskType: number, hero: pushMessage = await checkTask(roleId, taskType, 1, true, { count, oldCount }); } else if (taskType == TASK_TYPE.HERO_QUALITY_UP) { - let dicHero = gameData.hero.get(hero.hid); - if (hero.quality - dicHero.quality == 1) { // 每个武将升品算一次 - pushMessage = await checkTask(roleId, taskType, 1, true, {}); - } + pushMessage = await checkTask(roleId, taskType, 1, true, { hid: hero.hid }); } else if (taskType == TASK_TYPE.HERO_STAGE_UP) { let dicHero = gameData.hero.get(hero.hid); @@ -128,25 +127,128 @@ export async function checkTaskWithHero(roleId: string, taskType: number, hero: else if (taskType == TASK_TYPE.HERO_FAVOUR_LV) { pushMessage = await checkTask(roleId, taskType, 1, true, { favourLv: hero.favourLv, oldLv: args[0] }) } - else if (taskType == TASK_TYPE.EQUIP_BY_HERO) { - // // arg[0] 1:穿上 -1:脱下 - // let { ePlace } = hero; - // let count = ePlace.filter(cur => cur.equip).length; - // pushMessage = await checkTask(roleId, taskType, args[0], true, { count, isPutOn: args[0], oldCount: args[1] }); - } - else if (taskType == TASK_TYPE.EQUIP_STRENGTHEN) { - // args: 依次为原先的装备的强化等级 - let { ePlace } = hero; - let index = 0; - for (let { lv } of ePlace) { - let p = await checkTask(roleId, taskType, 1, true, { oldLv: args[index++], lv }); - pushMessage = pushMessage.concat(p); + + return pushMessage +} + +export async function checkTaskWithEplaces(roleId: string, taskType: number, oldEplace: EPlace[], newEplace: EPlace[], eplaceIds: number[], params?: Param) { + let pushMessage = new Array(); + if(taskType == TASK_TYPE.EQUIP_SUIT_SEID_NUM) { + let dicEquipSuit = getEquipSuitByHero(params.hid); + let oldSuitStars: number[] = [], newSuitStars: number[] = []; + for(let equipId of dicEquipSuit.equips) { + let oldEquip = oldEplace.find(cur => cur.equipId == equipId); + oldSuitStars.push(oldEquip? oldEquip.star: 0); + let newEquip = newEplace.find(cur => cur.equipId == equipId); + newSuitStars.push(newEquip? newEquip.star: 0); + } + let oldStar = Math.min(...oldSuitStars); + let newStar = Math.min(...newSuitStars); + let oldCount = 0, count = 0; + for(let { star } of dicEquipSuit.effect) { + if(oldStar >= star) oldCount++; + if(newStar >= star) count++; + } + pushMessage = await checkTask(roleId, taskType, 1, true, { oldCount, count }); + } + else if (taskType == TASK_TYPE.EQUIP_COMPOSE_CNT) { + pushMessage = await checkTask(roleId, taskType, newEplace.length - oldEplace.length, true, {}); + } else { + for(let eplaceId of eplaceIds) { + let oldEquip = oldEplace.find(cur => cur.id == eplaceId)||new EPlace(eplaceId, 0); + let newEquip = newEplace.find(cur => cur.id == eplaceId)||new EPlace(eplaceId, 0); + let result = await checkTaskWithEplace(roleId, taskType, oldEquip, newEquip, params); + pushMessage.push(...result); } } return pushMessage } +interface Param { + jewels?: JewelType[]; + hid?: number; +} + +export async function checkTaskWithEplace(roleId: string, taskType: number, oldEquip: EPlace, newEquip: EPlace, params?: Param) { + let pushMessage = new Array(); + if (taskType == TASK_TYPE.EQUIP_LV_TO) { + pushMessage = await checkTask(roleId, taskType, 1, true, { oldLv: oldEquip.lv, lv: newEquip.lv }) + } + else if (taskType == TASK_TYPE.EQUIP_PUT_JEWEL) { + let jewels: JewelType[] = params.jewels; + let oldJewel = jewels.find(cur => cur && cur.seqId == oldEquip.jewel); + let oldLv = gameData.jewel.get(oldJewel?.id)?.lv || 0; + let newJewel = jewels.find(cur => cur && cur.seqId == newEquip.jewel); + let lv = gameData.jewel.get(newJewel?.id)?.lv || 0; + pushMessage = await checkTask(roleId, taskType, 1, true, { oldLv, lv }); + } + else if (taskType == TASK_TYPE.EQUIP_PUT_STONE) { + let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; + let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; + pushMessage = await checkTask(roleId, taskType, 1, true, { oldCount: oldStoneCnt, count: newStoneCnt }); + } + else if (taskType == TASK_TYPE.EQUIP_STAR_UP_TO) { + pushMessage = await checkTask(roleId, taskType, 1, true, { oldStar: oldEquip?.star||0, star: newEquip?.star||0 }); + } + else if (taskType == TASK_TYPE.EQUIP_QUALITY_UP) { + pushMessage = await checkTask(roleId, taskType, 1, true, { hid: params.hid, eplaceId: newEquip.id }); + } + else if (taskType == TASK_TYPE.EQUIP_QUALITY_UP_TO) { + pushMessage = await checkTask(roleId, taskType, 1, true, { oldQuality: oldEquip?.quality||0, quality: newEquip?.quality||0 }); + } + else if (taskType == TASK_TYPE.EQUIP_PUT_JEWEL_CNT) { + if(oldEquip.jewel && !newEquip.jewel) { + pushMessage = await checkTask(roleId, taskType, -1, true, { }); + } else if (!oldEquip.jewel && newEquip.jewel) { + pushMessage = await checkTask(roleId, taskType, 1, true, { }); + } + } + else if (taskType == TASK_TYPE.EQUIP_PUT_STONE_CNT) { + let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; + let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; + if(oldStoneCnt > 0 && newStoneCnt == 0) { + pushMessage = await checkTask(roleId, taskType, -1, true, { }); + } else if (oldStoneCnt == 0 && newStoneCnt > 0) { + pushMessage = await checkTask(roleId, taskType, 1, true, { }); + } + } + else if (taskType == TASK_TYPE.EQUIP_STONE_CNT) { + let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; + let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; + pushMessage = await checkTask(roleId, taskType, newStoneCnt - oldStoneCnt, true, { }); + } + else if (taskType == TASK_TYPE.EQUIP_STONE_CNT_LV) { + let oldStoneLvs = oldEquip.stones.map(cur => { + let dicStone = gameData.stone.get(cur.stone); + return dicStone?dicStone.lv: 0; + }); + let newStoneLvs = newEquip.stones.map(cur => { + let dicStone = gameData.stone.get(cur.stone); + return dicStone?dicStone.lv: 0; + }); + pushMessage = await checkTask(roleId, taskType, 1, true, { oldStoneLvs, newStoneLvs }); + } + else if (taskType == TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT) { + let jewels: JewelType[] = params.jewels; + let oldJewel = jewels.find(cur => cur && cur.seqId == oldEquip.jewel); + let oldRandSe = oldJewel.randSe||[]; + let oldUnlockSeCnt = oldRandSe.filter(se => { + return isRandSeUnLock(oldJewel.id, se.id, oldEquip.stones); + }).length; + + let newJewel = jewels.find(cur => cur && cur.seqId == newEquip.jewel); + let newRandSe = newJewel.randSe||[]; + let newUnlockSeCnt = newRandSe.filter(se => { + return isRandSeUnLock(newJewel.id, se.id, newEquip.stones); + }).length; + + pushMessage = await checkTask(roleId, taskType, 1, true, { oldCount: oldUnlockSeCnt, count: newUnlockSeCnt }); + } + + + return pushMessage +} // export async function checkTaskWithEquip(roleId: string, taskType: number, equip: EquipType, args: number[] = []) { // let pushMessage = new Array(); @@ -215,20 +317,6 @@ export async function checkTaskWithArgs(roleId: string, taskType: number, args: pushMessage = await checkTask(roleId, taskType, -1, true, {}); } } - else if (taskType == TASK_TYPE.EQUIP_JEWEL_STAGE) { - // // args 装上的, 卸下的 - // let [putOnJewel, putOffJewel] = args; - // if (putOnJewel > 0) { - // let dicGood = gameData.goods.get(putOnJewel); - // let push = await checkTask(roleId, taskType, 1, true, { stage: dicGood.lvLimited }); - // pushMessage.push(...push); - // } - // if (putOffJewel > 0) { - // let dicGood = gameData.goods.get(putOffJewel); - // let push = await checkTask(roleId, taskType, -1, true, { stage: dicGood.lvLimited }); - // pushMessage.push(...push); - // } - } else if (taskType == TASK_TYPE.CHAT) { // args[0] 聊天type 1-系统 2-世界 3-军团 4-组队 5-私聊 pushMessage = await checkTask(roleId, taskType, 1, true, { chatType: args[0] }) @@ -340,6 +428,7 @@ export async function checkTaskRec(roleId: string, type: number, group: string, let isMatch = true; // 条件是否满足 let checkHistory = false; // 是否检查历史 + let checkRecord = ''; // 检查记录 switch (taskType) { case TASK_TYPE.ROLE_TITLE: isMatch = param.title >= taskParam[0] && param.oldTitle < taskParam[0]; @@ -351,8 +440,9 @@ export async function checkTaskRec(roleId: string, type: number, group: string, case TASK_TYPE.HERO_QUALITY: isMatch = taskParam[1] == param.quality; break; - case TASK_TYPE.EQUIP_QUALITY: - isMatch = taskParam[1] <= param.quality; + case TASK_TYPE.HERO_QUALITY_UP: + isMatch = true; + checkRecord = `${param.hid}`; break; case TASK_TYPE.HERO_QUALITY_STAR_UP: isMatch = taskParam[1] == param.quality && taskParam[2] == param.star; @@ -369,20 +459,6 @@ export async function checkTaskRec(roleId: string, type: number, group: string, case TASK_TYPE.HERO_CONNECT: isMatch = taskParam[1] == param.connectLv; break; - case TASK_TYPE.EQUIP_BY_HERO: - isMatch = false; - if (param.isPutOn == 1 && param.count >= taskParam[1] && param.oldCount < taskParam[1] ) { // 装上之后达到 +1 - isMatch = true; - } else if (param.isPutOn == -1 && param.count < taskParam[1] && param.oldCount >= taskParam[1]) { // 脱下后不能达到 -1 - isMatch = true; - } - break; - case TASK_TYPE.EQUIP_STRENGTHEN: - isMatch = param.oldLv < taskParam[1] && param.lv >= taskParam[1]; - break; - case TASK_TYPE.EQUIP_JEWEL_STAGE: - isMatch = param.stage >= taskParam[1]; - break; case TASK_TYPE.CHAT: isMatch = taskParam[0] == 0 || param.chatType == taskParam[0]; break; @@ -431,6 +507,57 @@ export async function checkTaskRec(roleId: string, type: number, group: string, case TASK_TYPE.GUILD_REFINE: isMatch = taskParam[0] == 0 || param.quality == taskParam[0]; break; + case TASK_TYPE.EQUIP_LV_TO: + isMatch = param.lv >= taskParam[1] && param.oldLv < taskParam[1]; + break; + case TASK_TYPE.EQUIP_PUT_JEWEL: + if(param.lv >= taskParam[1] && param.oldLv < taskParam[1]) { + isMatch = true; + } else if (param.lv < taskParam[1] && param.oldLv >= taskParam[1]) { + isMatch = true; + count = -1; + } + break; + case TASK_TYPE.EQUIP_PUT_STONE: + if(param.oldCount < taskParam[1] && param.count >= taskParam[1]) { + isMatch = true; + } else if (param.oldCount >= taskParam[1] && param.count < taskParam[1]) { + isMatch = true; + count = -1; + } + break; + case TASK_TYPE.EQUIP_STAR_UP_TO: + isMatch = param.oldStar < taskParam[1] && param.star >= taskParam[1]; + break; + case TASK_TYPE.EQUIP_SUIT_SEID_NUM: + isMatch = param.oldCount < taskParam[1] && param.count >= taskParam[1]; + break; + case TASK_TYPE.EQUIP_QUALITY_UP: + isMatch = true; + checkRecord = `${param.hid}_${param.eplaceId}`; + break; + case TASK_TYPE.EQUIP_QUALITY_UP_TO: + isMatch = param.oldQuality < taskParam[1] && param.quality >= taskParam[1]; + break; + case TASK_TYPE.EQUIP_STONE_CNT_LV: + let oldCount = param.oldStoneLvs.filter(lv => lv >= taskParam[2]).length; + let newCount = param.newStoneLvs.filter(lv => lv >= taskParam[2]).length; + if(oldCount < taskParam[1] && newCount >= taskParam[1]) { + isMatch = true; + } else if (oldCount >= taskParam[1] && newCount < taskParam[1]) { + isMatch = false; + count = -1; + } + break; + case TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT: + if(param.oldCount < taskParam[1] && param.count >= taskParam[1]) { + isMatch = true; + } else if (param.oldCount >= taskParam[1] && param.count < taskParam[1]) { + isMatch = true; + count = -1; + } + break; + } // console.log('****isMatch', isMatch, checkHistory, type, taskType, group, count) if (param.isDebug) { @@ -439,8 +566,13 @@ export async function checkTaskRec(roleId: string, type: number, group: string, if (isMatch) { if (isInc) { - let rec = await UserTaskRecModel.incTaskRec(roleId, type, taskType, group, count); - return rec; + if(checkRecord != '') { + let rec = await UserTaskRecModel.checkRecordAndIncTaskRec(roleId, type, taskType, group, count, checkRecord); + return rec; + } else { + let rec = await UserTaskRecModel.incTaskRec(roleId, type, taskType, group, count); + return rec; + } } else { if (checkHistory) { let rec = await UserTaskRecModel.checkHistoryAndSetTaskRec(roleId, type, taskType, group, count); @@ -689,26 +821,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: // console.log('***** thirtyDay before', Date.now()); //30天任务统计 - if (taskType === TASK_TYPE.HERO_QUALITY_STAR_UP || - taskType === TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT || - taskType === TASK_TYPE.HERO_QUALITY_WAKE_UP_COUNT || - taskType === TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT || - taskType === TASK_TYPE.HERO_WAKE_UP_COUNT || - taskType === TASK_TYPE.HERO_QUALITY || - taskType === TASK_TYPE.GUILD_TRAIN_COUNT || - taskType === TASK_TYPE.HERO_UNLOCK || - taskType === TASK_TYPE.GACHA_QUALITY_COUNT || - taskType === TASK_TYPE.ROLE_TERAPH_STAGE_UP || - taskType === TASK_TYPE.EQUIP_QUALITY_COUNT || - - taskType === TASK_TYPE.EQUIP_STRENGTHEN || - taskType === TASK_TYPE.EQUIP_REFINE_LV || - 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 findActivitiesByTypes([ACTIVITY_TYPE.THIRTY_DAYS]); for (let activity of allActivity) { let thirtyDaysActivity = new ThirtyDaysData(activity, createTime); @@ -757,7 +870,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, count, beginTime, endTime); popShopData.setPlayerRecords(playerRecord) pushMessage = pushMessage.concat(popShopData); - } else if (taskType == TASK_TYPE.EQUIP_QUALITY_COUNT || taskType == TASK_TYPE.GACHA_QUALITY_COUNT || taskType == TASK_TYPE.GUILD_ACTIVITY) {//每天统计 + } else if ( taskType == TASK_TYPE.GACHA_QUALITY_COUNT || taskType == TASK_TYPE.GUILD_ACTIVITY) {//每天统计 let recordDate = moment(new Date()).startOf('d').toDate() let recordData: ActivityPopUpShopRecordModelType = await ActivityPopUpShopRecordModel.findRecordData(serverId, activity.activityId, roleId, task.id, task.taskType, recordDate) let { addCount } = isComplete(roleId, task.taskType, task.taskParam, count, activity.activityId, parma, null); @@ -918,15 +1031,6 @@ export function isComplete(_roleId: string, taskType: TASK_TYPE, taskParam: stri let dicJob = gameData.job.get(paramObj.job); addCount = (param[1] == dicJob.grade) ? 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; @@ -934,30 +1038,9 @@ export function isComplete(_roleId: string, taskType: TASK_TYPE, taskParam: stri case TASK_TYPE.GASHA: addCount = count; break; - case TASK_TYPE.EQUIP_STRENGTHEN: - for (let obj of paramObj) { - // obj.hid;//英雄di - // obj.oldLv;//栏位升级前等级 - // obj.lv;//栏位升级后等级 - // obj.id;//栏位id - if (param[1] > obj.oldLv && param[1] <= obj.lv) { - addCount++; - } - } - break; - case TASK_TYPE.EQUIP_REFINE_LV: - addCount = (param[1] == paramObj.lv) ? count : 0; - break; - - case TASK_TYPE.EQUIP_REFINE: - addCount = count; - break; case TASK_TYPE.BATTLE_MAIN: addCount = (param[1] == paramObj.warId) ? 1 : 0; break; - case TASK_TYPE.EQUIP_JEWEL_SUM: - addCount = count; - break; case TASK_TYPE.GUILD_TRAIN: addCount = count; break; @@ -972,9 +1055,6 @@ export function isComplete(_roleId: string, taskType: TASK_TYPE, taskParam: stri } break; } - case TASK_TYPE.EQUIP_SUM: - addCount = count; - break; case TASK_TYPE.HERO_LV://{ hid, lv} { let hid = paramObj.hid; @@ -1141,13 +1221,6 @@ export function isComplete(_roleId: string, taskType: TASK_TYPE, taskParam: stri record.push(hid) break; } - case TASK_TYPE.EQUIP_QUALITY_COUNT: - { - let quality = param[1] - let equips = paramObj.equips.filter(equip => { return equip.quality == quality }) - addCount = equips.length; - break; - } case TASK_TYPE.COM_BATTLE: { addCount = count; diff --git a/shared/resource/jsons/dic_zyz_achievement.json b/shared/resource/jsons/dic_zyz_achievement.json index 962c34157..1ab2baa23 100644 --- a/shared/resource/jsons/dic_zyz_achievement.json +++ b/shared/resource/jsons/dic_zyz_achievement.json @@ -1142,7 +1142,7 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 22, + "taskType": 96, "taskParam": "6&", "achieveType": 23, "achieveTaskName": "全副武装·壹", @@ -1158,7 +1158,7 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 22, + "taskType": 96, "taskParam": "12&", "achieveType": 23, "achieveTaskName": "全副武装·贰", @@ -1174,7 +1174,7 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 22, + "taskType": 96, "taskParam": "24&", "achieveType": 23, "achieveTaskName": "全副武装·叁", @@ -1190,7 +1190,7 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 22, + "taskType": 96, "taskParam": "36&", "achieveType": 23, "achieveTaskName": "全副武装·肆", @@ -1206,7 +1206,7 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 25, + "taskType": 87, "taskParam": "1&10&", "achieveType": 25, "achieveTaskName": "叮叮当当·壹", @@ -1222,7 +1222,7 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 25, + "taskType": 87, "taskParam": "6&10&", "achieveType": 25, "achieveTaskName": "叮叮当当·贰", @@ -1238,7 +1238,7 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 25, + "taskType": 87, "taskParam": "6&40&", "achieveType": 25, "achieveTaskName": "叮叮当当·叁", @@ -1254,7 +1254,7 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 25, + "taskType": 87, "taskParam": "6&80&", "achieveType": 25, "achieveTaskName": "叮叮当当·肆", @@ -1270,7 +1270,7 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 25, + "taskType": 87, "taskParam": "6&100&", "achieveType": 25, "achieveTaskName": "叮叮当当·伍", @@ -1286,11 +1286,11 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 26, + "taskType": 99, "taskParam": "1&", "achieveType": 26, "achieveTaskName": "颜值就是战力·壹", - "taskInfo": "1件装备镶嵌宝石", + "taskInfo": "1件装备镶嵌天晶", "condition": 1, "taskReward": "60001&10", "point": 10 @@ -1302,11 +1302,11 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 26, - "taskParam": "6&", + "taskType": 88, + "taskParam": "24&9", "achieveType": 26, "achieveTaskName": "颜值就是战力·贰", - "taskInfo": "6件装备镶嵌宝石", + "taskInfo": "24件装备镶嵌9品天晶", "condition": 6, "taskReward": "60003&1", "point": 20 @@ -1318,11 +1318,11 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 27, - "taskParam": "1&", + "taskType": 92, + "taskParam": "6&1&", "achieveType": 27, "achieveTaskName": "圣衣在手", - "taskInfo": "合成1件套装套装", + "taskInfo": "6名武将激活套装属性", "condition": 1, "taskReward": "17051&5000", "point": 30 @@ -1334,11 +1334,11 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 30, - "taskParam": "1&", + "taskType": 90, + "taskParam": "1&2&", "achieveType": 28, "achieveTaskName": "炼他炼他·壹", - "taskInfo": "成功精炼1次", + "taskInfo": "1件装备升星至2星", "condition": 1, "taskReward": "17054&10", "point": 5 @@ -1350,11 +1350,11 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 30, - "taskParam": "10&", + "taskType": 90, + "taskParam": "4&6&", "achieveType": 28, "achieveTaskName": "炼他炼他·贰", - "taskInfo": "成功精炼10次", + "taskInfo": "4件装备升星至6星", "condition": 10, "taskReward": "17054&100", "point": 10 @@ -1366,11 +1366,11 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 31, + "taskType": 105, "taskParam": "1&", "achieveType": 29, "achieveTaskName": "洗刷刷·壹", - "taskInfo": "洗炼1次", + "taskInfo": "天晶洗炼1次", "condition": 1, "taskReward": "17044&1", "point": 10 @@ -1382,11 +1382,11 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 31, + "taskType": 105, "taskParam": "10&", "achieveType": 29, "achieveTaskName": "洗刷刷·贰", - "taskInfo": "洗炼10次", + "taskInfo": "天晶洗炼10次", "condition": 10, "taskReward": "17045&1", "point": 20 @@ -1398,11 +1398,11 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 32, - "taskParam": "1&1&", + "taskType": 103, + "taskParam": "1&2&", "achieveType": 30, "achieveTaskName": "颜值就是战力·壹", - "taskInfo": "镶嵌1个1阶宝石", + "taskInfo": "1个天晶的特性2被激活", "condition": 1, "taskReward": "60001&10", "point": 30 @@ -1414,11 +1414,11 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 32, - "taskParam": "1&9&", + "taskType": 103, + "taskParam": "4&3&", "achieveType": 30, "achieveTaskName": "颜值就是战力·贰", - "taskInfo": "镶嵌1个9阶宝石", + "taskInfo": "4个天晶的特性3被激活", "condition": 1, "taskReward": "60006&1", "point": 5 @@ -1430,11 +1430,11 @@ "tabName": "装备", "subTab": 9, "subTabName": "武备", - "taskType": 32, - "taskParam": "4&9&", + "taskType": 103, + "taskParam": "24&4&", "achieveType": 30, "achieveTaskName": "颜值就是战力·叁", - "taskInfo": "镶嵌4个9阶宝石", + "taskInfo": "24个天晶的特性4被激活", "condition": 4, "taskReward": "60003&1", "point": 10 @@ -1921,22 +1921,6 @@ }, { "id": 121, - "achieveTaskId": 121, - "tab": 8, - "tabName": "试炼", - "subTab": 14, - "subTabName": "挑战", - "taskType": 52, - "taskParam": "4&2&", - "achieveType": 46, - "achieveTaskName": "藏宝图上说……", - "taskInfo": "合成红品质的藏宝图2次", - "condition": 2, - "taskReward": "40002&100", - "point": 10 - }, - { - "id": 122, "achieveTaskId": 122, "tab": 8, "tabName": "试炼", @@ -1944,7 +1928,7 @@ "subTabName": "挑战", "taskType": 53, "taskParam": "2&", - "achieveType": 47, + "achieveType": 46, "achieveTaskName": "你帮我,我帮你", "taskInfo": "协助寻宝2次", "condition": 2, @@ -1952,7 +1936,7 @@ "point": 20 }, { - "id": 123, + "id": 122, "achieveTaskId": 123, "tab": 8, "tabName": "试炼", @@ -1960,7 +1944,7 @@ "subTabName": "挑战", "taskType": 54, "taskParam": "2&", - "achieveType": 48, + "achieveType": 47, "achieveTaskName": "宝贝在哪", "taskInfo": "组队寻宝2次", "condition": 2, @@ -1968,23 +1952,7 @@ "point": 30 }, { - "id": 124, - "achieveTaskId": 124, - "tab": 8, - "tabName": "试炼", - "subTab": 14, - "subTabName": "挑战", - "taskType": 55, - "taskParam": "4&2&", - "achieveType": 49, - "achieveTaskName": "找到宝贝了", - "taskInfo": "寻宝红品质2次", - "condition": 2, - "taskReward": "40002&250", - "point": 5 - }, - { - "id": 125, + "id": 123, "achieveTaskId": 125, "tab": 8, "tabName": "试炼", @@ -1992,7 +1960,7 @@ "subTabName": "挑战", "taskType": 57, "taskParam": "2&", - "achieveType": 50, + "achieveType": 48, "achieveTaskName": "新挑战者入场", "taskInfo": "PVP挑战2次", "condition": 2, @@ -2000,7 +1968,7 @@ "point": 10 }, { - "id": 126, + "id": 124, "achieveTaskId": 126, "tab": 8, "tabName": "试炼", @@ -2008,7 +1976,7 @@ "subTabName": "挑战", "taskType": 58, "taskParam": "2&", - "achieveType": 51, + "achieveType": 49, "achieveTaskName": "荣耀之路开启", "taskInfo": "PVP胜利2次", "condition": 2, @@ -2016,7 +1984,7 @@ "point": 10 }, { - "id": 127, + "id": 125, "achieveTaskId": 127, "tab": 9, "tabName": "军团", @@ -2024,7 +1992,7 @@ "subTabName": "军团", "taskType": 64, "taskParam": "1&", - "achieveType": 52, + "achieveType": 50, "achieveTaskName": "人人为我", "taskInfo": "军团捐献1次", "condition": 1, @@ -2032,7 +2000,7 @@ "point": 20 }, { - "id": 128, + "id": 126, "achieveTaskId": 128, "tab": 9, "tabName": "军团", @@ -2040,7 +2008,7 @@ "subTabName": "军团", "taskType": 64, "taskParam": "10&", - "achieveType": 52, + "achieveType": 51, "achieveTaskName": "我为人人", "taskInfo": "军团捐献10次", "condition": 10, @@ -2048,7 +2016,7 @@ "point": 30 }, { - "id": 129, + "id": 127, "achieveTaskId": 129, "tab": 9, "tabName": "军团", @@ -2056,7 +2024,7 @@ "subTabName": "军团", "taskType": 65, "taskParam": "2&", - "achieveType": 53, + "achieveType": 52, "achieveTaskName": "开启宝箱", "taskInfo": "领取2次军团活跃宝箱", "condition": 2, @@ -2064,7 +2032,7 @@ "point": 5 }, { - "id": 130, + "id": 128, "achieveTaskId": 130, "tab": 9, "tabName": "军团", @@ -2072,7 +2040,7 @@ "subTabName": "军团", "taskType": 67, "taskParam": "1&", - "achieveType": 54, + "achieveType": 53, "achieveTaskName": "请点击帮我助力", "taskInfo": "助力炼器堂研发加速1次", "condition": 1, @@ -2080,7 +2048,7 @@ "point": 10 }, { - "id": 131, + "id": 129, "achieveTaskId": 131, "tab": 9, "tabName": "军团", @@ -2088,7 +2056,7 @@ "subTabName": "军团", "taskType": 68, "taskParam": "2&", - "achieveType": 55, + "achieveType": 54, "achieveTaskName": "Boss?就这?", "taskInfo": "练兵场军团成功挑战2次BOSS", "condition": 2, @@ -2096,7 +2064,7 @@ "point": 10 }, { - "id": 132, + "id": 130, "achieveTaskId": 132, "tab": 9, "tabName": "军团", @@ -2104,7 +2072,7 @@ "subTabName": "军团", "taskType": 70, "taskParam": "2&", - "achieveType": 56, + "achieveType": 55, "achieveTaskName": "大吉大利", "taskInfo": "挑战练兵场2次", "condition": 2, @@ -2112,7 +2080,7 @@ "point": 20 }, { - "id": 133, + "id": 131, "achieveTaskId": 133, "tab": 9, "tabName": "军团", @@ -2120,7 +2088,7 @@ "subTabName": "军团", "taskType": 72, "taskParam": "1&", - "achieveType": 57, + "achieveType": 56, "achieveTaskName": "我们是……一团人了", "taskInfo": "加入军团", "condition": 1, diff --git a/shared/resource/jsons/dic_zyz_mainTask.json b/shared/resource/jsons/dic_zyz_mainTask.json index 9f2a2bf14..71e9d74b5 100644 --- a/shared/resource/jsons/dic_zyz_mainTask.json +++ b/shared/resource/jsons/dic_zyz_mainTask.json @@ -112,7 +112,7 @@ { "id": 11, "mainTaskId": 11, - "taskType": 23, + "taskType": 97, "taskInfo": "2名武将装备6件装备", "taskParam": "2&6", "taskStage": 2, @@ -244,8 +244,8 @@ { "id": 23, "mainTaskId": 23, - "taskType": 27, - "taskInfo": "合成一件套装", + "taskType": 99, + "taskInfo": "镶嵌1颗天晶", "taskParam": "1&", "taskStage": 4, "taskReward": "17051&500", @@ -255,12 +255,12 @@ { "id": 24, "mainTaskId": 24, - "taskType": 30, - "taskInfo": "装备成功精炼2次", - "taskParam": "2&", + "taskType": 90, + "taskInfo": "4件装备升星至4星", + "taskParam": "4&4", "taskStage": 4, "taskReward": "17054&200", - "condition": 2, + "condition": 4, "skip": "125&" }, { @@ -442,7 +442,7 @@ { "id": 41, "mainTaskId": 41, - "taskType": 25, + "taskType": 87, "taskInfo": "50件装备强化至35级", "taskParam": "50&35", "taskStage": 7, @@ -453,12 +453,12 @@ { "id": 42, "mainTaskId": 42, - "taskType": 28, - "taskInfo": "拥有3套套装", - "taskParam": "3&", + "taskType": 92, + "taskInfo": "6名武将各激活2条词条属性", + "taskParam": "6&2", "taskStage": 7, "taskReward": "17051&1000", - "condition": 3, + "condition": 6, "skip": "46&" }, { @@ -508,9 +508,9 @@ { "id": 47, "mainTaskId": 47, - "taskType": 32, - "taskInfo": "镶嵌6个3阶宝石", - "taskParam": "6&3", + "taskType": 102, + "taskInfo": "3名武将镶嵌6个5阶地玉", + "taskParam": "3&6&5", "taskStage": 8, "taskReward": "71008&10", "condition": 6, @@ -651,8 +651,8 @@ { "id": 60, "mainTaskId": 60, - "taskType": 30, - "taskInfo": "装备成功洗炼5次", + "taskType": 107, + "taskInfo": "天晶成功淬炼5次", "taskParam": "5&", "taskStage": 10, "taskReward": "17045&10", diff --git a/shared/resource/jsons/dic_zyz_taskType.json b/shared/resource/jsons/dic_zyz_taskType.json index 791c7c04b..be9c4d288 100644 --- a/shared/resource/jsons/dic_zyz_taskType.json +++ b/shared/resource/jsons/dic_zyz_taskType.json @@ -838,5 +838,215 @@ "content": 0, "condition": "RMB", "sumType": 1 + }, + { + "id": 87, + "name": "装备", + "info": "x件装备强化至x级", + "param": "equipcount&lv&", + "string": "装备数量&强化等级&", + "content": 0, + "condition": "equipcount", + "sumType": 1 + }, + { + "id": 88, + "name": "装备", + "info": "x件装备镶嵌X阶天晶石", + "param": "equipcount&lv&", + "string": "装备数量&天晶品阶", + "content": "必须同时镶嵌中,脱下再嵌不算", + "condition": "equipcount", + "sumType": 1 + }, + { + "id": 89, + "name": "装备", + "info": "x件装备镶嵌X个地玉石", + "param": "equipcount&stonecount", + "string": "装备数量&各镶嵌的地玉数量", + "content": 0, + "condition": "equipcount", + "sumType": 1 + }, + { + "id": 90, + "name": "装备", + "info": "x件装备升至X星", + "param": "equipcount&starlv", + "string": "装备数量&装备星级", + "content": 0, + "condition": "equipcount", + "sumType": 1 + }, + { + "id": 91, + "name": "装备", + "info": "x件装备升星X次", + "param": "equipcount&count&", + "string": "装备数量&升星次数&", + "content": 0, + "condition": "equipcount", + "sumType": 1 + }, + { + "id": 92, + "name": "装备", + "info": "x名武将激活X条套装属性", + "param": "herocount&count&", + "string": "武将数量&单名武将激活的套装词条数&", + "content": 0, + "condition": "herocount", + "sumType": 1 + }, + { + "id": 93, + "name": "装备", + "info": "x件装备进行升品", + "param": "equipcount&", + "string": "装备数量&", + "content": 0, + "condition": "equipcount", + "sumType": 1 + }, + { + "id": 94, + "name": "装备", + "info": "装备升品X次", + "param": "count&", + "string": "升品次数", + "content": 0, + "condition": "count", + "sumType": 2 + }, + { + "id": 95, + "name": "装备", + "info": "X件装备升品至Y品质", + "param": "equipcount&quality&", + "string": "装备数量&装备品质&", + "content": 0, + "condition": "equipcount", + "sumType": 1 + }, + { + "id": 96, + "name": "装备", + "info": "装备X件装备", + "param": "equipcount&", + "string": "装备数量&", + "content": 0, + "condition": "equipcount", + "sumType": 1 + }, + { + "id": 97, + "name": "装备", + "info": "x名武将各装备x件装备", + "param": "herocount&equipcount&", + "string": "武将数量&单名武将装备的装备数量&", + "content": 0, + "condition": "herocount", + "sumType": 1 + }, + { + "id": 98, + "name": "装备", + "info": "装备强化X次", + "param": "count&", + "string": "强化次数", + "content": 0, + "condition": "count", + "sumType": 2 + }, + { + "id": 99, + "name": "装备", + "info": "X件装备镶嵌天晶", + "param": "equipcount&", + "string": "装备数量", + "content": 0, + "condition": "count", + "sumType": 1 + }, + { + "id": 100, + "name": "装备", + "info": "X件装备镶嵌地玉", + "param": "equipcount&", + "string": "装备数量", + "content": 0, + "condition": "count", + "sumType": 1 + }, + { + "id": 101, + "name": "装备", + "info": "镶嵌X个地玉", + "param": "count&", + "string": "地玉数量", + "content": 0, + "condition": "count", + "sumType": 1 + }, + { + "id": 102, + "name": "装备", + "info": "X件装备镶嵌X个大于等于X阶地玉", + "param": "equipcount&count&stonelv", + "string": "装备数量&单件装备地玉数量&地玉品阶", + "content": 0, + "condition": "equipcount", + "sumType": 1 + }, + { + "id": 103, + "name": "装备", + "info": "X个天晶的Y条特性词条被激活", + "param": "jewelcount&count", + "string": "天晶数量&词条数量", + "content": 0, + "condition": "count", + "sumType": 1 + }, + { + "id": 104, + "name": "晶玉", + "info": "地玉合成X次", + "param": "count&", + "string": "地玉合成次数", + "content": 0, + "condition": "count", + "sumType": 2 + }, + { + "id": 105, + "name": "晶玉", + "info": "天晶洗炼X次", + "param": "count&", + "string": "天晶洗炼次数", + "content": 0, + "condition": "count", + "sumType": 2 + }, + { + "id": 106, + "name": "晶玉", + "info": "天晶淬炼X次", + "param": "count&", + "string": "天晶淬炼次数", + "content": 0, + "condition": "count", + "sumType": 2 + }, + { + "id": 107, + "name": "晶玉", + "info": "天晶成功淬炼X次", + "param": "count&", + "string": "天晶淬炼成功次数", + "content": 0, + "condition": "count", + "sumType": 2 } ] \ No newline at end of file