From 4e110afc705bc96f73f2ae57f3548392b09e3638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E8=8E=B9?= Date: Wed, 16 Mar 2022 20:42:46 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E6=AD=A6=E5=B0=86=E4=BB=8Eutil=E6=94=BE=E5=88=B0game-?= =?UTF-8?q?server=E7=9A=84service?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/servers/role/handler/roleHandler.ts | 6 +- .../app/servers/role/remote/roleRemote.ts | 2 +- game-server/app/services/rankService.ts | 4 +- game-server/app/services/rewardService.ts | 6 +- game-server/app/services/role/createHero.ts | 233 ++++++++++++++ .../app/services/role/initRoleService.ts | 61 ++++ gm-server/app/service/Utils.ts | 44 +-- gm-server/app/service/users.ts | 218 +++++++------ shared/domain/rank.ts | 4 +- shared/pubUtils/roleUtil.ts | 287 +----------------- shared/pubUtils/taskUtil.ts | 2 +- 11 files changed, 439 insertions(+), 428 deletions(-) create mode 100644 game-server/app/services/role/createHero.ts create mode 100644 game-server/app/services/role/initRoleService.ts diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 2cea53d72..c00aa655e 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -20,13 +20,13 @@ import { checkTaskWithHero, checkTask, checkTaskWithArgs, checkActivityTask } fr import { getGoldObject, getCoinObject } from '../../../pubUtils/itemUtils'; import { RScriptRecordModel } from '../../../db/RScriptRecord'; import { SkinModel, SkinUpdate } from '../../../db/Skin'; -import { CreateHeroes, deletRole } from '../../../pubUtils/roleUtil'; import { Figure } from '../../../domain/dbGeneral'; import { getActivities } from '../../../services/activity/activityService'; import * as dicParam from '../../../pubUtils/dicParam'; import Counter from '../../../db/Counter'; import { UserModel } from '../../../db/User'; import { checkFilterWords, reportTAEvent, treatRoleName } from '../../../services/sdkService'; +import { CreateHeroes } from '../../../services/role/createHero'; export default function (app: Application) { new HandlerService(app, {}); @@ -62,8 +62,8 @@ export class RoleHandler { } await createHero.createWithInitInfo(infos, initInfos.figureInfo); await createHero.clearTask(await getActivities()); - await createHero.pushMessage(pinus, sid); - await createHero.updateRedisRank(Rank); + await createHero.pushMessage(sid); + await createHero.updateRedisRank(); let heroes = createHero.getResultHeroes(); session.set('roleName', roleName); diff --git a/game-server/app/servers/role/remote/roleRemote.ts b/game-server/app/servers/role/remote/roleRemote.ts index ea606a433..06a58e6f8 100644 --- a/game-server/app/servers/role/remote/roleRemote.ts +++ b/game-server/app/servers/role/remote/roleRemote.ts @@ -5,7 +5,6 @@ import { HeroUpdate } from '../../../db/Hero'; import { RoleUpdate } from '../../../db/Role'; import { SkinUpdate } from '../../../db/Skin'; import { RankFirstModel, RankFirstType } from '../../../db/RankFirst'; -import { getInitRoleInfo } from '../../../pubUtils/roleUtil'; import { DEFAULT_HEROES } from '../../../consts'; import { Figure } from '../../../domain/dbGeneral'; import { getDefaultRoleInfo } from '../../../services/roleService'; @@ -13,6 +12,7 @@ import { PVPConfigModel, PVPConfigType } from '../../../db/SystemConfig'; import { treatRoleName, taflush } from '../../../services/sdkService'; import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService'; import { errlogger } from '../../../util/logger'; +import { getInitRoleInfo } from '../../../services/role/initRoleService'; export default function (app: Application) { new HandlerService(app, {}); diff --git a/game-server/app/services/rankService.ts b/game-server/app/services/rankService.ts index 6b24e3bf6..ad52d186e 100644 --- a/game-server/app/services/rankService.ts +++ b/game-server/app/services/rankService.ts @@ -179,7 +179,7 @@ export class Rank { * @param hero 武将数据库 * @param isInc 得分是累加上的还是直接设置的 */ - public async setRankWithHeroInfo(roleId: string, hid: number, score: number, timestamp: number, hero?: HeroType, isInc = false) { + public async setRankWithHeroInfo(roleId: string, hid: number, score: number, timestamp: number, hero?: HeroUpdate, isInc = false) { // 如果没有信息,更新玩家信息 for (let infoKey of [this.infoKey, ...this.extraKeys]) { await this.generParamAndSet(infoKey, { roleId, hid }, { hero }); @@ -235,7 +235,7 @@ export class Rank { * @param fields 玩家id * @param db 数据库内的数据 */ - public async generParamAndSet(infoKey: string, fields: myIdInter, db: { role?: RoleType, guild?: GuildType, hero?: HeroType }) { + public async generParamAndSet(infoKey: string, fields: myIdInter, db: { role?: RoleType, guild?: GuildType, hero?: HeroUpdate }) { let { roleId, guildCode, hid } = fields; let { role, guild, hero } = db; diff --git a/game-server/app/services/rewardService.ts b/game-server/app/services/rewardService.ts index 2a6cbf837..f3b4e9957 100644 --- a/game-server/app/services/rewardService.ts +++ b/game-server/app/services/rewardService.ts @@ -19,7 +19,6 @@ import { HeroSkin } from '../db/Hero'; import { errlogger } from '../util/logger'; import { BAG } from '../pubUtils/dicParam'; import { sendMailByContent } from './mailService'; -import { CreateHeroes } from '../pubUtils/roleUtil'; import { SkinUpdate } from '../db/Skin'; import { getInitHeroById } from './roleService'; import { getActivities } from './activity/activityService'; @@ -28,6 +27,7 @@ import { saveCoinChangeLog, saveFigureInfoLog, saveGoldChangeLog, saveItemChange import { JewelModel, JewelType } from '../db/Jewel'; import { updateEplaces } from './equipService'; import { checkPopUpConditionInCreateHero } from './activity/popUpShopService'; +import { CreateHeroes } from './role/createHero'; export class CheckMeterial { private roleId: string; @@ -601,8 +601,8 @@ export async function createHeroes(roleId: string, roleName: string, sid: string let createHero = new CreateHeroes(roleId, roleName, serverId); await createHero.createWithHeroInfo(infos); await createHero.clearTask(await getActivities()) - await createHero.pushMessage(pinus, sid); - await createHero.updateRedisRank(Rank); + await createHero.pushMessage(sid); + await createHero.updateRedisRank(); heroes = createHero.getShowHeroes(); resultHeroes = createHero.getResultHeroes(); diff --git a/game-server/app/services/role/createHero.ts b/game-server/app/services/role/createHero.ts new file mode 100644 index 000000000..8ae70d02e --- /dev/null +++ b/game-server/app/services/role/createHero.ts @@ -0,0 +1,233 @@ +import { FIGURE_UNLOCK_CONDITION, ITEM_CHANGE_REASON, REDIS_KEY, STATUS, TASK_TYPE, HERO_SYSTEM_TYPE } from "../../consts"; +import { SkinModel } from "../../db/Skin"; +import { HeroModel, HeroSkin, HeroType, HeroUpdate } from "../../db/Hero"; +import { RoleModel, RoleType, RoleUpdate } from "../../db/Role"; +import { SkinUpdate } from "../../db/Skin"; +import { Figure, TopHero } from "../../domain/dbGeneral"; +import { accomplishTask, checkTask, checkTaskWithHeroes } from '../../pubUtils/taskUtil'; +import { combineFigureInfo, unlockFigureWithoutSave } from '../../pubUtils/itemUtils'; +import { TaskListReturn } from "../../domain/roleField/task"; +import { GuildModel, GuildType } from "../../db/Guild"; +import { PvpDefenseModel } from "../../db/PvpDefense"; +import { pick } from "underscore"; +import { calculatetopLineup } from "../../pubUtils/playerCe"; +import { nowSeconds } from "../../pubUtils/timeUtil"; +import { saveCeChangeLog } from "../../pubUtils/logUtil"; +import { reduceCe, resResult } from "../../pubUtils/util"; +import { AttributeCal } from "../../domain/roleField/attribute"; +import { ActivityInRemote } from "../../domain/activityField/activityField"; +import { HeroShowParam } from "../../domain/roleField/hero"; +import { pinus } from "pinus"; +import { Rank } from "../rankService"; + +export class UpdateHeroes { + roleId: string; + roleName: string; + serverId: number; + incHeroNum: number = 0; + incRoleCe: number = 0; + pushHeroes: {hid: number, incHeroCe: number, ce: number, hero: HeroUpdate}[] = []; + roleUpdate: RoleUpdate; + role: RoleType; + guild: GuildType; + + constructor(roleId: string, roleName: string, serverId: number) { + this.roleId = roleId; + this.roleName = roleName; + this.serverId = serverId; + } + + public setRole(role: RoleType) { + this.role = role; + } + + public async getRole() { + if(!this.role) { + this.role = await RoleModel.findByRoleId(this.roleId); + } + return this.role; + } + + public addRoleUpdateParam(param: RoleUpdate) { + this.roleUpdate = {...this.roleUpdate, ...param}; + } + + public async updateDbCe(isCreate: boolean, heroInfo: HeroUpdate, originCe = 0) { + let role = await this.getRole(); + if(isCreate) this.incHeroNum ++; + if(heroInfo != originCe) this.incRoleCe += heroInfo.ce - originCe; + this.addRoleUpdateParam(await calculatetopLineup(role, heroInfo.hid, heroInfo.ce, heroInfo._id )); + this.pushHeroes.push({ hid: heroInfo.hid, incHeroCe: heroInfo.ce - originCe, ce: heroInfo.ce, hero: heroInfo }); + } + + // 更新战力相关的各个表 + public async saveCeToDb() { + let role = await this.getRole(); + // 更新role表 + this.role = await RoleModel.updateRoleInfo(this.roleId, { + heroNum: this.incHeroNum + role.heroNum, ce: this.incRoleCe + role.ce, heroNumUpdatedAt: nowSeconds(), ...this.roleUpdate + }); + + // 更新guild表 + if(role.hasGuild) { + this.guild = await GuildModel.updateCe(this.roleId, this.incRoleCe, true); // 公会更新战力 + } + for(let { hid, incHeroCe } of this.pushHeroes) { + await PvpDefenseModel.updateCe(this.roleId, hid, incHeroCe); // 更新pvp防守阵战力 + } + saveCeChangeLog(this.role, this.incRoleCe, this.role.ce, HERO_SYSTEM_TYPE.INIT, this.pushHeroes.map(cur => cur.hid)); + } + + public async updateRedisRank() { + let role = await this.getRole(); + let { serverId, roleId, pushHeroes } = this; + // 更新军团信息 + if(this.guild) { + let r = new Rank(REDIS_KEY.GUILD_INFO, { guildCode: this.guild.code }); + await r.generParamAndSet(REDIS_KEY.GUILD_INFO, { guildCode: this.guild.code }, { guild: this.guild }); + } + // 武将数量 + if(this.incHeroNum > 0) { + let r = new Rank(REDIS_KEY.HERO_NUM_RANK, { serverId }); + await r.setRankWithRoleInfo(roleId, role.heroNum, role.heroNumUpdatedAt, role); + } + + // 最强阵容 + let r = new Rank(REDIS_KEY.TOP_LINEUP_RANK, { serverId }); + await r.setRankWithRoleInfo(roleId, reduceCe(role.topLineupCe), 0, role); + + // 最强武将 + for(let { hid, ce, hero } of pushHeroes) { + let r2 = new Rank(REDIS_KEY.TOP_HERO_RANK, { serverId }); + await r2.setRankWithHeroInfo(roleId, hid, reduceCe(ce), 0, hero); + + let r4 = new Rank(REDIS_KEY.HERO_RANK, { serverId, hid }); + await r4.setRankWithHeroInfo(roleId, hid, reduceCe(ce), 0, hero); + } + // 总战力 + let r3 = new Rank(REDIS_KEY.SUM_CE_RANK, { serverId }); + await r3.setRankWithRoleInfo(roleId, reduceCe(role.ce), 0, role); + + // 更新最强五人阵容信息 + let r5 = new Rank(REDIS_KEY.TOP_LINEUP_INFO, { serverId }); + await r5.generParamAndSet(REDIS_KEY.TOP_LINEUP_INFO, { roleId }, { role }); + } + + public async pushMessage(pinus: any, sid: string) { + let role = await this.getRole(); + let uids = [{ uid: this.roleId, sid }]; + pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce) , heros: this.pushHeroes.map(cur => { return {...cur, ce: reduceCe(cur.ce), incHeroCe: reduceCe(cur.incHeroCe) }}), topLineupCe: reduceCe(role.topLineupCe) }), uids); + } + +} + +export class CreateHeroes extends UpdateHeroes { + private resultHeroes: HeroType[] = []; + private heroNum = 0; + // 推送信息 + private taskPushMessage: TaskListReturn[] = []; + private activityTaskPushMessage = []; + private figureInfos: { heads: Figure[], frames: Figure[], spines: Figure[] }[] = []; + private skinPushMessages: { heros: {skins: HeroSkin[], hid: number}[], skins: {id: number, hid: number, inc: number, reason: number }[]} = { heros: [], skins: [] }; + + private async getSkinsOfThisHero(hid: number, initSkinInfo: SkinUpdate, isInit: boolean) { + let allSkins = isInit? []: await SkinModel.findbyRoleAndHid(this.roleId, hid); + let skin = await SkinModel.insertSkins(this.roleId, this.roleName, [initSkinInfo]); + let skinInfos = skin.map(cur => ({ id: cur.id, hid, inc: 1, reason: ITEM_CHANGE_REASON.GET_HERO_UNLOCK_SKIN})) + this.skinPushMessages.skins.push(...skinInfos); + if(skin) allSkins.push(...skin); + let skins: { id: number, skin: string, enable: boolean, skinId: number }[] = []; + for(let skin of allSkins) { + skins.push({ id: skin.id, skin: skin._id, enable: skin.id == initSkinInfo.id, skinId: skin.skinId }); + } + return skins + } + + // game-server里面创建武将 + public async createWithHeroInfo(infos: Map) { + let role = await this.getRole(); + // 数据处理 + let conditions = new Array<{ type: number, paramHid?: number, paramFavourLv?: number, paramSkinId?: number }>(); // 解锁头像条件 + let initHeroInfos: HeroUpdate[] = []; + for (let [ hid, { heroInfo, skinInfo }] of infos) { + conditions.push({ type: FIGURE_UNLOCK_CONDITION.GET_HERO, paramHid: heroInfo.hid }); + this.updateDbCe(true, heroInfo); + // 皮肤使用初始加载进内存的数据 + let skins = await this.getSkinsOfThisHero(hid, { ...skinInfo, _id: new SkinModel()._id }, false); + let newAttr = new AttributeCal(); + newAttr.setLv(heroInfo.lv); + newAttr.setByDbData(role.attr, heroInfo.attr); + let heroCe = newAttr.calCe(); // 计算最终战力 + initHeroInfos.push({ ...heroInfo, skins, _id: new HeroModel()._id, ce: heroCe }); + this.heroNum ++; + } + // 武将使用初始加载数据插入 + this.resultHeroes = await HeroModel.insertHeroes(this.roleId, this.roleName, this.serverId, initHeroInfos); + let heroSkins = this.resultHeroes.map(cur => { return pick(cur, ['hid', 'skins']) }); + + this.skinPushMessages.heros.push(...heroSkins); + // 头像解锁 + let { figureInfo, frames, heads, spines } = unlockFigureWithoutSave(conditions, role); + this.figureInfos.push(figureInfo); + this.addRoleUpdateParam({ frames, heads, spines }); + // 更新战力 + await this.saveCeToDb(); + } + + // 创建初始账号时候的初始 + public async createWithInitInfo(infos: Map, figureInfo: { heads: Figure[], frames: Figure[], spines: Figure[] }) { + this.figureInfos.push(figureInfo); + let heroeInfos: HeroUpdate[] = []; + for (let [ hid, { heroInfo, skinInfo }] of infos) { + this.updateDbCe(true, heroInfo); + let model = new SkinModel(); + let skins = await this.getSkinsOfThisHero(hid, { ...skinInfo, _id: model._id }, true); + heroeInfos.push({ ...heroInfo, skins, _id: new HeroModel()._id}); + this.heroNum ++; + } + this.resultHeroes = await HeroModel.insertHeroes(this.roleId, this.roleName, this.serverId, heroeInfos); + } + + public async clearTask(activitiesTypeMap: ActivityInRemote[]) { + // 任务 + // console.log('****** checkTask before', Date.now()) + let m1 = await checkTask(this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, true, {}); + let m2 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_QUALITY, this.resultHeroes); + let m3 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_QUALITY_STAR_UP, this.resultHeroes); + let m4 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_LV, this.resultHeroes); + this.taskPushMessage.push(...m1, ...m2, ...m3, ...m4); + // console.log('****** checkTask after', Date.now()) + //成长任务 + // console.log('****** accomplishTask before', Date.now()) + let mm1 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, null, activitiesTypeMap) + console.log('****mn1', mm1) + let mm2 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_QUALITY, this.heroNum, { heroes: this.resultHeroes }, activitiesTypeMap); + // console.log('****** accomplishTask after', Date.now()) + this.activityTaskPushMessage.push(...mm1, ...mm2); + } + + public async pushMessage(sid: string) { + let role = await this.getRole(); + let uids = [{ uid: this.roleId, sid }]; + pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce) , heros: this.pushHeroes.map(cur => { return {...cur, ce: reduceCe(cur.ce), incHeroCe: reduceCe(cur.incHeroCe) }}), topLineupCe: reduceCe(role.topLineupCe) }), uids); + pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, this.taskPushMessage), uids); + pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, this.activityTaskPushMessage), uids); + let figureInfo = combineFigureInfo(this.figureInfos); + if (!!figureInfo && (figureInfo.heads.length > 0 || figureInfo.frames.length > 0 || figureInfo.spines.length > 0)) { + pinus.app.get('channelService').pushMessageByUids('onHeadChange', resResult(STATUS.SUCCESS, { ...figureInfo }), uids); + } + pinus.app.get('channelService').pushMessageByUids('onHeroSkinChange', resResult(STATUS.SUCCESS, this.skinPushMessages), uids); + pinus.app.get('channelService').pushMessageByUids('onHeroUpdate', resResult(STATUS.SUCCESS, { heroes: this.getResultHeroes() }), uids); + } + + public getResultHeroes() { + return this.resultHeroes.map(cur => ({...cur, ce: reduceCe(cur.ce)})) + } + + public getShowHeroes() { + return this.resultHeroes.map(cur => { + let hero = new HeroShowParam(cur); + return { ...hero, ce: reduceCe(cur.ce)} + }); + } +} \ No newline at end of file diff --git a/game-server/app/services/role/initRoleService.ts b/game-server/app/services/role/initRoleService.ts new file mode 100644 index 000000000..39593c6f4 --- /dev/null +++ b/game-server/app/services/role/initRoleService.ts @@ -0,0 +1,61 @@ +import { DEFAULT_HEROES, DEFAULT_HERO_LV, FIGURE_UNLOCK_CONDITION, HERO_SYSTEM_TYPE, LINEUP_NUM } from "../../consts"; +import { HeroModel, HeroUpdate } from "../../db/Hero"; +import { RoleModel, RoleUpdate } from "../../db/Role"; +import { SkinModel, SkinUpdate } from "../../db/Skin"; +import { TopHero } from "../../domain/dbGeneral"; +import { CalHeroCe, CalRoleCe } from "../../domain/roleField/calCe"; +import { gameData, getHeroExpByLv } from "../../pubUtils/data"; +import { unlockFigureWithoutSave } from "../../pubUtils/itemUtils"; + +// 储存在内存中的初始数据 +export function getInitRoleInfo() { + let topLineup: TopHero[] = [], topLineupCe = 0, allCe = 0, + heroes: HeroUpdate[] = [], initHeroes: HeroUpdate[] = [], initSkins: SkinUpdate[] = [], heroNum = 0, + conditions: {type: FIGURE_UNLOCK_CONDITION, paramHid: number }[] = []; + let role = new RoleModel(); + let calRoleCe = new CalRoleCe(role); + let roleAttr = calRoleCe.cal(HERO_SYSTEM_TYPE.INIT); + + for(let { actorId: hid } of gameData.recruit) { + let { quality, initialStars: star, jobid: job, name: hName, initialSkin } = gameData.hero.get(hid); + // 皮肤 + let skin = new SkinModel(); + let dicFashion = gameData.fashion.get(initialSkin); + if(!dicFashion) { + console.log(`not found skin: ${initialSkin} of ${hid}`); + continue; + } + let skinInfo = { ...skin.toJSON(), id: initialSkin, hid, skinName: dicFashion.name, skinId: dicFashion.heroId }; + initSkins.push(skinInfo); + // 武将 + let hero = new HeroModel(); + let heroInfo = {...hero.toJSON(), hid, star, quality, hName, job, skins: [{ id: initialSkin, skin: skinInfo._id, enable: true, skinId: skinInfo.skinId }], skinId: skinInfo.skinId, lv: DEFAULT_HERO_LV, exp: getHeroExpByLv(DEFAULT_HERO_LV - 1) || 0 }; + let calHeroCe = new CalHeroCe(hid, heroInfo); + let heroAttr = calHeroCe.cal(HERO_SYSTEM_TYPE.INIT); + let ce = calHeroCe.getCalculatedCe(roleAttr); + heroes.push({ ...heroInfo, attr: heroAttr, ce, historyCe: ce }); + // 更新role表 + if(DEFAULT_HEROES.includes(hid)) { + // 头像 + conditions.push({ type: FIGURE_UNLOCK_CONDITION.GET_HERO, paramHid: hid }); + allCe += ce; + heroNum++; + initHeroes.push({ ...heroInfo, attr: heroAttr, ce, historyCe: ce }); + } + } + let { figureInfo, heads, frames, spines } = unlockFigureWithoutSave(conditions, role); + // 最强阵容 + initHeroes.sort((a, b) => { return b.ce - a.ce }); + for(let i = 0; i < LINEUP_NUM; i++) { + if(initHeroes[i]) { + let { hid, ce, _id } = initHeroes[i]; + topLineup.push({ hid, ce, hero: _id }); + topLineupCe += ce; + } + } + + let initRole: RoleUpdate = { topLineupCe, topLineup, attr: roleAttr, ce: allCe, heroNum, heroNumUpdatedAt: Date.now(), heads, frames, spines }; + return { + role: initRole, heroes, skins: initSkins, figureInfo + } +} \ No newline at end of file diff --git a/gm-server/app/service/Utils.ts b/gm-server/app/service/Utils.ts index 09714a08f..213564b68 100644 --- a/gm-server/app/service/Utils.ts +++ b/gm-server/app/service/Utils.ts @@ -1,8 +1,8 @@ import { Service } from 'egg'; import * as pubUtils from '@pubUtils/util'; -import { HeroUpdate } from '@db/Hero'; -import { SkinUpdate } from '@db/Skin'; -import { getInitRoleInfo } from '@pubUtils/roleUtil'; +// import { HeroUpdate } from '@db/Hero'; +// import { SkinUpdate } from '@db/Skin'; +// import { getInitRoleInfo } from '@pubUtils/roleUtil'; const csprng = require('csprng'); /** @@ -13,29 +13,29 @@ export default class Utils extends Service { constructor(args) { super(args); - this.setInitRole(); + // this.setInitRole(); } - private initHeroes: Map = new Map(); // hid => hero - private initSkins: Map = new Map(); // hid => skin + // private initHeroes: Map = new Map(); // hid => hero + // private initSkins: Map = new Map(); // hid => skin - public setInitRole() { - let result = getInitRoleInfo(); - let { heroes, skins } = result; - for(let hero of heroes) { - this.initHeroes.set(hero.hid, hero); - } - for(let skin of skins) { - this.initSkins.set(skin.hid, skin); - } - } + // public setInitRole() { + // let result = getInitRoleInfo(); + // let { heroes, skins } = result; + // for(let hero of heroes) { + // this.initHeroes.set(hero.hid, hero); + // } + // for(let skin of skins) { + // this.initSkins.set(skin.hid, skin); + // } + // } - public getInitHeroById(hid: number) { - return { - heroInfo: this.initHeroes.get(hid), - skinInfo: this.initSkins.get(hid) - } - } + // public getInitHeroById(hid: number) { + // return { + // heroInfo: this.initHeroes.get(hid), + // skinInfo: this.initSkins.get(hid) + // } + // } /** * 生成 len 长度的随机字符串 diff --git a/gm-server/app/service/users.ts b/gm-server/app/service/users.ts index 4cfdba461..92c8b6635 100644 --- a/gm-server/app/service/users.ts +++ b/gm-server/app/service/users.ts @@ -3,17 +3,15 @@ import { CeAttrDataRole, RoleModel } from '@db/Role'; import { HeroModel } from '@db/Hero'; import { Service } from 'egg'; -import { STATUS, ITEM_CHANGE_REASON, REDIS_KEY, WAR_TYPE } from '@consts'; -import { ITID } from '@consts'; +import { STATUS, REDIS_KEY, WAR_TYPE } from '@consts'; import { ItemModel } from '@db/Item'; -import { gameData, getExpByLv } from '@pubUtils/data'; +import { gameData } from '@pubUtils/data'; import { AttributeCal } from '@domain/roleField/attribute'; import { smsModel } from '@db/Sms'; import { isString } from 'underscore'; -import { addSkin, addBags } from '@pubUtils/itemUtils'; import { GiftCodeModel } from '@db/GiftCode'; import { GiftCodeDetailModel } from '@db/GiftCodeDetail'; -import { CreateHeroes, deletRole } from '@pubUtils/roleUtil'; +import { deletRole } from '@pubUtils/roleUtil'; import { RScriptRecordModel } from '@db/RScriptRecord'; import { DicWar } from '@pubUtils/dictionary/DicWar'; import { SearchHeroParam, SearchUserParam, SearchGiftCodeParam, SearchGiftCodeDetailParam, SearchItemParam, SearchGuildParam } from '@domain/backEndField/search'; @@ -143,127 +141,127 @@ export default class GMUsers extends Service { return ctx.service.utils.resResult(STATUS.SUCCESS, { list, total }) } - public async createHero(uids: Array, _hid: string, _hlv: string) { - const { ctx } = this; - console.log('gm createHero', uids, _hid, _hlv); - let hlv = parseInt(_hlv); - if (isNaN(hlv)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); - let hids = (_hid as string).split('&').map(cur => parseInt(cur)); - for (let hid of hids) { - if (isNaN(hid)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); - } + // public async createHero(uids: Array, _hid: string, _hlv: string) { + // const { ctx } = this; + // console.log('gm createHero', uids, _hid, _hlv); + // let hlv = parseInt(_hlv); + // if (isNaN(hlv)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + // let hids = (_hid as string).split('&').map(cur => parseInt(cur)); + // for (let hid of hids) { + // if (isNaN(hid)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + // } - for (let roleId of uids) { - let role = await RoleModel.findByRoleId(roleId); - if (role) { - let heroInfos = new Map(); - for (let hid of hids) { - let heroInfo = ctx.service.utils.getInitHeroById(hid); - heroInfos.set(hid, {...heroInfo}); - } + // for (let roleId of uids) { + // let role = await RoleModel.findByRoleId(roleId); + // if (role) { + // let heroInfos = new Map(); + // for (let hid of hids) { + // let heroInfo = ctx.service.utils.getInitHeroById(hid); + // heroInfos.set(hid, {...heroInfo}); + // } - let createHero = new CreateHeroes(roleId, role.roleName, role.serverId); - await createHero.createWithHeroInfo(heroInfos); + // let createHero = new CreateHeroes(roleId, role.roleName, role.serverId); + // await createHero.createWithHeroInfo(heroInfos); - } else { - return ctx.service.utils.resResult(STATUS.GM_CREATE_ERROR, null, '未找到角色' + roleId) - } - } + // } else { + // return ctx.service.utils.resResult(STATUS.GM_CREATE_ERROR, null, '未找到角色' + roleId) + // } + // } - return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); - } + // return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); + // } - public async createItem(uids: Array, _itemid: string, _itemcount: string) { - const { ctx } = this; - console.log('gm createItem', uids, _itemid, _itemcount); - let itemids = (_itemid as string).split('&').map(cur => parseInt(cur)); - for (let itemid of itemids) { - if (isNaN(itemid)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); - } - let itemcount = parseInt(_itemcount); - if (isNaN(itemcount)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + // public async createItem(uids: Array, _itemid: string, _itemcount: string) { + // const { ctx } = this; + // console.log('gm createItem', uids, _itemid, _itemcount); + // let itemids = (_itemid as string).split('&').map(cur => parseInt(cur)); + // for (let itemid of itemids) { + // if (isNaN(itemid)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + // } + // let itemcount = parseInt(_itemcount); + // if (isNaN(itemcount)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); - let flag = 0, msg = '创建失败'; - let datas: {id: number, count: number }[] = [] - for (let itemid of itemids) { - let dicGoods = gameData.goods.get(itemid); - let itidObj = ITID.get(dicGoods.itid); + // let flag = 0, msg = '创建失败'; + // let datas: {id: number, count: number }[] = [] + // for (let itemid of itemids) { + // let dicGoods = gameData.goods.get(itemid); + // let itidObj = ITID.get(dicGoods.itid); - if (!dicGoods) { - flag = 1, msg = "未找到道具" + itemid; - } else if (!itidObj) { - flag = 1, msg = "未找到道具" + itemid; - } else { - datas.push({ id: itemid, count: itemcount }); - } - } - if(flag == 0) { - for (let roleId of uids) { - let role = await RoleModel.findByRoleId(roleId); - if (role) { - await addBags(roleId, role.roleName, datas, ITEM_CHANGE_REASON.DEBUG); - } else { - flag = 1, msg = '未找到角色' + roleId; - } - } - } + // if (!dicGoods) { + // flag = 1, msg = "未找到道具" + itemid; + // } else if (!itidObj) { + // flag = 1, msg = "未找到道具" + itemid; + // } else { + // datas.push({ id: itemid, count: itemcount }); + // } + // } + // if(flag == 0) { + // for (let roleId of uids) { + // let role = await RoleModel.findByRoleId(roleId); + // if (role) { + // await addBags(roleId, role.roleName, datas, ITEM_CHANGE_REASON.DEBUG); + // } else { + // flag = 1, msg = '未找到角色' + roleId; + // } + // } + // } - if (flag) { - return ctx.service.utils.resResult(STATUS.GM_CREATE_ERROR, null, msg); - } else { - return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); - } - } + // if (flag) { + // return ctx.service.utils.resResult(STATUS.GM_CREATE_ERROR, null, msg); + // } else { + // return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); + // } + // } - public async addGold(uids: Array, _count: string) { - const { ctx } = this; - console.log('gm addGold', uids, _count); - let count = parseInt(_count); - if (isNaN(count)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); - for (let roleId of uids) { - await RoleModel.addGoldFree(roleId, count); - } + // public async addGold(uids: Array, _count: string) { + // const { ctx } = this; + // console.log('gm addGold', uids, _count); + // let count = parseInt(_count); + // if (isNaN(count)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + // for (let roleId of uids) { + // await RoleModel.addGoldFree(roleId, count); + // } - return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); - } + // return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); + // } - public async addCoin(uids: Array, _count: string) { - const { ctx } = this; - console.log('gm addCoin', uids, _count); - let count = parseInt(_count); - if (isNaN(count)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); - for (let roleId of uids) { - await RoleModel.addCoin(roleId, count); - } + // public async addCoin(uids: Array, _count: string) { + // const { ctx } = this; + // console.log('gm addCoin', uids, _count); + // let count = parseInt(_count); + // if (isNaN(count)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + // for (let roleId of uids) { + // await RoleModel.addCoin(roleId, count); + // } - return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); - } - public async addSkin(uids: Array, _id: string) { - const { ctx } = this; - console.log('gm addSkin', uids, _id); - let id = parseInt(_id); - if (isNaN(id)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); - for (let roleId of uids) { - let role = await RoleModel.findByRoleId(roleId); - await addSkin(roleId, role.roleName, id, false); - } + // return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); + // } + // public async addSkin(uids: Array, _id: string) { + // const { ctx } = this; + // console.log('gm addSkin', uids, _id); + // let id = parseInt(_id); + // if (isNaN(id)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + // for (let roleId of uids) { + // let role = await RoleModel.findByRoleId(roleId); + // await addSkin(roleId, role.roleName, id, false); + // } - return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); - } + // return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); + // } - public async levelUp(uids: Array, _lv: string) { - const { ctx } = this; - console.log('gm levelUp', uids, _lv); - let lv = parseInt(_lv); - if (isNaN(lv)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); - for (let roleId of uids) { - let exp = getExpByLv(lv - 1); - await RoleModel.levelup(roleId, lv, exp ? exp.sum : 0); - } + // public async levelUp(uids: Array, _lv: string) { + // const { ctx } = this; + // console.log('gm levelUp', uids, _lv); + // let lv = parseInt(_lv); + // if (isNaN(lv)) return ctx.service.utils.resResult(STATUS.WRONG_PARMS); + // for (let roleId of uids) { + // let exp = getExpByLv(lv - 1); + // await RoleModel.levelup(roleId, lv, exp ? exp.sum : 0); + // } - return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); - } + // return ctx.service.utils.resResult(STATUS.SUCCESS, { uids }); + // } // public async getHeroList(roleId: string) { // const {ctx} = this; diff --git a/shared/domain/rank.ts b/shared/domain/rank.ts index 728bad38b..852b0012f 100644 --- a/shared/domain/rank.ts +++ b/shared/domain/rank.ts @@ -3,7 +3,7 @@ import { WoodenHorse } from "./battleField/guildActivity"; import { RoleUpdate, RoleType } from "../db/Role"; import { reduceCe } from "../pubUtils/util"; import { GuildUpdateParam } from "../db/Guild"; -import { HeroType, } from "../db/Hero"; +import { HeroUpdate, } from "../db/Hero"; import { getSeconds } from "../pubUtils/timeUtil"; import { prop } from "@typegoose/typegoose"; import { pick } from "underscore"; @@ -119,7 +119,7 @@ export class LineupParam { @prop({ required: true }) job: number; - constructor(hero: HeroType) { + constructor(hero: HeroUpdate) { this.hid = hero.hid; this.skinId = hero.skinId; this.star = hero.star; diff --git a/shared/pubUtils/roleUtil.ts b/shared/pubUtils/roleUtil.ts index a5b6f46e0..a21c3907e 100644 --- a/shared/pubUtils/roleUtil.ts +++ b/shared/pubUtils/roleUtil.ts @@ -1,19 +1,7 @@ -import { DEFAULT_HERO_LV, FIGURE_UNLOCK_CONDITION, ITEM_CHANGE_REASON, LINEUP_NUM, REDIS_KEY, STATUS, TASK_TYPE } from "../consts"; import { SkinModel } from "../db/Skin"; -import { DEFAULT_HEROES, HERO_SYSTEM_TYPE } from "../consts"; -import { HeroModel, HeroSkin, HeroType, HeroUpdate } from "../db/Hero"; -import { RoleModel, RoleType, RoleUpdate } from "../db/Role"; -import { SkinUpdate } from "../db/Skin"; -import { Figure, TopHero } from "../domain/dbGeneral"; -import { CalHeroCe, CalRoleCe } from "../domain/roleField/calCe"; -import { gameData, getHeroExpByLv } from "../pubUtils/data"; -import { accomplishTask, checkTask, checkTaskWithHeroes } from './taskUtil'; -import { combineFigureInfo, unlockFigureWithoutSave } from './itemUtils'; -import { TaskListReturn } from "../domain/roleField/task"; -import { nowSeconds } from "./timeUtil"; -import { reduceCe, resResult } from "./util"; -import { calculatetopLineup, } from "./playerCe"; -import { GuildModel, GuildType } from "../db/Guild"; +import { HeroModel } from "../db/Hero"; +import { RoleModel } from "../db/Role"; +import { GuildModel } from "../db/Guild"; import { PvpDefenseModel } from "../db/PvpDefense"; import { ActionPointModel } from '../db/ActionPoint'; import { BattleDropModel } from '../db/BattleDrop'; @@ -94,277 +82,8 @@ import { UserTaskHistoryModel } from '../db/UserTaskHistory'; import { UserTaskRecModel } from '../db/UserTaskRec'; import { WishPoolReportModel } from '../db/WishPoolReport'; import { pick } from "underscore"; -import { HeroShowParam } from '../domain/roleField/hero'; -import { saveCeChangeLog } from "./logUtil"; -import { ActivityInRemote } from "../domain/activityField/activityField"; -import { AttributeCal } from "../domain/roleField/attribute"; import { JewelModel } from "../db/Jewel"; -// 储存在内存中的初始数据 -export function getInitRoleInfo() { - let topLineup: TopHero[] = [], topLineupCe = 0, allCe = 0, - heroes: HeroUpdate[] = [], initHeroes: HeroUpdate[] = [], initSkins: SkinUpdate[] = [], heroNum = 0, - conditions: {type: FIGURE_UNLOCK_CONDITION, paramHid: number }[] = []; - let role = new RoleModel(); - let calRoleCe = new CalRoleCe(role); - let roleAttr = calRoleCe.cal(HERO_SYSTEM_TYPE.INIT); - - for(let { actorId: hid } of gameData.recruit) { - let { quality, initialStars: star, jobid: job, name: hName, initialSkin } = gameData.hero.get(hid); - // 皮肤 - let skin = new SkinModel(); - let dicFashion = gameData.fashion.get(initialSkin); - if(!dicFashion) { - console.log(`not found skin: ${initialSkin} of ${hid}`); - continue; - } - let skinInfo = { ...skin.toJSON(), id: initialSkin, hid, skinName: dicFashion.name, skinId: dicFashion.heroId }; - initSkins.push(skinInfo); - // 武将 - let hero = new HeroModel(); - let heroInfo = {...hero.toJSON(), hid, star, quality, hName, job, skins: [{ id: initialSkin, skin: skinInfo._id, enable: true, skinId: skinInfo.skinId }], skinId: skinInfo.skinId, lv: DEFAULT_HERO_LV, exp: getHeroExpByLv(DEFAULT_HERO_LV - 1) || 0 }; - let calHeroCe = new CalHeroCe(hid, heroInfo); - let heroAttr = calHeroCe.cal(HERO_SYSTEM_TYPE.INIT); - let ce = calHeroCe.getCalculatedCe(roleAttr); - heroes.push({ ...heroInfo, attr: heroAttr, ce, historyCe: ce }); - // 更新role表 - if(DEFAULT_HEROES.includes(hid)) { - // 头像 - conditions.push({ type: FIGURE_UNLOCK_CONDITION.GET_HERO, paramHid: hid }); - allCe += ce; - heroNum++; - initHeroes.push({ ...heroInfo, attr: heroAttr, ce, historyCe: ce }); - } - } - let { figureInfo, heads, frames, spines } = unlockFigureWithoutSave(conditions, role); - // 最强阵容 - initHeroes.sort((a, b) => { return b.ce - a.ce }); - for(let i = 0; i < LINEUP_NUM; i++) { - if(initHeroes[i]) { - let { hid, ce, _id } = initHeroes[i]; - topLineup.push({ hid, ce, hero: _id }); - topLineupCe += ce; - } - } - - let initRole: RoleUpdate = { topLineupCe, topLineup, attr: roleAttr, ce: allCe, heroNum, heroNumUpdatedAt: Date.now(), heads, frames, spines }; - return { - role: initRole, heroes, skins: initSkins, figureInfo - } -} - -export class UpdateHeroes { - roleId: string; - roleName: string; - serverId: number; - incHeroNum: number = 0; - incRoleCe: number = 0; - pushHeroes: {hid: number, incHeroCe: number, ce: number, hero: HeroUpdate}[] = []; - roleUpdate: RoleUpdate; - role: RoleType; - guild: GuildType; - - constructor(roleId: string, roleName: string, serverId: number) { - this.roleId = roleId; - this.roleName = roleName; - this.serverId = serverId; - } - - public setRole(role: RoleType) { - this.role = role; - } - - public async getRole() { - if(!this.role) { - this.role = await RoleModel.findByRoleId(this.roleId); - } - return this.role; - } - - public addRoleUpdateParam(param: RoleUpdate) { - this.roleUpdate = {...this.roleUpdate, ...param}; - } - - public async updateDbCe(isCreate: boolean, heroInfo: HeroUpdate, originCe = 0) { - let role = await this.getRole(); - if(isCreate) this.incHeroNum ++; - if(heroInfo != originCe) this.incRoleCe += heroInfo.ce - originCe; - this.addRoleUpdateParam(await calculatetopLineup(role, heroInfo.hid, heroInfo.ce, heroInfo._id )); - this.pushHeroes.push({ hid: heroInfo.hid, incHeroCe: heroInfo.ce - originCe, ce: heroInfo.ce, hero: heroInfo }); - } - - // 更新战力相关的各个表 - public async saveCeToDb() { - let role = await this.getRole(); - // 更新role表 - this.role = await RoleModel.updateRoleInfo(this.roleId, { - heroNum: this.incHeroNum + role.heroNum, ce: this.incRoleCe + role.ce, heroNumUpdatedAt: nowSeconds(), ...this.roleUpdate - }); - - // 更新guild表 - if(role.hasGuild) { - this.guild = await GuildModel.updateCe(this.roleId, this.incRoleCe, true); // 公会更新战力 - } - for(let { hid, incHeroCe } of this.pushHeroes) { - await PvpDefenseModel.updateCe(this.roleId, hid, incHeroCe); // 更新pvp防守阵战力 - } - saveCeChangeLog(this.role, this.incRoleCe, this.role.ce, HERO_SYSTEM_TYPE.INIT, this.pushHeroes.map(cur => cur.hid)); - } - - public async updateRedisRank(Rank: any) { - let role = await this.getRole(); - let { serverId, roleId, pushHeroes } = this; - // 更新军团信息 - if(this.guild) { - let r = new Rank(REDIS_KEY.GUILD_INFO, { code: this.guild.code }); - await r.generParamAndSet(REDIS_KEY.GUILD_INFO, { guildCode: this.guild.code }, { guild: this.guild }); - } - // 武将数量 - if(this.incHeroNum > 0) { - let r = new Rank(REDIS_KEY.HERO_NUM_RANK, { serverId }); - await r.setRankWithRoleInfo(roleId, role.heroNum, role.heroNumUpdatedAt, role); - } - - // 最强阵容 - let r = new Rank(REDIS_KEY.TOP_LINEUP_RANK, { serverId }); - await r.setRankWithRoleInfo(roleId, reduceCe(role.topLineupCe), 0, role); - - // 最强武将 - for(let { hid, ce, hero } of pushHeroes) { - let r2 = new Rank(REDIS_KEY.TOP_HERO_RANK, { serverId }); - await r2.setRankWithHeroInfo(roleId, hid, reduceCe(ce), 0, hero); - - let r4 = new Rank(REDIS_KEY.HERO_RANK, { serverId, hid }); - await r4.setRankWithHeroInfo(roleId, hid, reduceCe(ce), 0, hero); - } - // 总战力 - let r3 = new Rank(REDIS_KEY.SUM_CE_RANK, { serverId }); - await r3.setRankWithRoleInfo(roleId, reduceCe(role.ce), 0, role); - - // 更新最强五人阵容信息 - let r5 = new Rank(REDIS_KEY.TOP_LINEUP_INFO, { serverId }); - await r5.generParamAndSet(REDIS_KEY.TOP_LINEUP_INFO, { roleId }, { role }); - } - - public async pushMessage(pinus: any, sid: string) { - let role = await this.getRole(); - let uids = [{ uid: this.roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce) , heros: this.pushHeroes.map(cur => { return {...cur, ce: reduceCe(cur.ce), incHeroCe: reduceCe(cur.incHeroCe) }}), topLineupCe: reduceCe(role.topLineupCe) }), uids); - } - -} - -export class CreateHeroes extends UpdateHeroes { - private resultHeroes: HeroType[] = []; - private heroNum = 0; - // 推送信息 - private taskPushMessage: TaskListReturn[] = []; - private activityTaskPushMessage = []; - private figureInfos: { heads: Figure[], frames: Figure[], spines: Figure[] }[] = []; - private skinPushMessages: { heros: {skins: HeroSkin[], hid: number}[], skins: {id: number, hid: number, inc: number, reason: number }[]} = { heros: [], skins: [] }; - - private async getSkinsOfThisHero(hid: number, initSkinInfo: SkinUpdate, isInit: boolean) { - let allSkins = isInit? []: await SkinModel.findbyRoleAndHid(this.roleId, hid); - let skin = await SkinModel.insertSkins(this.roleId, this.roleName, [initSkinInfo]); - let skinInfos = skin.map(cur => ({ id: cur.id, hid, inc: 1, reason: ITEM_CHANGE_REASON.GET_HERO_UNLOCK_SKIN})) - this.skinPushMessages.skins.push(...skinInfos); - if(skin) allSkins.push(...skin); - let skins: { id: number, skin: string, enable: boolean, skinId: number }[] = []; - for(let skin of allSkins) { - skins.push({ id: skin.id, skin: skin._id, enable: skin.id == initSkinInfo.id, skinId: skin.skinId }); - } - return skins - } - - // game-server里面创建武将 - public async createWithHeroInfo(infos: Map) { - let role = await this.getRole(); - // 数据处理 - let conditions = new Array<{ type: number, paramHid?: number, paramFavourLv?: number, paramSkinId?: number }>(); // 解锁头像条件 - let initHeroInfos: HeroUpdate[] = []; - for (let [ hid, { heroInfo, skinInfo }] of infos) { - conditions.push({ type: FIGURE_UNLOCK_CONDITION.GET_HERO, paramHid: heroInfo.hid }); - this.updateDbCe(true, heroInfo); - // 皮肤使用初始加载进内存的数据 - let skins = await this.getSkinsOfThisHero(hid, { ...skinInfo, _id: new SkinModel()._id }, false); - let newAttr = new AttributeCal(); - newAttr.setLv(heroInfo.lv); - newAttr.setByDbData(role.attr, heroInfo.attr); - let heroCe = newAttr.calCe(); // 计算最终战力 - initHeroInfos.push({ ...heroInfo, skins, _id: new HeroModel()._id, ce: heroCe }); - this.heroNum ++; - } - // 武将使用初始加载数据插入 - this.resultHeroes = await HeroModel.insertHeroes(this.roleId, this.roleName, this.serverId, initHeroInfos); - let heroSkins = this.resultHeroes.map(cur => { return pick(cur, ['hid', 'skins']) }); - - this.skinPushMessages.heros.push(...heroSkins); - // 头像解锁 - let { figureInfo, frames, heads, spines } = unlockFigureWithoutSave(conditions, role); - this.figureInfos.push(figureInfo); - this.addRoleUpdateParam({ frames, heads, spines }); - // 更新战力 - await this.saveCeToDb(); - } - - // 创建初始账号时候的初始 - public async createWithInitInfo(infos: Map, figureInfo: { heads: Figure[], frames: Figure[], spines: Figure[] }) { - this.figureInfos.push(figureInfo); - let heroeInfos: HeroUpdate[] = []; - for (let [ hid, { heroInfo, skinInfo }] of infos) { - this.updateDbCe(true, heroInfo); - let model = new SkinModel(); - let skins = await this.getSkinsOfThisHero(hid, { ...skinInfo, _id: model._id }, true); - heroeInfos.push({ ...heroInfo, skins, _id: new HeroModel()._id}); - this.heroNum ++; - } - this.resultHeroes = await HeroModel.insertHeroes(this.roleId, this.roleName, this.serverId, heroeInfos); - } - - public async clearTask(activitiesTypeMap: ActivityInRemote[]) { - // 任务 - // console.log('****** checkTask before', Date.now()) - let m1 = await checkTask(this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, true, {}); - let m2 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_QUALITY, this.resultHeroes); - let m3 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_QUALITY_STAR_UP, this.resultHeroes); - let m4 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_LV, this.resultHeroes); - this.taskPushMessage.push(...m1, ...m2, ...m3, ...m4); - // console.log('****** checkTask after', Date.now()) - //成长任务 - // console.log('****** accomplishTask before', Date.now()) - let mm1 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, null, activitiesTypeMap) - let mm2 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_QUALITY, this.heroNum, { heroes: this.resultHeroes }, activitiesTypeMap); - // console.log('****** accomplishTask after', Date.now()) - this.activityTaskPushMessage.push(...mm1, ...mm2); - } - - public async pushMessage(pinus: any, sid: string) { - let role = await this.getRole(); - let uids = [{ uid: this.roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce) , heros: this.pushHeroes.map(cur => { return {...cur, ce: reduceCe(cur.ce), incHeroCe: reduceCe(cur.incHeroCe) }}), topLineupCe: reduceCe(role.topLineupCe) }), uids); - pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, this.taskPushMessage), uids); - pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, this.activityTaskPushMessage), uids); - let figureInfo = combineFigureInfo(this.figureInfos); - if (!!figureInfo && (figureInfo.heads.length > 0 || figureInfo.frames.length > 0 || figureInfo.spines.length > 0)) { - pinus.app.get('channelService').pushMessageByUids('onHeadChange', resResult(STATUS.SUCCESS, { ...figureInfo }), uids); - } - pinus.app.get('channelService').pushMessageByUids('onHeroSkinChange', resResult(STATUS.SUCCESS, this.skinPushMessages), uids); - pinus.app.get('channelService').pushMessageByUids('onHeroUpdate', resResult(STATUS.SUCCESS, { heroes: this.getResultHeroes() }), uids); - } - - public getResultHeroes() { - return this.resultHeroes.map(cur => ({...cur, ce: reduceCe(cur.ce)})) - } - - public getShowHeroes() { - return this.resultHeroes.map(cur => { - let hero = new HeroShowParam(cur); - return { ...hero, ce: reduceCe(cur.ce)} - }); - } -} - - export async function deletRole(roleId: string) { let role = await RoleModel.findByRoleId(roleId); if(!role ) return false; diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index 428f0de41..ef74b8cc5 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -634,7 +634,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: let dicTaskType = gameData.taskDescByType.get(taskType); let pushMessage = []; let serverInfo = await ServerlistModel.findByServerId(serverId); - if (!serverInfo) return; + if (!serverInfo) return []; let { activityGroupId } = serverInfo; let findActivitiesByTypes = async (types: number[]) => { if(activities) { From fdecaf2d7415bc63e7d73efd489d1c4d295ca28a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E8=8E=B9?= Date: Thu, 17 Mar 2022 09:53:12 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E7=A7=BB=E5=8A=A8rewardService=E7=9A=84?= =?UTF-8?q?=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/activityMonopolyHandler.ts | 2 +- .../activity/handler/dailyCoinHandler.ts | 2 +- .../activity/handler/dailyGiftsHandler.ts | 2 +- .../activity/handler/dailyMealHandler.ts | 2 +- .../servers/activity/handler/gachaHandler.ts | 2 +- .../activity/handler/limitPackageHandler.ts | 2 +- .../activity/handler/luckyTurntableHandler.ts | 2 +- .../activity/handler/newHeroGachaHandler.ts | 2 +- .../activity/handler/popUpShopHandler.ts | 2 +- .../activity/handler/rechargeMoneyHandler.ts | 2 +- .../activity/handler/refreshShopHandler.ts | 2 +- .../handler/selfServiceShopHandler.ts | 2 +- .../activity/handler/sevenDaysHandler.ts | 2 +- .../servers/activity/handler/signInHandler.ts | 2 +- .../activity/handler/taskPassHandler.ts | 2 +- .../activity/handler/timeLimitRankHandler.ts | 2 +- .../activity/handler/treasureHuntHandler.ts | 2 +- .../battle/handler/comBattleHandler.ts | 2 +- .../battle/handler/dailyBattleHandler.ts | 2 +- .../battle/handler/dungeonBattleHandler.ts | 2 +- .../battle/handler/eventBattleHandler.ts | 2 +- .../battle/handler/expeditionBattleHandler.ts | 2 +- .../battle/handler/normalBattleHandler.ts | 2 +- .../app/servers/battle/handler/pvpHandler.ts | 2 +- .../battle/handler/towerBattleHandler.ts | 2 +- .../app/servers/gm/handler/gmRoleHandler.ts | 2 +- .../servers/guild/handler/auctionHandler.ts | 2 +- .../guild/handler/cityActivityHandler.ts | 2 +- .../servers/guild/handler/donateHandler.ts | 2 +- .../servers/guild/handler/guildBossHandler.ts | 2 +- .../app/servers/guild/handler/guildHandler.ts | 2 +- .../guild/handler/guildRefineHandler.ts | 2 +- .../guild/handler/guildTrainHandler.ts | 2 +- .../servers/guild/handler/wishPoolHandler.ts | 2 +- .../app/servers/role/handler/equipHandler.ts | 2 +- .../app/servers/role/handler/friendHandler.ts | 2 +- .../app/servers/role/handler/heroHandler.ts | 2 +- .../app/servers/role/handler/itemHandler.ts | 2 +- .../app/servers/role/handler/mailHandler.ts | 2 +- .../app/servers/role/handler/rankHandler.ts | 2 +- .../app/servers/role/handler/roleHandler.ts | 2 +- .../app/servers/role/handler/shopHandler.ts | 2 +- .../app/servers/role/handler/taskHandler.ts | 2 +- .../services/activity/giftPackageService.ts | 2 +- game-server/app/services/comBattleService.ts | 2 +- .../app/services/{ => role}/rewardService.ts | 56 +++++++++---------- game-server/app/services/roleService.ts | 2 +- game-server/app/services/warRewardService.ts | 2 +- 48 files changed, 75 insertions(+), 75 deletions(-) rename game-server/app/services/{ => role}/rewardService.ts (94%) diff --git a/game-server/app/servers/activity/handler/activityMonopolyHandler.ts b/game-server/app/servers/activity/handler/activityMonopolyHandler.ts index 41cb293d4..5a8de76d0 100644 --- a/game-server/app/servers/activity/handler/activityMonopolyHandler.ts +++ b/game-server/app/servers/activity/handler/activityMonopolyHandler.ts @@ -5,7 +5,7 @@ import { ActivityMonopolyModel, ActivityMonopolyModelType } from '../../../db/Ac import { ActivityMonopolyLandModel, ActivityMonopolyLandModelType } from '../../../db/ActivityMonopolyLand'; import { getPlayerMonopolyData, nextPosition } from '../../../services/activity/monopolyService'; import { random } from 'underscore'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { getPlayerRefreshShopDataByRoundIndex } from '../../../services/activity/refreshShopService'; import { ActivityRefreshShopModel } from '../../../db/ActivityRefreshShop'; diff --git a/game-server/app/servers/activity/handler/dailyCoinHandler.ts b/game-server/app/servers/activity/handler/dailyCoinHandler.ts index 045832c62..64c2c0190 100644 --- a/game-server/app/servers/activity/handler/dailyCoinHandler.ts +++ b/game-server/app/servers/activity/handler/dailyCoinHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession, HandlerService } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { ACTIVITY_RESOURCES_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, ITEM_CHANGE_REASON, STATUS } from '../../../consts'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; import { getPlayerDailyCoinData, mergeData } from '../../../services/activity/dailyCoinService'; import { ConsumeExchangeFormulaItem, CoinRewardFormulaItem } from '../../../domain/activityField/dailyCoinField'; import { ActivityDailyCoinModel } from '../../../db/ActivityDailyCoin'; diff --git a/game-server/app/servers/activity/handler/dailyGiftsHandler.ts b/game-server/app/servers/activity/handler/dailyGiftsHandler.ts index fc2106725..14c5c5ea8 100644 --- a/game-server/app/servers/activity/handler/dailyGiftsHandler.ts +++ b/game-server/app/servers/activity/handler/dailyGiftsHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS, ACTIVITY_RESOURCES_TYPE, ITEM_CHANGE_REASON } from '../../../consts'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; import { getPlayerDailyGiftsData } from '../../../services/activity/dailyGiftsService'; import { DailyGiftItem } from '../../../domain/activityField/dailyGiftsField'; import { ActivityDailyGiftsModel } from '../../../db/ActivityDailyGifts'; diff --git a/game-server/app/servers/activity/handler/dailyMealHandler.ts b/game-server/app/servers/activity/handler/dailyMealHandler.ts index c7722f9e4..72aa71410 100644 --- a/game-server/app/servers/activity/handler/dailyMealHandler.ts +++ b/game-server/app/servers/activity/handler/dailyMealHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { ITEM_CHANGE_REASON, STATUS } from '../../../consts'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; import { getPlayerDailyMealData } from '../../../services/activity/dailyMealService'; import { DailyMealItem } from '../../../domain/activityField/dailyMealField'; import { ActivityDailyMealModel } from '../../../db/ActivityDailyMeal'; diff --git a/game-server/app/servers/activity/handler/gachaHandler.ts b/game-server/app/servers/activity/handler/gachaHandler.ts index 8d11509e8..afc6be553 100644 --- a/game-server/app/servers/activity/handler/gachaHandler.ts +++ b/game-server/app/servers/activity/handler/gachaHandler.ts @@ -7,7 +7,7 @@ import { UserGachaModel } from "../../../db/UserGacha"; import { refreshGacha, getGachaList, getVisitedHeroList, getAllHeroByQuality, GachaPull } from "../../../services/activity/gachaService"; import { RoleModel } from "../../../db/Role"; import { HeroModel } from "../../../db/Hero"; -import { handleCost, createHeroes, addItems } from "../../../services/rewardService"; +import { handleCost, createHeroes, addItems } from "../../../services/role/rewardService"; import { getZeroPointD, getTimeFun } from "../../../pubUtils/timeUtil"; import { UserGachaRecModel } from "../../../db/UserGachaRec"; import { ActivityModel } from "../../../db/Activity"; diff --git a/game-server/app/servers/activity/handler/limitPackageHandler.ts b/game-server/app/servers/activity/handler/limitPackageHandler.ts index cc069d8e9..f5d2ceafa 100644 --- a/game-server/app/servers/activity/handler/limitPackageHandler.ts +++ b/game-server/app/servers/activity/handler/limitPackageHandler.ts @@ -6,7 +6,7 @@ import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../s import { ActivityShopModel } from '../../../db/ActivityShop'; import moment = require('moment'); import { RoleModel } from '../../../db/Role'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; export default function (app: Application) { new HandlerService(app, {}); diff --git a/game-server/app/servers/activity/handler/luckyTurntableHandler.ts b/game-server/app/servers/activity/handler/luckyTurntableHandler.ts index faf8898fe..68c3b4d62 100644 --- a/game-server/app/servers/activity/handler/luckyTurntableHandler.ts +++ b/game-server/app/servers/activity/handler/luckyTurntableHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { ITEM_CHANGE_REASON, STATUS } from '../../../consts'; import { getPlayerLuckyTurntableDataShow, getPlayerLuckyTurntableData } from '../../../services/activity/luckyTurntableService'; -import { addItems, combineItems, handleCost } from '../../../services/rewardService'; +import { addItems, combineItems, handleCost } from '../../../services/role/rewardService'; import { ActivityTurntableModel } from '../../../db/ActivityTurntableRec'; import { pick } from 'underscore'; import { addReward, stringToRewardInter, stringToRewardParam } from '../../../services/activity/giftPackageService'; diff --git a/game-server/app/servers/activity/handler/newHeroGachaHandler.ts b/game-server/app/servers/activity/handler/newHeroGachaHandler.ts index bf1c16b1b..f6f85a2a5 100644 --- a/game-server/app/servers/activity/handler/newHeroGachaHandler.ts +++ b/game-server/app/servers/activity/handler/newHeroGachaHandler.ts @@ -5,7 +5,7 @@ import { getPlayerNewHeroGachaData } from '../../../services/activity/newHeroGac import { RoleModel } from '../../../db/Role'; import { HeroModel } from '../../../db/Hero'; import { GachaPull } from '../../../services/activity/gachaService'; -import { addItems, createHeroes, handleCost } from '../../../services/rewardService'; +import { addItems, createHeroes, handleCost } from '../../../services/role/rewardService'; import { ActivityNewHeroGachaModel } from '../../../db/ActivityNewHeroGacha'; import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { RewardParam } from '../../../domain/activityField/rewardField'; diff --git a/game-server/app/servers/activity/handler/popUpShopHandler.ts b/game-server/app/servers/activity/handler/popUpShopHandler.ts index 673f6bfc6..e1f3b026a 100644 --- a/game-server/app/servers/activity/handler/popUpShopHandler.ts +++ b/game-server/app/servers/activity/handler/popUpShopHandler.ts @@ -7,7 +7,7 @@ import { ActivityPopUpShopModel, ActivityPopUpShopModelType } from '../../../db/ import { PopUpShopData } from '../../../domain/activityField/popUpShopField'; import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { RewardParam } from '../../../domain/activityField/rewardField'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; import moment = require('moment'); import { getActivityById } from '../../../services/activity/activityService'; diff --git a/game-server/app/servers/activity/handler/rechargeMoneyHandler.ts b/game-server/app/servers/activity/handler/rechargeMoneyHandler.ts index c475ef0c2..457d62e54 100644 --- a/game-server/app/servers/activity/handler/rechargeMoneyHandler.ts +++ b/game-server/app/servers/activity/handler/rechargeMoneyHandler.ts @@ -6,7 +6,7 @@ import { RechargeMoneyPool } from '../../../domain/activityField/rechargeMoneyFi import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { RewardParam } from '../../../domain/activityField/rewardField'; import { ActivityRechargeMoneyModel } from '../../../db/ActivityRechargeMoney'; -import { addItems } from '../../../services/rewardService'; +import { addItems } from '../../../services/role/rewardService'; export default function (app: Application) { diff --git a/game-server/app/servers/activity/handler/refreshShopHandler.ts b/game-server/app/servers/activity/handler/refreshShopHandler.ts index 7a6875b72..81e32d19e 100644 --- a/game-server/app/servers/activity/handler/refreshShopHandler.ts +++ b/game-server/app/servers/activity/handler/refreshShopHandler.ts @@ -4,7 +4,7 @@ import { ITEM_CHANGE_REASON, STATUS } from '../../../consts'; import { getPlayerRefreshShopData } from '../../../services/activity/refreshShopService'; import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { ActivityRefreshShopModel } from '../../../db/ActivityRefreshShop'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; export default function (app: Application) { new HandlerService(app, {}); diff --git a/game-server/app/servers/activity/handler/selfServiceShopHandler.ts b/game-server/app/servers/activity/handler/selfServiceShopHandler.ts index 145ba6614..ced66c4fd 100644 --- a/game-server/app/servers/activity/handler/selfServiceShopHandler.ts +++ b/game-server/app/servers/activity/handler/selfServiceShopHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult, splitString } from '../../../pubUtils/util'; import { ITEM_CHANGE_REASON, STATUS, } from '../../../consts'; import { SelfServiceShopData } from '../../../domain/activityField/selfServiceShopField'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; import { ActivitySelfServiceShopModel, ActivitySelfServiceShopModelType } from '../../../db/ActivitySelfServiceShop'; import { ActivitySelfServiceModel } from '../../../db/ActivitySelfService'; import { ActivitySelfServiceGoodsModel } from '../../../db/ActivitySelfServiceGoods'; diff --git a/game-server/app/servers/activity/handler/sevenDaysHandler.ts b/game-server/app/servers/activity/handler/sevenDaysHandler.ts index dd28fdbcd..13bea4ce5 100644 --- a/game-server/app/servers/activity/handler/sevenDaysHandler.ts +++ b/game-server/app/servers/activity/handler/sevenDaysHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS, ACTIVITY_RESOURCES_TYPE, ITEM_CHANGE_REASON } from '../../../consts'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; import { ActivityGrowthModel } from '../../../db/ActivityGrowth'; import { ActivityDailyGiftsModel } from '../../../db/ActivityDailyGifts'; import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService'; diff --git a/game-server/app/servers/activity/handler/signInHandler.ts b/game-server/app/servers/activity/handler/signInHandler.ts index 8b2910082..79c2b88c0 100644 --- a/game-server/app/servers/activity/handler/signInHandler.ts +++ b/game-server/app/servers/activity/handler/signInHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS, ACTIVITY_TYPE, SERVER_OPEN_TIME, ITEM_CHANGE_REASON, } from '../../../consts'; import { canBuyVip, getPlayerSignInData } from '../../../services/activity/signInService'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; import { SignInItem } from '../../../domain/activityField/signInField'; import { ActivitySignInModel } from '../../../db/ActivitySignIn'; import moment = require('moment'); diff --git a/game-server/app/servers/activity/handler/taskPassHandler.ts b/game-server/app/servers/activity/handler/taskPassHandler.ts index beccbdcb9..b87262bb8 100644 --- a/game-server/app/servers/activity/handler/taskPassHandler.ts +++ b/game-server/app/servers/activity/handler/taskPassHandler.ts @@ -8,7 +8,7 @@ import { nowSeconds } from '../../../pubUtils/timeUtil'; import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { ItemInter } from '../../../pubUtils/interface'; import { isNumber, pick } from 'underscore'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; export default function (app: Application) { new HandlerService(app, {}); diff --git a/game-server/app/servers/activity/handler/timeLimitRankHandler.ts b/game-server/app/servers/activity/handler/timeLimitRankHandler.ts index b01972fbc..22576c73e 100644 --- a/game-server/app/servers/activity/handler/timeLimitRankHandler.ts +++ b/game-server/app/servers/activity/handler/timeLimitRankHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { DEBUG_MAGIC_WORD, getRedisKeyByRankType, HERO_SELECT, ITEM_CHANGE_REASON, RANK_TYPE, ROLE_SELECT, STATUS } from '../../../consts'; -import { addItems, combineItems, handleCost } from '../../../services/rewardService'; +import { addItems, combineItems, handleCost } from '../../../services/role/rewardService'; import { ActivityTurntableModel } from '../../../db/ActivityTurntableRec'; import { pick } from 'underscore'; import { addReward, stringToRewardInter, stringToRewardParam } from '../../../services/activity/giftPackageService'; diff --git a/game-server/app/servers/activity/handler/treasureHuntHandler.ts b/game-server/app/servers/activity/handler/treasureHuntHandler.ts index 137c3fb82..8924f31a4 100644 --- a/game-server/app/servers/activity/handler/treasureHuntHandler.ts +++ b/game-server/app/servers/activity/handler/treasureHuntHandler.ts @@ -4,7 +4,7 @@ import { ITEM_CHANGE_REASON, STATUS, } from '../../../consts'; import { getPlayerTreasureHuntData, getTreasureHuntData, getPlayerTreasureHuntShopData, getPlayerTreasureHuntTaskData, getPlayerTreasureHuntTreasureShopData, getPlayerTreasureHuntChallengeData, getPlayerTreasureHuntFirstPageData } from '../../../services/activity/treasureHuntService'; import { ActivityTreasureHuntShopModel } from '../../../db/ActivityTreasureHuntShop'; import { ActivityTreasureHuntTaskModel } from '../../../db/ActivityTreasureHuntTask'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; import { addReward, stringToConsumeParam, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { RewardParam } from '../../../domain/activityField/rewardField'; import { ActivityTreasureHuntTreasureShopModel } from '../../../db/ActivityTreasureHuntTreasureShop'; diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index efe6cfbb5..69649b4ce 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -13,7 +13,7 @@ import { Application, BackendSession } from 'pinus'; import { resResult, getRandSingleEelm, cal } from '../../../pubUtils/util'; import { RoleStatus, ComBattleTeamModel, ComBattleTeamType, BossHp, ComRoleStatusHero } from '../../../db/ComBattleTeam'; import { ItemModel, ItemType } from '../../../db/Item'; -import { addItems, handleCost } from '../../../services/rewardService'; +import { addItems, handleCost } from '../../../services/role/rewardService'; import { checkRoleInQueue, rmRoleFromQueue, setTeamSearchReq } from '../../../services/redisService'; import { getRandBlueprtId, clearComBtlTimer, getFrd, updateRobotHurtByTime, comBtlLvInvalid, clearRobotHurtTimer, setDismissTimer, dismissTeam, handleComBtlProgress, getComBattleFriendAdd, teammateInBlackList, blueprtIdValid, hasEnoughBlueprt, addRoleToTeam, addRoleStToTeam, addValidSearchingRoles, validToJoin, addRobotsToTeam, addRobotsLater, teamIsFullToStart, oneTeamNotInBlack, getAllAssistCnt, checkHasMyTeam } from '../../../services/comBattleService'; import { setAp } from '../../../services/actionPointService'; diff --git a/game-server/app/servers/battle/handler/dailyBattleHandler.ts b/game-server/app/servers/battle/handler/dailyBattleHandler.ts index 824feee30..616333602 100644 --- a/game-server/app/servers/battle/handler/dailyBattleHandler.ts +++ b/game-server/app/servers/battle/handler/dailyBattleHandler.ts @@ -4,7 +4,7 @@ import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; import { RoleModel } from '../../../db/Role'; import { getDailyNum, getDailyBattleList, getDailyBuyCountCost } from '../../../services/dailyBattleService'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; import { getGoldObject } from '../../../pubUtils/itemUtils'; import { gameData } from '../../../pubUtils/data'; import { DEBUG_MAGIC_WORD, ITEM_CHANGE_REASON } from '../../../consts'; diff --git a/game-server/app/servers/battle/handler/dungeonBattleHandler.ts b/game-server/app/servers/battle/handler/dungeonBattleHandler.ts index 857bb0aa5..437b91629 100644 --- a/game-server/app/servers/battle/handler/dungeonBattleHandler.ts +++ b/game-server/app/servers/battle/handler/dungeonBattleHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession } from 'pinus'; import { STATUS } from '../../../consts/statusCode'; import { resResult, shouldRefresh } from '../../../pubUtils/util'; import { RoleModel } from '../../../db/Role'; -import { handleCost } from '../../../services/rewardService'; +import { handleCost } from '../../../services/role/rewardService'; import { getGoldObject } from '../../../pubUtils/itemUtils'; import { getDungeonData, getDungeonBuyCountCost } from '../../../services/dungeonService'; import * as dicParam from '../../../pubUtils/dicParam'; diff --git a/game-server/app/servers/battle/handler/eventBattleHandler.ts b/game-server/app/servers/battle/handler/eventBattleHandler.ts index dc9f473cd..173962347 100644 --- a/game-server/app/servers/battle/handler/eventBattleHandler.ts +++ b/game-server/app/servers/battle/handler/eventBattleHandler.ts @@ -3,7 +3,7 @@ import { EventRecordModel } from '../../../db/EventRecord'; import { RoleModel } from '../../../db/Role'; import { EVENT_STATUS, EVENT_RECORD_STATUS, EVENT_ANSWER_STATUS, TASK_TYPE, DEBUG_MAGIC_WORD, ITEM_CHANGE_REASON } from '../../../consts'; import { checkEventStatus, getEventSuccessStatus, getEvent, checkQuiz, startEvent, refreshEvent, getEventTime } from '../../../services/eventSercive'; -import { addItems } from '../../../services/rewardService'; +import { addItems } from '../../../services/role/rewardService'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; import { checkActivityTask, checkTask } from '../../../services/taskService'; diff --git a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts index 29b720c54..060799371 100644 --- a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts +++ b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts @@ -8,7 +8,7 @@ import { calculateSumCE, genCode, getWarTypeName } from '../../../pubUtils/util' import { getPointRewardStatus, getResetRemainCnt, findOrCreateEnemies, getExpeditionStatus } from '../../../services/expeditionService'; import { DEBUG_MAGIC_WORD, EXPEDITION_WAR_RECORD_STATUS, ITEM_CHANGE_REASON, KING_EXP_RATIO_TYPE, LINEUP_NUM, TASK_TYPE, TA_EVENT } from '../../../consts'; import { WarReward } from '../../../services/warRewardService'; -import { addItems } from '../../../services/rewardService'; +import { addItems } from '../../../services/role/rewardService'; import { getAp, setAp } from '../../../services/actionPointService'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index 32923830d..ebb936111 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -28,7 +28,7 @@ import { reportTAEvent } from '../../../services/sdkService'; import { getVipRegretCnt } from '../../../services/activity/monthlyTicketService'; import { isArray, isNumber } from 'underscore'; import { RewardInter } from '../../../pubUtils/interface'; -import { addItems } from '../../../services/rewardService'; +import { addItems } from '../../../services/role/rewardService'; export default function (app: Application) { new HandlerService(app, {}); diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index 6dbaa5f5b..a3276d29b 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -15,7 +15,7 @@ import { Attack, AttackHero, Defense, DefenseHero, PvpDataReturn } from '../../. import { DEBUG_MAGIC_WORD, FIGURE_UNLOCK_CONDITION, ITEM_CHANGE_REASON, LINEUP_NUM, REDIS_KEY, TASK_TYPE } from '../../../consts'; import { PVP } from '../../../pubUtils/dicParam'; import { getGoldObject } from '../../../pubUtils/itemUtils'; -import { addItems, handleCost, unlockFigure } from '../../../services/rewardService'; +import { addItems, handleCost, unlockFigure } from '../../../services/role/rewardService'; import { pick } from "underscore"; import { HeroModel } from '../../../db/Hero'; import PvpHistoryOpp, { PvpHistoryOppModel } from '../../../db/PvpHistoryOpp'; diff --git a/game-server/app/servers/battle/handler/towerBattleHandler.ts b/game-server/app/servers/battle/handler/towerBattleHandler.ts index c92b7af53..865659bc4 100644 --- a/game-server/app/servers/battle/handler/towerBattleHandler.ts +++ b/game-server/app/servers/battle/handler/towerBattleHandler.ts @@ -8,7 +8,7 @@ import { TowerRecordModel } from './../../../db/TowerRecord'; import { Application, BackendSession } from 'pinus'; import { resResult, genCode, shouldRefresh } from '../../../pubUtils/util'; import { calcuHangUpReward, refreshTasks, treatTask, getRemainTime, getTowerStatus, getHungupRewards, getTasks, checkTaskRewards, getTowerTaskCostGold, getHangSpdUpCostGold, getManyHangSpdUpCostGold, getTaskStatus, checkForbiddenChar, checkAndStartHungUp, createNewTowerRecord, getTowerRecByLv } from '../../../services/battleService'; -import { addItems, handleCost } from '../../../services/rewardService'; +import { addItems, handleCost } from '../../../services/role/rewardService'; import { checkBattleHeroes } from '../../../services/normalBattleService'; import { getGoldObject } from '../../../pubUtils/itemUtils'; import { gameData } from '../../../pubUtils/data'; diff --git a/game-server/app/servers/gm/handler/gmRoleHandler.ts b/game-server/app/servers/gm/handler/gmRoleHandler.ts index 9c844411c..73367dbd3 100644 --- a/game-server/app/servers/gm/handler/gmRoleHandler.ts +++ b/game-server/app/servers/gm/handler/gmRoleHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession, pinus } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; import { getRoleOnlineInfo, updateUserInfo } from '../../../services/redisService'; -import { addItems, createHeroes } from '../../../services/rewardService'; +import { addItems, createHeroes } from '../../../services/role/rewardService'; import { RewardInter } from '../../../pubUtils/interface'; import { gameData, getExpByLv, getHeroExpByLv, getHeroLvByExp, getLvByExp } from '../../../pubUtils/data'; import { RoleModel, RoleType } from '../../../db/Role'; diff --git a/game-server/app/servers/guild/handler/auctionHandler.ts b/game-server/app/servers/guild/handler/auctionHandler.ts index 5b1c234fa..2c62ca259 100644 --- a/game-server/app/servers/guild/handler/auctionHandler.ts +++ b/game-server/app/servers/guild/handler/auctionHandler.ts @@ -5,7 +5,7 @@ import { LotModel } from "../../../db/Lot"; import { ItemReward } from "../../../domain/dbGeneral"; import { genCode, resResult } from "../../../pubUtils/util"; import { auctionStage, calculateDividend, genAuction, sendUngotDividend, startGuildAuction, startWorldAuction, stopAuction, todayGuildBegin, getBasePrice, debugAuctionLots, officialAuctionLots, auctionBidStatus, getMaxPrice, guildBidStatus, getAuction, pushAuctionOver, treatSingleLotTime, treatLotsTime } from "../../../services/auctionService"; -import { addItems, handleCost } from '../../../services/rewardService'; +import { addItems, handleCost } from '../../../services/role/rewardService'; import { getSimpleRoleInfo } from '../../../services/roleService'; import { getRoleOnlineInfo } from '../../../services/redisService'; import { lockData } from '../../../services/redLockService'; diff --git a/game-server/app/servers/guild/handler/cityActivityHandler.ts b/game-server/app/servers/guild/handler/cityActivityHandler.ts index f890c723e..f9e6b09c1 100644 --- a/game-server/app/servers/guild/handler/cityActivityHandler.ts +++ b/game-server/app/servers/guild/handler/cityActivityHandler.ts @@ -11,7 +11,7 @@ import { GuildActivityRecordModel } from "../../../db/GuildActivityRec"; import { nowSeconds, getTimeFun } from "../../../pubUtils/timeUtil"; import { getGoldObject } from "../../../pubUtils/itemUtils"; import { GUILDACTIVITY, SERVER_DEBUG_MODE } from "../../../pubUtils/dicParam"; -import { handleCost } from "../../../services/rewardService"; +import { handleCost } from "../../../services/role/rewardService"; import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; import { checkActivityTask, checkTask } from "../../../services/taskService"; diff --git a/game-server/app/servers/guild/handler/donateHandler.ts b/game-server/app/servers/guild/handler/donateHandler.ts index bcd6f4d0e..0f55877a1 100644 --- a/game-server/app/servers/guild/handler/donateHandler.ts +++ b/game-server/app/servers/guild/handler/donateHandler.ts @@ -6,7 +6,7 @@ import { DonationModel } from '../../../db/Donation'; import { nowSeconds } from '../../../pubUtils/timeUtil'; import { getArmyDonateBaseByLv, getArmyDonateBoxBaseById } from '../../../pubUtils/data'; import { GuildModel } from '../../../db/Guild'; -import { handleCost, addItems } from '../../../services/rewardService'; +import { handleCost, addItems } from '../../../services/role/rewardService'; import { CHAT_SERVER, GUILD_POINT_WAYS } from '../../../consts'; import { addFund, getDonation } from '../../../services/donateService'; import { getUserGuildWithRefActive, refreshUserGuild } from '../../../services/guildService'; diff --git a/game-server/app/servers/guild/handler/guildBossHandler.ts b/game-server/app/servers/guild/handler/guildBossHandler.ts index 448ad7247..931de2615 100644 --- a/game-server/app/servers/guild/handler/guildBossHandler.ts +++ b/game-server/app/servers/guild/handler/guildBossHandler.ts @@ -16,7 +16,7 @@ import { lockData } from '../../../services/redLockService'; import { pushGuildBossSucMsg, getGuildChannelSid } from '../../../services/chatService'; import { checkTask } from '../../../services/taskService'; import { guildInter } from '../../../pubUtils/interface'; -import { addItems, handleCost } from '../../../services/rewardService'; +import { addItems, handleCost } from '../../../services/role/rewardService'; import * as dicParam from '../../../pubUtils/dicParam'; import { getGoldObject } from '../../../pubUtils/itemUtils'; import { RoleModel } from '../../../db/Role'; diff --git a/game-server/app/servers/guild/handler/guildHandler.ts b/game-server/app/servers/guild/handler/guildHandler.ts index 14db3c0e4..0bf5e488d 100644 --- a/game-server/app/servers/guild/handler/guildHandler.ts +++ b/game-server/app/servers/guild/handler/guildHandler.ts @@ -6,7 +6,7 @@ import { checkAuth, joinGuild, getGuildWithRefActive, getUserGuildWithRefActive, import { GuildModel, GuildType, GuildUpdateParam } from '../../../db/Guild'; import { RoleModel, RoleType } from '../../../db/Role'; import { ARMY } from '../../../pubUtils/dicParam'; -import { handleCost, addItems } from '../../../services/rewardService'; +import { handleCost, addItems } from '../../../services/role/rewardService'; import { getGoldObject } from '../../../pubUtils/itemUtils'; import { nowSeconds, getTimeFun, getSeconds } from '../../../pubUtils/timeUtil'; import { GuildListInfo, GuildMemberParam } from '../../../domain/battleField/guild'; diff --git a/game-server/app/servers/guild/handler/guildRefineHandler.ts b/game-server/app/servers/guild/handler/guildRefineHandler.ts index 1d249ec06..d9a4eef4f 100644 --- a/game-server/app/servers/guild/handler/guildRefineHandler.ts +++ b/game-server/app/servers/guild/handler/guildRefineHandler.ts @@ -5,7 +5,7 @@ import { STATUS, GUILD_OPERATE, TASK_TYPE, ITEM_CHANGE_REASON, ITID, CONSUME_TYP import { GuildRefineModel } from '../../../db/GuildRefine'; import { gameData, getArmyDevelopConsumeById, getGoodById } from '../../../pubUtils/data'; import { nowSeconds } from '../../../pubUtils/timeUtil'; -import { handleCost, addItems, checkGoods } from '../../../services/rewardService'; +import { handleCost, addItems, checkGoods } from '../../../services/role/rewardService'; import { GuildModel } from '../../../db/Guild'; import { findIndex, findWhere } from 'underscore'; import { lockData } from '../../../services/redLockService'; diff --git a/game-server/app/servers/guild/handler/guildTrainHandler.ts b/game-server/app/servers/guild/handler/guildTrainHandler.ts index 342ca85db..c9da81f7d 100644 --- a/game-server/app/servers/guild/handler/guildTrainHandler.ts +++ b/game-server/app/servers/guild/handler/guildTrainHandler.ts @@ -12,7 +12,7 @@ import { UserGuildModel } from '../../../db/UserGuild'; import { GuildModel } from '../../../db/Guild'; import { getArmyTrainJuDian, getTrainBaseByLv, gameData } from '../../../pubUtils/data'; import { CURRENCY_BY_TYPE, CURRENCY_TYPE } from '../../../consts/constModules/itemConst'; -import { handleCost, addItems } from '../../../services/rewardService'; +import { handleCost, addItems } from '../../../services/role/rewardService'; import { ARMY } from '../../../pubUtils/dicParam'; import { addActive } from '../../../services/guildService'; import { GuildTrainReportModel } from '../../../db/GuildTrainReport'; diff --git a/game-server/app/servers/guild/handler/wishPoolHandler.ts b/game-server/app/servers/guild/handler/wishPoolHandler.ts index 8ab6f473e..165421b1d 100644 --- a/game-server/app/servers/guild/handler/wishPoolHandler.ts +++ b/game-server/app/servers/guild/handler/wishPoolHandler.ts @@ -5,7 +5,7 @@ import { WishPoolReportModel } from '../../../db/WishPoolReport'; import { resResult, genCode } from '../../../pubUtils/util'; import { ITEM_CHANGE_REASON, STATUS } from '../../../consts'; import { getArmyWishPoolBaseByLv, getGoodById, getWishPoolReward } from '../../../pubUtils/data'; -import { addItems, checkGoods, checkHeroEquips, checkHeroes } from '../../../services/rewardService'; +import { addItems, checkGoods, checkHeroEquips, checkHeroes } from '../../../services/role/rewardService'; import { ITID, CONSUME_TYPE } from '../../../consts/constModules/itemConst'; import { GUILD_STRUCTURE } from '../../../consts/constModules/guildConst'; import { refreshUserGuild, getWishPool, getUserGuildWithRefActive } from '../../../services/guildService'; diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index bfb861a32..4bf608703 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -3,7 +3,7 @@ import { STATUS, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON, TASK_TYPE } from "../../. import { ItemInter, RewardInter } from "../../../pubUtils/interface"; import { resResult, parseGoodStr } from "../../../pubUtils/util"; -import { addItems, handleCost, combineItems, CheckMeterial } from "../../../services/rewardService"; +import { addItems, handleCost, combineItems, CheckMeterial } from "../../../services/role/rewardService"; import { HeroModel, EPlace } from "../../../db/Hero"; import { calPlayerCeAndSave } from "../../../services/playerCeService"; import { gameData, getEquipByJobClassAndEPlace, getNextEquipQuality, getEquipStarIdByEquipId, getNextEquipStar } from "../../../pubUtils/data"; diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index 5a7a3f361..fbe025f2b 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -11,7 +11,7 @@ import { isRoleOnline, getServerName, getRoleOnlineInfo } from "../../../service import { increaseFrdCnt, getRecommendType, sortByBeSentHeart, getApplyList, getFriendList, getMyApplyParam, getMyParamAsFriend } from "../../../services/friendService"; import { FriendPointModel } from "../../../db/FriendPoint"; import { gameData, getDicFriendByLv } from "../../../pubUtils/data"; -import { addItems, handleCost } from "../../../services/rewardService"; +import { addItems, handleCost } from "../../../services/role/rewardService"; import { getFriendPointObject } from "../../../pubUtils/itemUtils"; import { RewardInter } from "../../../pubUtils/interface"; import { FriendPresentLogModel } from '../../../db/FriendPresentLog'; diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index 9f8cddd3d..be80e12a9 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -1,5 +1,5 @@ import { Application, BackendSession, ChannelService, HandlerService, } from 'pinus'; -import { handleCost, addItems, unlockFigure, createHeroes, createHero, CheckMeterial } from '../../../services/rewardService'; +import { handleCost, addItems, unlockFigure, createHeroes, createHero, CheckMeterial } from '../../../services/role/rewardService'; import { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService'; import { resResult, deepCopy, reduceCe } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; diff --git a/game-server/app/servers/role/handler/itemHandler.ts b/game-server/app/servers/role/handler/itemHandler.ts index d1855a9a2..194c77e71 100644 --- a/game-server/app/servers/role/handler/itemHandler.ts +++ b/game-server/app/servers/role/handler/itemHandler.ts @@ -3,7 +3,7 @@ import { STATUS, CONSUME_TYPE, DEBUG_MAGIC_WORD, GIFT_GENERATE_TYPE, ITEM_CHANGE import { RewardInter } from "../../../pubUtils/interface"; import { resResult } from "../../../pubUtils/util"; -import { addItems, handleCost } from "../../../services/rewardService"; +import { addItems, handleCost } from "../../../services/role/rewardService"; import { RoleModel } from "../../../db/Role"; import { gameData } from "../../../pubUtils/data"; import { ITID } from "../../../consts/constModules/itemConst"; diff --git a/game-server/app/servers/role/handler/mailHandler.ts b/game-server/app/servers/role/handler/mailHandler.ts index 5fc5e49a8..21b5cb742 100644 --- a/game-server/app/servers/role/handler/mailHandler.ts +++ b/game-server/app/servers/role/handler/mailHandler.ts @@ -4,7 +4,7 @@ import { GroupMailModel, GroupMailType } from '../../../db/GroupMail'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; import { MAIL_STATUS, GM_MAIL_TYPE } from '../../../consts/constModules/mailConst'; -import { addItems } from '../../../services/rewardService'; +import { addItems } from '../../../services/role/rewardService'; import { checkMailGoods, getMails } from '../../../services/mailService'; import { ServerMailModel, ServerMailType } from '../../../db/ServerMail'; import { MailParam } from '../../../domain/roleField/mail'; diff --git a/game-server/app/servers/role/handler/rankHandler.ts b/game-server/app/servers/role/handler/rankHandler.ts index 527028be3..c74641b47 100644 --- a/game-server/app/servers/role/handler/rankHandler.ts +++ b/game-server/app/servers/role/handler/rankHandler.ts @@ -7,7 +7,7 @@ import { GuildModel } from "../../../db/Guild"; import { Rank, getGeneralRank, getRankFirstReward, getRankInHandler } from "../../../services/rankService"; import { nowSeconds } from "../../../pubUtils/timeUtil"; import { gameData } from "../../../pubUtils/data"; -import { addItems } from "../../../services/rewardService"; +import { addItems } from "../../../services/role/rewardService"; import { HeroModel, HeroUpdate } from "../../../db/Hero"; import { RewardInter } from "../../../pubUtils/interface"; import { GuildRankInfo, RoleAndGuildRankInfo, RoleRankInfo } from "../../../domain/rank"; diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index c00aa655e..79baecbc1 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -3,7 +3,7 @@ import { RoleModel, RoleUpdate } from './../../../db/Role'; import { HeroModel, HeroUpdate } from '../../../db/Hero'; import { resResult, decodeIdCntArrayStr, parseGoodStr, genCode } from '../../../pubUtils/util'; import { Application, BackendSession, pinus, HandlerService, } from 'pinus'; -import { handleCost, addItems } from '../../../services/rewardService'; +import { handleCost, addItems } from '../../../services/role/rewardService'; import { getTitle, getTeraph, gameData, getScollByStar, getFriendLvByExp, getHeroExpByLv, getExpByLv } from '../../../pubUtils/data'; import { SCHOOL, SCROLL, EXTERIOR, SCRIPT } from '../../../pubUtils/dicParam'; import { getAtrrNameById } from '../../../consts/constModules/abilityConst' diff --git a/game-server/app/servers/role/handler/shopHandler.ts b/game-server/app/servers/role/handler/shopHandler.ts index 473e69afe..e06413960 100644 --- a/game-server/app/servers/role/handler/shopHandler.ts +++ b/game-server/app/servers/role/handler/shopHandler.ts @@ -4,7 +4,7 @@ import { parseGoodStr, resResult } from "../../../pubUtils/util"; import { STATUS, GUILD_STRUCTURE, ITID, CONSUME_TYPE, HERO_QUALITY_TYPE, HERO_GROW_MAX, ITEM_CHANGE_REASON } from "../../../consts"; import { DicShopListModel } from "../../../db/DicShopList"; import { UserShopModel } from "../../../db/UserShop"; -import { handleCost, addItems } from "../../../services/rewardService"; +import { handleCost, addItems } from "../../../services/role/rewardService"; import { GuildModel } from "../../../db/Guild"; import { SHOP } from "../../../pubUtils/dicParam"; import { getHonourObject } from "../../../pubUtils/itemUtils"; diff --git a/game-server/app/servers/role/handler/taskHandler.ts b/game-server/app/servers/role/handler/taskHandler.ts index e9e21ae03..c58b0a2e4 100644 --- a/game-server/app/servers/role/handler/taskHandler.ts +++ b/game-server/app/servers/role/handler/taskHandler.ts @@ -3,7 +3,7 @@ import { resResult, parseGoodStr, getRandSingleEelm } from "../../../pubUtils/ut import { STATUS, TASK_FUN_TYPE, SHOP_REFRESH_TYPE, KING_EXP_RATIO_TYPE, DEBUG_MAGIC_WORD, ITEM_CHANGE_REASON, ACTIVITY_TYPE } from "../../../consts"; import { gameData } from "../../../pubUtils/data"; import { UserTaskRecModel } from "../../../db/UserTaskRec"; -import { addItems } from "../../../services/rewardService"; +import { addItems } from "../../../services/role/rewardService"; import { UserTaskModel } from "../../../db/UserTask"; import { nowSeconds, getZeroPointD } from "../../../pubUtils/timeUtil"; import { DicDailyTask, DicAchievement, DicMainTask } from "../../../pubUtils/dictionary/DicTask"; diff --git a/game-server/app/services/activity/giftPackageService.ts b/game-server/app/services/activity/giftPackageService.ts index 6f96d6284..f69947c64 100644 --- a/game-server/app/services/activity/giftPackageService.ts +++ b/game-server/app/services/activity/giftPackageService.ts @@ -1,6 +1,6 @@ import { GIFT_PACKAGE_TYPE, ACTIVITY_RESOURCES_TYPE, ITEM_CHANGE_REASON } from '../../consts'; import { gameData } from '../../pubUtils/data'; -import { addItems, createHeroes } from './../rewardService'; +import { addItems, createHeroes } from '../role/rewardService'; import { RewardParam } from '../../domain/activityField/rewardField'; import { CreateHeroParam } from '../../domain/roleField/hero'; import { DicGiftPackage } from '../../pubUtils/dictionary/DicGiftPackage'; diff --git a/game-server/app/services/comBattleService.ts b/game-server/app/services/comBattleService.ts index 0126f5cb0..1c39dd4c8 100644 --- a/game-server/app/services/comBattleService.ts +++ b/game-server/app/services/comBattleService.ts @@ -18,7 +18,7 @@ import { addUserToChannel } from './roleService'; import { ChannelUser } from '../domain/ChannelUser'; import { getRewardByBlueprtId, gameData, getBossHpByBlueprtId, getDicBlueprtById } from '../pubUtils/data'; import { getZeroPointD, nowSeconds } from '../pubUtils/timeUtil'; -import { handleCost } from './rewardService'; +import { handleCost } from './role/rewardService'; /** * 在给定的品质列表中随机返回一定数量的藏宝图Id diff --git a/game-server/app/services/rewardService.ts b/game-server/app/services/role/rewardService.ts similarity index 94% rename from game-server/app/services/rewardService.ts rename to game-server/app/services/role/rewardService.ts index f3b4e9957..a3eb15ffa 100644 --- a/game-server/app/services/rewardService.ts +++ b/game-server/app/services/role/rewardService.ts @@ -1,33 +1,33 @@ -import { ITID, CONSUME_TYPE, ITEM_TABLE, CURRENCY, CURRENCY_TYPE, MAIL_TYPE, HANDLE_REWARD_TYPE, HERO_SYSTEM_TYPE, CURRENCY_BY_TYPE, ITEM_CHANGE_REASON, TA_USERSET_TYPE, TA_EVENT, POP_UP_SHOP_CONDITION_TYPE } from './../consts'; -import { getRandSingleEelm, resResult } from '../pubUtils/util'; -import { RoleModel, RoleType } from '../db/Role'; -import { setAp } from './actionPointService'; -import { pushCalAllHeroCe, calPlayerCeAndSave } from './playerCeService'; -import { ItemModel, ItemType } from '../db/Item'; -import { STATUS } from '../consts/statusCode'; +import { ITID, CONSUME_TYPE, ITEM_TABLE, CURRENCY, CURRENCY_TYPE, MAIL_TYPE, HANDLE_REWARD_TYPE, HERO_SYSTEM_TYPE, CURRENCY_BY_TYPE, ITEM_CHANGE_REASON, TA_USERSET_TYPE, TA_EVENT, POP_UP_SHOP_CONDITION_TYPE } from '../../consts'; +import { getRandSingleEelm, resResult } from '../../pubUtils/util'; +import { RoleModel, RoleType } from '../../db/Role'; +import { setAp } from '../actionPointService'; +import { pushCalAllHeroCe, calPlayerCeAndSave } from '../playerCeService'; +import { ItemModel, ItemType } from '../../db/Item'; +import { STATUS } from '../../consts/statusCode'; import { pinus } from 'pinus'; -import { addJewels, addBags, addSkin, addFigure, unlockFigure as pubUnlockFigure, transPiece, getGoldObject, getCoinObject, getApObject } from '../pubUtils/itemUtils'; -import { ItemInter, RewardInter, } from '../pubUtils/interface'; -import { gameData } from '../pubUtils/data'; +import { addJewels, addBags, addSkin, addFigure, unlockFigure as pubUnlockFigure, transPiece, getGoldObject, getCoinObject, getApObject } from '../../pubUtils/itemUtils'; +import { ItemInter, RewardInter, } from '../../pubUtils/interface'; +import { gameData } from '../../pubUtils/data'; import { uniq } from 'underscore'; -import { EPlace, HeroModel, HeroType, HeroUpdate } from '../db/Hero'; -import { Figure } from '../domain/dbGeneral'; -import { Rank } from './rankService'; -import { pushTaskUpdate } from './taskService'; -import { CreateHeroParam, HeroShowParam } from '../domain/roleField/hero'; -import { HeroSkin } from '../db/Hero'; -import { errlogger } from '../util/logger'; -import { BAG } from '../pubUtils/dicParam'; -import { sendMailByContent } from './mailService'; -import { SkinUpdate } from '../db/Skin'; -import { getInitHeroById } from './roleService'; -import { getActivities } from './activity/activityService'; -import { reportTAEvent, reportTAUserSet } from './sdkService'; -import { saveCoinChangeLog, saveFigureInfoLog, saveGoldChangeLog, saveItemChangeLog } from '../pubUtils/logUtil'; -import { JewelModel, JewelType } from '../db/Jewel'; -import { updateEplaces } from './equipService'; -import { checkPopUpConditionInCreateHero } from './activity/popUpShopService'; -import { CreateHeroes } from './role/createHero'; +import { EPlace, HeroModel, HeroType, HeroUpdate } from '../../db/Hero'; +import { Figure } from '../../domain/dbGeneral'; +import { Rank } from '../rankService'; +import { pushTaskUpdate } from '../taskService'; +import { CreateHeroParam, HeroShowParam } from '../../domain/roleField/hero'; +import { HeroSkin } from '../../db/Hero'; +import { errlogger } from '../../util/logger'; +import { BAG } from '../../pubUtils/dicParam'; +import { sendMailByContent } from '../mailService'; +import { SkinUpdate } from '../../db/Skin'; +import { getInitHeroById } from '../roleService'; +import { getActivities } from '../activity/activityService'; +import { reportTAEvent, reportTAUserSet } from '../sdkService'; +import { saveCoinChangeLog, saveFigureInfoLog, saveGoldChangeLog, saveItemChangeLog } from '../../pubUtils/logUtil'; +import { JewelModel, JewelType } from '../../db/Jewel'; +import { updateEplaces } from '../equipService'; +import { checkPopUpConditionInCreateHero } from '../activity/popUpShopService'; +import { CreateHeroes } from './createHero'; export class CheckMeterial { private roleId: string; diff --git a/game-server/app/services/roleService.ts b/game-server/app/services/roleService.ts index ae84f99fe..7a4985a63 100644 --- a/game-server/app/services/roleService.ts +++ b/game-server/app/services/roleService.ts @@ -8,7 +8,7 @@ import { SCHOOL } from '../pubUtils/dicParam'; import { gameData } from '../pubUtils/data'; import { SchoolModel } from '../db/School'; import { SclResultInter, SclPosInter, RewardInter, ItemInter } from '../pubUtils/interface'; -import { CheckMeterial } from './rewardService'; +import { CheckMeterial } from './role/rewardService'; import { HeroUpdate } from '../db/Hero'; import { SkinUpdate } from '../db/Skin'; import { Figure } from '../domain/dbGeneral'; diff --git a/game-server/app/services/warRewardService.ts b/game-server/app/services/warRewardService.ts index 7625534d4..a6677524e 100644 --- a/game-server/app/services/warRewardService.ts +++ b/game-server/app/services/warRewardService.ts @@ -6,7 +6,7 @@ import { BattleDropModel } from '../db/BattleDrop'; import { getRandEelmWithWeight, getRandSingleEelm, getReasonByWarType } from '../pubUtils/util'; import { BATTLE_REWARD_TYPE, BLUEPRT_CONST } from '../consts'; -import { addItems, combineItemAndJewels } from './rewardService'; +import { addItems, combineItemAndJewels } from './role/rewardService'; import { RoleModel } from '../db/Role'; import { gameData } from '../pubUtils/data'; import { DicWar } from '../pubUtils/dictionary/DicWar'; From 37d2e6cfa7f280b1bc6d720539a4f9f4b2ef4bc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E8=8E=B9?= Date: Thu, 17 Mar 2022 20:24:20 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E5=B0=86=E4=B8=A4=E7=A7=8D=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=88=9D=E6=AD=A5=E5=90=88=E8=B5=B7=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/handler/activityHandler.ts | 2 +- .../servers/activity/handler/gachaHandler.ts | 2 +- .../servers/activity/remote/activityRemote.ts | 10 +- .../battle/handler/comBattleHandler.ts | 2 +- .../battle/handler/eventBattleHandler.ts | 2 +- .../battle/handler/expeditionBattleHandler.ts | 2 +- .../battle/handler/normalBattleHandler.ts | 2 +- .../app/servers/battle/handler/pvpHandler.ts | 2 +- .../app/servers/chat/handler/chatHandler.ts | 2 +- .../servers/connector/handler/entryHandler.ts | 2 +- .../guild/handler/cityActivityHandler.ts | 2 +- .../servers/guild/handler/donateHandler.ts | 2 +- .../guild/handler/gateActivityHandler.ts | 2 +- .../servers/guild/handler/guildBossHandler.ts | 2 +- .../app/servers/guild/handler/guildHandler.ts | 2 +- .../guild/handler/guildRefineHandler.ts | 2 +- .../guild/handler/guildTrainHandler.ts | 2 +- .../guild/handler/raceActivityHandler.ts | 2 +- .../app/servers/order/handler/orderHandler.ts | 2 +- .../app/servers/role/handler/friendHandler.ts | 2 +- .../app/servers/role/handler/heroHandler.ts | 2 +- .../app/servers/role/handler/roleHandler.ts | 2 +- .../app/servers/role/handler/taskHandler.ts | 18 +- .../app/services/actionPointService.ts | 2 +- .../app/services/activity/activityService.ts | 36 ++- game-server/app/services/battleService.ts | 2 +- game-server/app/services/connectorService.ts | 2 +- game-server/app/services/equipService.ts | 2 +- .../guildActivity/guildActivityService.ts | 2 +- game-server/app/services/guildService.ts | 2 +- .../app/services/normalBattleService.ts | 2 +- game-server/app/services/orderService.ts | 2 +- game-server/app/services/pvpService.ts | 2 +- game-server/app/services/refreshService.ts | 2 +- .../app/services/role/rewardService.ts | 2 +- game-server/app/services/task/taskObj.ts | 270 ++++++++++++++++++ .../app/services/{ => task}/taskService.ts | 32 +-- shared/db/ActivityDailyChallenges.ts | 55 ++-- shared/db/ActivityGrowth.ts | 55 ++-- shared/db/ActivityRefreshTask.ts | 49 +++- shared/db/ActivityThirtyDays.ts | 71 +++-- shared/db/ActivityTreasureHuntTask.ts | 43 +++ shared/db/UserTaskRec.ts | 43 ++- shared/domain/activityField/activityField.ts | 2 +- .../domain/activityField/growthFundField.ts | 4 +- .../domain/activityField/refreshTaskField.ts | 4 +- shared/domain/activityField/sevenDaysField.ts | 8 +- .../domain/activityField/thirtyDaysField.ts | 18 +- .../domain/activityField/treasureHuntField.ts | 8 +- shared/domain/roleField/task.ts | 8 + shared/pubUtils/taskUtil.ts | 5 +- 51 files changed, 653 insertions(+), 150 deletions(-) create mode 100644 game-server/app/services/task/taskObj.ts rename game-server/app/services/{ => task}/taskService.ts (94%) diff --git a/game-server/app/servers/activity/handler/activityHandler.ts b/game-server/app/servers/activity/handler/activityHandler.ts index cffa34459..56fd5000c 100644 --- a/game-server/app/servers/activity/handler/activityHandler.ts +++ b/game-server/app/servers/activity/handler/activityHandler.ts @@ -1,7 +1,7 @@ import { Application, BackendSession, HandlerService, pinus, } from 'pinus'; import { aesEncrypt, aesEncryptcfb, resResult } from '../../../pubUtils/util'; import { ENCRYPT_IV, ENCRYPT_KEY, STATUS, TASK_TYPE } from '../../../consts'; -import { checkActivityTask } from '../../../services/taskService'; +import { checkActivityTask } from '../../../services/task/taskService'; import { ActivityGroupModel } from '../../../db/ActivityGroup'; import { ServerlistModel } from '../../../db/Serverlist'; import { getActivity, getActivityById } from '../../../services/activity/activityService'; diff --git a/game-server/app/servers/activity/handler/gachaHandler.ts b/game-server/app/servers/activity/handler/gachaHandler.ts index afc6be553..7d30a0e15 100644 --- a/game-server/app/servers/activity/handler/gachaHandler.ts +++ b/game-server/app/servers/activity/handler/gachaHandler.ts @@ -11,7 +11,7 @@ import { handleCost, createHeroes, addItems } from "../../../services/role/rewar import { getZeroPointD, getTimeFun } from "../../../pubUtils/timeUtil"; import { UserGachaRecModel } from "../../../db/UserGachaRec"; import { ActivityModel } from "../../../db/Activity"; -import { checkActivityTask, checkTask } from "../../../services/taskService"; +import { checkActivityTask, checkTask } from "../../../services/task/taskService"; import { RECRUIT } from "../../../pubUtils/dicParam"; import { getActivityById } from "../../../services/activity/activityService"; diff --git a/game-server/app/servers/activity/remote/activityRemote.ts b/game-server/app/servers/activity/remote/activityRemote.ts index ab681ca41..5543dd74d 100644 --- a/game-server/app/servers/activity/remote/activityRemote.ts +++ b/game-server/app/servers/activity/remote/activityRemote.ts @@ -2,7 +2,7 @@ import { Application, ChannelService, HandlerService, } from 'pinus'; import { ActivityModel, ActivityModelType } from '../../../db/Activity'; import { ServerlistModel } from '../../../db/Serverlist'; import { reloadResources } from '../../../pubUtils/data'; -import { _getActivitiesByType, _getActivityById, _getActivities } from '../../../services/activity/activityService'; +import { _getActivitiesByType, _getActivityById, _getActivities, _getActivitiesByServerId } from '../../../services/activity/activityService'; import { getServerMainten, setServerMainten, stopServerMainten } from '../../../services/gmService'; import { taflush } from '../../../services/sdkService'; import { ActivityInRemote } from '../../../domain/activityField/activityField'; @@ -173,6 +173,14 @@ export class ActivityRemote { } } + public getActivitiesByServerId(serverId: number) { + try { + return _getActivitiesByServerId(serverId); + } catch(e) { + errlogger.error(`remote ${__filename} \n ${e.stack}`); + } + } + public getActivities() { try { return _getActivities(); diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index 69649b4ce..f73ec5aa6 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -24,7 +24,7 @@ import { pushComBtlTeamMsg, pushFriendTeamInviteMsg, pushNormalItemMsg, pushTeam import { EXTERIOR } from '../../../pubUtils/dicParam'; import { getZeroPointD, getTimeFunD, getSeconds, nowSeconds } from '../../../pubUtils/timeUtil'; import { FriendParams } from '../../../domain/roleField/friend'; -import { checkActivityTask, checkTask, checkTaskInComBattleStart, checkTaskWithArgs, checkTaskWithGoods } from '../../../services/taskService'; +import { checkActivityTask, checkTask, checkTaskInComBattleStart, checkTaskWithArgs, checkTaskWithGoods } from '../../../services/task/taskService'; import { gameData, getWarByBlueprtId } from '../../../pubUtils/data'; import { HeroModel } from '../../../db/Hero'; diff --git a/game-server/app/servers/battle/handler/eventBattleHandler.ts b/game-server/app/servers/battle/handler/eventBattleHandler.ts index 173962347..40fa3ae93 100644 --- a/game-server/app/servers/battle/handler/eventBattleHandler.ts +++ b/game-server/app/servers/battle/handler/eventBattleHandler.ts @@ -6,7 +6,7 @@ import { checkEventStatus, getEventSuccessStatus, getEvent, checkQuiz, startEven import { addItems } from '../../../services/role/rewardService'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; -import { checkActivityTask, checkTask } from '../../../services/taskService'; +import { checkActivityTask, checkTask } from '../../../services/task/taskService'; import { gameData } from '../../../pubUtils/data'; export default function (app: Application) { diff --git a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts index 060799371..93e69d710 100644 --- a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts +++ b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts @@ -13,7 +13,7 @@ import { getAp, setAp } from '../../../services/actionPointService'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; import { calculateWarStar, checkBattleHeroes, roleLevelup } from '../../../services/normalBattleService'; -import { checkActivityTask, checkTask, checkTaskInBattleEnd } from '../../../services/taskService'; +import { checkActivityTask, checkTask, checkTaskInBattleEnd } from '../../../services/task/taskService'; import { gameData } from '../../../pubUtils/data'; import * as dicParam from '../../../pubUtils/dicParam'; import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil'; diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index ebb936111..d4ca5c055 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -19,7 +19,7 @@ import { gameData } from '../../../pubUtils/data'; import { pushMysteryFirstMsg, pushTowerMsg, pushVestigeFirstMsg } from '../../../services/chatService'; import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil'; import { Rank } from '../../../services/rankService'; -import { checkTaskWithWar, checkTaskInBattleEnd, checkActivityTask, checkTaskInBattleSweep } from '../../../services/taskService'; +import { checkTaskWithWar, checkTaskInBattleEnd, checkActivityTask, checkTaskInBattleSweep } from '../../../services/task/taskService'; import { ActivitySelfServiceModel } from '../../../db/ActivitySelfService'; import { getSelfServiceShopActivityData } from '../../../services/activity/selfServiceShopActivityService'; import { challengeDailyGK } from '../../../services/activity/dailyGKService'; diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index a3276d29b..375573698 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -10,7 +10,7 @@ import { PvpDefenseModel, pvpUpdateInter } from '../../../db/PvpDefense'; import { PvpSeasonResultModel } from '../../../db/PvpSeasonResult'; import { PVPConfigModel } from '../../../db/SystemConfig'; import { Rank } from '../../../services/rankService'; -import { checkActivityTask, checkTask, checkTaskInPvpEnd } from '../../../services/taskService'; +import { checkActivityTask, checkTask, checkTaskInPvpEnd } from '../../../services/task/taskService'; import { Attack, AttackHero, Defense, DefenseHero, PvpDataReturn } from '../../../domain/battleField/pvp'; import { DEBUG_MAGIC_WORD, FIGURE_UNLOCK_CONDITION, ITEM_CHANGE_REASON, LINEUP_NUM, REDIS_KEY, TASK_TYPE } from '../../../consts'; import { PVP } from '../../../pubUtils/dicParam'; diff --git a/game-server/app/servers/chat/handler/chatHandler.ts b/game-server/app/servers/chat/handler/chatHandler.ts index f406c2121..2522ed651 100644 --- a/game-server/app/servers/chat/handler/chatHandler.ts +++ b/game-server/app/servers/chat/handler/chatHandler.ts @@ -4,7 +4,7 @@ import { resResult } from '../../../pubUtils/util'; import { DEFAULT_MSG_PER_PAGE, STATUS, TASK_TYPE } from '../../../consts'; import { createAccuseData, createGroupMsg, createPrivateMsg, getPrivateMessages, pushGroupMsgToRoom, pushMsgToRole, updatePrivateMsgReadInfo, recentPrivateChatInfos, recentWorldMsgs, recentSysMsgs, recentGuildMsgs, updatePrivateMsgIsTop, delPrivateMsg } from '../../../services/chatService'; import { getSimpleRoleInfo } from '../../../services/roleService'; -import { checkActivityTask, checkTaskWithArgs } from '../../../services/taskService'; +import { checkActivityTask, checkTaskWithArgs } from '../../../services/task/taskService'; import { RoleModel } from '../../../db/Role'; diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 95923364f..9d77ecb6b 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -16,7 +16,7 @@ import { rmRoleFromQueue, roleLeave, getRoleOnlineInfo, roleLogin } from '../../ import { addRoleToGuildChannel, addRoleToSysChannel, addRoleToWorldChannel, leaveGuildAuctionChannel, leaveGuildChannel, leaveSysChannel, leaveWorldAuctionChannel, leaveWorldChannel, recentGuildMsgs, recentPrivateChatInfos, recentSysMsgs, recentWorldMsgs } from '../../../services/chatService'; import { reportOneOnline, savePlayTime } from '../../../services/authenticateService'; -import { checkTaskWithRole, } from '../../../services/taskService'; +import { checkTaskWithRole, } from '../../../services/task/taskService'; import { pushData, everydayRefresh, kickUser } from '../../../services/connectorService'; // import { setComBtlOnUserLeave } from '../../../services/comBattleService'; import Counter from '../../../db/Counter'; diff --git a/game-server/app/servers/guild/handler/cityActivityHandler.ts b/game-server/app/servers/guild/handler/cityActivityHandler.ts index f9e6b09c1..b325effcf 100644 --- a/game-server/app/servers/guild/handler/cityActivityHandler.ts +++ b/game-server/app/servers/guild/handler/cityActivityHandler.ts @@ -14,7 +14,7 @@ import { GUILDACTIVITY, SERVER_DEBUG_MODE } from "../../../pubUtils/dicParam"; import { handleCost } from "../../../services/role/rewardService"; import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; -import { checkActivityTask, checkTask } from "../../../services/taskService"; +import { checkActivityTask, checkTask } from "../../../services/task/taskService"; import { guildInter } from "../../../pubUtils/interface"; import { dispatch } from "../../../pubUtils/dispatcher"; import { ServerRecordModel } from "../../../db/ServerRecords"; diff --git a/game-server/app/servers/guild/handler/donateHandler.ts b/game-server/app/servers/guild/handler/donateHandler.ts index 0f55877a1..bfc6db323 100644 --- a/game-server/app/servers/guild/handler/donateHandler.ts +++ b/game-server/app/servers/guild/handler/donateHandler.ts @@ -12,7 +12,7 @@ import { addFund, getDonation } from '../../../services/donateService'; import { getUserGuildWithRefActive, refreshUserGuild } from '../../../services/guildService'; import { ARMY } from '../../../pubUtils/dicParam'; import { addActive } from '../../../services/guildService' -import { checkActivityTask, checkTask } from '../../../services/taskService'; +import { checkActivityTask, checkTask } from '../../../services/task/taskService'; import { guildInter } from '../../../pubUtils/interface'; import { lockData } from '../../../services/redLockService'; import { getVipDonateConsume } from '../../../services/activity/monthlyTicketService'; diff --git a/game-server/app/servers/guild/handler/gateActivityHandler.ts b/game-server/app/servers/guild/handler/gateActivityHandler.ts index 5100bf164..40f466667 100644 --- a/game-server/app/servers/guild/handler/gateActivityHandler.ts +++ b/game-server/app/servers/guild/handler/gateActivityHandler.ts @@ -14,7 +14,7 @@ import { UserGuildModel } from "../../../db/UserGuild"; import { GuildActivityCityModel } from "../../../db/GuildActivityCity"; import { Rank } from "../../../services/rankService"; import { getTimeFun, getZeroPointD } from "../../../pubUtils/timeUtil"; -import { checkActivityTask, checkTask } from "../../../services/taskService"; +import { checkActivityTask, checkTask } from "../../../services/task/taskService"; import { guildInter } from "../../../pubUtils/interface"; import { ServerRecordModel } from "../../../db/ServerRecords"; diff --git a/game-server/app/servers/guild/handler/guildBossHandler.ts b/game-server/app/servers/guild/handler/guildBossHandler.ts index 931de2615..77b94bf5b 100644 --- a/game-server/app/servers/guild/handler/guildBossHandler.ts +++ b/game-server/app/servers/guild/handler/guildBossHandler.ts @@ -14,7 +14,7 @@ import { GuildModel } from '../../../db/Guild'; import { gameData, getAuctionRewardByPoolId, getBossByLv } from '../../../pubUtils/data'; import { lockData } from '../../../services/redLockService'; import { pushGuildBossSucMsg, getGuildChannelSid } from '../../../services/chatService'; -import { checkTask } from '../../../services/taskService'; +import { checkTask } from '../../../services/task/taskService'; import { guildInter } from '../../../pubUtils/interface'; import { addItems, handleCost } from '../../../services/role/rewardService'; import * as dicParam from '../../../pubUtils/dicParam'; diff --git a/game-server/app/servers/guild/handler/guildHandler.ts b/game-server/app/servers/guild/handler/guildHandler.ts index 0bf5e488d..f998c9767 100644 --- a/game-server/app/servers/guild/handler/guildHandler.ts +++ b/game-server/app/servers/guild/handler/guildHandler.ts @@ -23,7 +23,7 @@ import { removeBossRank } from '../../../services/guildBossService'; import { removeTrainRank } from '../../../services/guildTrainService'; import { pushGuildNoticeUpdateMsg, pushGuildUpStructureMsg, addRoleToGuildChannel, getGuildChannelSid, createGroupMsg, pushGroupMsgToRoom } from '../../../services/chatService'; import { Rank } from '../../../services/rankService'; -import { checkActivityTask, checkTask } from '../../../services/taskService'; +import { checkActivityTask, checkTask } from '../../../services/task/taskService'; import { guildInter } from '../../../pubUtils/interface'; import * as dicParam from '../../../pubUtils/dicParam'; import { reportTAEvent } from '../../../services/sdkService'; diff --git a/game-server/app/servers/guild/handler/guildRefineHandler.ts b/game-server/app/servers/guild/handler/guildRefineHandler.ts index d9a4eef4f..826bc6de0 100644 --- a/game-server/app/servers/guild/handler/guildRefineHandler.ts +++ b/game-server/app/servers/guild/handler/guildRefineHandler.ts @@ -13,7 +13,7 @@ import { ARMY } from '../../../pubUtils/dicParam'; import { CURRENCY_BY_TYPE, CURRENCY_TYPE } from '../../../consts/constModules/itemConst'; import { checkEquipProduceStructureLv, openGuildRefine, refreshRefinCnt } from '../../../services/guildRefineService'; import { DATA_NAME } from '../../../consts/dataName'; -import { checkTask } from '../../../services/taskService'; +import { checkTask } from '../../../services/task/taskService'; import { guildInter } from '../../../pubUtils/interface'; import { DicArmyDevelopConsume } from '../../../pubUtils/dictionary/DicArmyDevelopConsume'; diff --git a/game-server/app/servers/guild/handler/guildTrainHandler.ts b/game-server/app/servers/guild/handler/guildTrainHandler.ts index c9da81f7d..2427f2641 100644 --- a/game-server/app/servers/guild/handler/guildTrainHandler.ts +++ b/game-server/app/servers/guild/handler/guildTrainHandler.ts @@ -18,7 +18,7 @@ import { addActive } from '../../../services/guildService'; import { GuildTrainReportModel } from '../../../db/GuildTrainReport'; import { DATA_NAME } from '../../../consts/dataName'; import { pushGuildTrainSucMsg } from '../../../services/chatService'; -import { checkActivityTask, checkTask } from '../../../services/taskService'; +import { checkActivityTask, checkTask } from '../../../services/task/taskService'; import { sendPopUpActivityData } from '../../../services/guildActivity/guildActivityService'; import { guildInter, RewardInter } from '../../../pubUtils/interface'; import { getGuildTrainGkInfo } from '../../../pubUtils/data'; diff --git a/game-server/app/servers/guild/handler/raceActivityHandler.ts b/game-server/app/servers/guild/handler/raceActivityHandler.ts index 705ecd5fa..44414322c 100644 --- a/game-server/app/servers/guild/handler/raceActivityHandler.ts +++ b/game-server/app/servers/guild/handler/raceActivityHandler.ts @@ -7,7 +7,7 @@ import { GuildActivityRecordModel } from "../../../db/GuildActivityRec"; import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec"; import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; -import { checkActivityTask, checkTask } from "../../../services/taskService"; +import { checkActivityTask, checkTask } from "../../../services/task/taskService"; import { guildInter } from "../../../pubUtils/interface"; import { getGuildChannelSid } from "../../../services/chatService"; import { ServerRecordModel } from "../../../db/ServerRecords"; diff --git a/game-server/app/servers/order/handler/orderHandler.ts b/game-server/app/servers/order/handler/orderHandler.ts index bccc87985..d00dcd2c7 100644 --- a/game-server/app/servers/order/handler/orderHandler.ts +++ b/game-server/app/servers/order/handler/orderHandler.ts @@ -10,7 +10,7 @@ import { applyOrder37 } from '../../../services/pay/37Pay'; import { settleOrder, settleOrderAli, settleOrderWx } from '../../../services/orderService'; import { addRechargeMoney } from '../../../services/activity/rechargeMoneyService'; import { addVipRechargeMoney } from '../../../services/activity/vipRechargeMoneyService'; -import { checkActivityTask } from '../../../services/taskService'; +import { checkActivityTask } from '../../../services/task/taskService'; import { getActivityById } from '../../../services/activity/activityService'; import { reportTAEvent } from '../../../services/sdkService'; diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index fbe025f2b..c3429f0a5 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -21,7 +21,7 @@ import { FRIEND } from "../../../pubUtils/dicParam"; import { PlayerDetail, PlayerDetailHero } from "../../../domain/battleField/guild"; import { createPrivateMsg, pushMsgToRole, pushPresent } from "../../../services/chatService"; import { Rank } from "../../../services/rankService"; -import { checkTaskWithRoles, checkTask, checkActivityTask } from "../../../services/taskService"; +import { checkTaskWithRoles, checkTask, checkActivityTask } from "../../../services/task/taskService"; import { ComBattleTeamModel } from "../../../db/ComBattleTeam"; import { JewelModel } from "../../../db/Jewel"; diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index be80e12a9..0df6bf309 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -13,7 +13,7 @@ import { getDropItems, FIGURE_UNLOCK_CONDITION } from '../../../consts/constModu import { pushComposeOrangeHero, pushHeroQualityUpMsg, pushHeroStarMax, pushHeroWakeUp } from '../../../services/chatService'; import { calculatetopLineup } from '../../../pubUtils/playerCe'; import { PvpDefenseModel } from '../../../db/PvpDefense'; -import { checkTaskWithHero, checkTask, checkActivityTask } from '../../../services/taskService'; +import { checkTaskWithHero, checkTask, checkActivityTask } from '../../../services/task/taskService'; import { isNumber, pick } from 'underscore'; import { updateEplaces } from '../../../services/equipService'; import { addConsumeToHero } from '../../../services/roleService'; diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 79baecbc1..886cd6686 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -16,7 +16,7 @@ import { HERO_SYSTEM_TYPE, LINEUP_NUM, ROLE_SELECT, REDIS_KEY, TASK_TYPE, DEFAUL import { checkBattleHeroesByHid, roleLevelup } from '../../../services/normalBattleService'; import { Rank } from '../../../services/rankService'; import { updateUserInfo } from '../../../services/redisService'; -import { checkTaskWithHero, checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/taskService'; +import { checkTaskWithHero, checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/task/taskService'; import { getGoldObject, getCoinObject } from '../../../pubUtils/itemUtils'; import { RScriptRecordModel } from '../../../db/RScriptRecord'; import { SkinModel, SkinUpdate } from '../../../db/Skin'; diff --git a/game-server/app/servers/role/handler/taskHandler.ts b/game-server/app/servers/role/handler/taskHandler.ts index c58b0a2e4..6a8384ee9 100644 --- a/game-server/app/servers/role/handler/taskHandler.ts +++ b/game-server/app/servers/role/handler/taskHandler.ts @@ -1,13 +1,13 @@ import { Application, BackendSession, pinus, HandlerService, } from "pinus"; import { resResult, parseGoodStr, getRandSingleEelm } from "../../../pubUtils/util"; -import { STATUS, TASK_FUN_TYPE, SHOP_REFRESH_TYPE, KING_EXP_RATIO_TYPE, DEBUG_MAGIC_WORD, ITEM_CHANGE_REASON, ACTIVITY_TYPE } from "../../../consts"; +import { STATUS, TASK_FUN_TYPE, SHOP_REFRESH_TYPE, KING_EXP_RATIO_TYPE, DEBUG_MAGIC_WORD, ITEM_CHANGE_REASON, ACTIVITY_TYPE, TASK_TYPE } from "../../../consts"; import { gameData } from "../../../pubUtils/data"; import { UserTaskRecModel } from "../../../db/UserTaskRec"; import { addItems } from "../../../services/role/rewardService"; import { UserTaskModel } from "../../../db/UserTask"; import { nowSeconds, getZeroPointD } from "../../../pubUtils/timeUtil"; import { DicDailyTask, DicAchievement, DicMainTask } from "../../../pubUtils/dictionary/DicTask"; -import { getMainTask, refDailyTaskBox, removeHistoryTask, getCurTask, checkTask, getPvpTask } from "../../../services/taskService"; +import { getMainTask, refDailyTaskBox, removeHistoryTask, getCurTask, checkTask, getPvpTask } from "../../../services/task/taskService"; import { TASK } from "../../../pubUtils/dicParam"; import { ActivityTaskPointModel, ActivityTaskPointModelType } from "../../../db/ActivityTaskPoint"; import { ItemInter, RewardInter } from "../../../pubUtils/interface"; @@ -15,6 +15,8 @@ import { RoleModel } from "../../../db/Role"; import { roleLevelup } from "../../../services/normalBattleService"; import _ = require("underscore"); import { addActvityTaskPoint } from "../../../services/activity/activityService"; +import { CheckTask } from "../../../services/task/taskObj"; +import { ServerlistModel } from "../../../db/Serverlist"; export default function (app: Application) { new HandlerService(app, {}); @@ -323,4 +325,16 @@ export class ShopHandler { console.log('******', _.isEqual([1,2], [1,2,2])) return resResult(STATUS.SUCCESS, { tasks: [...gameData.taskType]}); } + + async test(msg: { magicWord: string }, session: BackendSession) { + let roleId = session.get('roleId'); + let serverId = session.get('serverId'); + let sid = session.get('sid'); + let role = await RoleModel.findByRoleId(roleId); + let server = await ServerlistModel.findByServerId(serverId); + let task = new CheckTask(serverId, roleId, TASK_TYPE.LOGIN_SUM, role.createTime, server.openTime); + task.param.setRole(role); + task.check(1, sid); + return resResult(STATUS.SUCCESS) + } } \ No newline at end of file diff --git a/game-server/app/services/actionPointService.ts b/game-server/app/services/actionPointService.ts index 4f8dc7a41..12cfba0ab 100644 --- a/game-server/app/services/actionPointService.ts +++ b/game-server/app/services/actionPointService.ts @@ -4,7 +4,7 @@ import { ActionPointModel, ActionPointType } from '../db/ActionPoint'; import { TASK_TYPE, STATUS, TA_EVENT, ITEM_CHANGE_REASON } from '../consts'; -import { checkActivityTask, checkTask } from './taskService'; +import { checkActivityTask, checkTask } from './task/taskService'; import { getDicApByLv } from '../pubUtils/data'; import { pinus } from 'pinus'; import { resResult, shouldRefresh } from '../pubUtils/util'; diff --git a/game-server/app/services/activity/activityService.ts b/game-server/app/services/activity/activityService.ts index 0909c5155..4385e5078 100644 --- a/game-server/app/services/activity/activityService.ts +++ b/game-server/app/services/activity/activityService.ts @@ -235,13 +235,15 @@ export async function getActivityById(activityId: number) { export async function getActivitiesByType(serverId: number, type: number) { let serverType = pinus.app.getServerType(); + let activities: ActivityInRemote[] = []; if(serverType == 'activity') { - return _getActivitiesByType(serverId, type); + activities = _getActivitiesByType(serverId, type); } else { let servers = pinus.app.getServersByType('activity'); let server = getRandSingleEelm(servers); - return await pinus.app.rpc.activity.activityRemote.getActivitiesByType.toServer(server.id, serverId, type); + activities = await pinus.app.rpc.activity.activityRemote.getActivitiesByType.toServer(server.id, serverId, type); } + return activities.map(transActivityInRemoteToModelType); } export async function getActivities() { @@ -255,6 +257,19 @@ export async function getActivities() { } } +export async function getActivityByServerId(serverId: number) { + let activities: ActivityInRemote[] = []; + let serverType = pinus.app.getServerType(); + if(serverType == 'activity') { + activities = _getActivitiesByServerId(serverId); + } else { + let servers = pinus.app.getServersByType('activity'); + let server = getRandSingleEelm(servers); + activities = await pinus.app.rpc.activity.activityRemote.getActivitiesByServerId.toServer(server.id, serverId); + } + return activities.map(transActivityInRemoteToModelType); +} + export function _getActivityById(activityId: number) { return pinus.app.get('activities')?.get(activityId); } @@ -262,11 +277,24 @@ export function _getActivityById(activityId: number) { export function _getActivitiesByType(serverId: number, type: number) { let activityByType = pinus.app.get('activityByType')?.get(serverId)?.get(type)||[]; let activities: Map = pinus.app.get('activities'); - let result: ActivityModelType[] = []; + let result: ActivityInRemote[] = []; for(let activityId of activityByType) { let activity = activities.get(activityId); if(activity && activity.beginTime <= Date.now()) { - result.push(transActivityInRemoteToModelType(activity)); + result.push(activity); + } + } + return result; +} + +export function _getActivitiesByServerId(serverId: number) { + let activityByServerId = pinus.app.get('activityByServer')?.get(serverId)||[] + let activities: Map = pinus.app.get('activities'); + let result: ActivityInRemote[] = []; + for(let activityId of activityByServerId) { + let activity = activities.get(activityId); + if(activity && activity.beginTime <= Date.now()) { + result.push(activity); } } return result; diff --git a/game-server/app/services/battleService.ts b/game-server/app/services/battleService.ts index 0893c4d78..28acc8da1 100644 --- a/game-server/app/services/battleService.ts +++ b/game-server/app/services/battleService.ts @@ -9,7 +9,7 @@ import { STATUS } from '../consts/statusCode'; import { HangUpSpdUpRecModel } from '../db/HangUpSpdUpRec'; import { TaskHero, TowerTaskRecModel, TowerTaskRecType } from '../db/TowerTaskRec'; import { Rank } from './rankService'; -import { checkActivityTask, checkTask } from './taskService'; +import { checkActivityTask, checkTask } from './task/taskService'; import { getRandExpedition, gameData } from '../pubUtils/data'; import { ItemInter, RewardInter } from '../pubUtils/interface'; import { getTimeFunM } from '../pubUtils/timeUtil'; diff --git a/game-server/app/services/connectorService.ts b/game-server/app/services/connectorService.ts index 3ed76229b..b856bf7b4 100644 --- a/game-server/app/services/connectorService.ts +++ b/game-server/app/services/connectorService.ts @@ -3,7 +3,7 @@ */ import { getMails } from './mailService'; import { recentGuildMsgs, recentPrivateChatInfos, recentSysMsgs, recentWorldMsgs } from './chatService'; -import { getCurTask, getPvpTask } from './taskService'; +import { getCurTask, getPvpTask } from './task/taskService'; import { RoleType } from '../db/Role'; import { Application, FrontendOrBackendSession, pinus, RpcClient } from 'pinus'; diff --git a/game-server/app/services/equipService.ts b/game-server/app/services/equipService.ts index ce8b59a1c..658891379 100644 --- a/game-server/app/services/equipService.ts +++ b/game-server/app/services/equipService.ts @@ -3,7 +3,7 @@ import { EPlace, Stone } from "../db/Hero"; import { gameData, getRandEffectByGroupAndLevel } from "../pubUtils/data"; import { JewelType, RandSe } from '../db/Jewel'; import { getJewelRandSe } from '../pubUtils/itemUtils'; -import { checkActivityTask, checkTask, checkTaskWithEplaces, checkTaskWithEplace } from './taskService'; +import { checkActivityTask, checkTask, checkTaskWithEplaces, checkTaskWithEplace } from './task/taskService'; import { TASK_TYPE } from '../consts'; import { DicRandomEffectPool } from '../pubUtils/dictionary/DicRandomEffectPool'; diff --git a/game-server/app/services/guildActivity/guildActivityService.ts b/game-server/app/services/guildActivity/guildActivityService.ts index 69365be2a..36b87df18 100644 --- a/game-server/app/services/guildActivity/guildActivityService.ts +++ b/game-server/app/services/guildActivity/guildActivityService.ts @@ -26,7 +26,7 @@ import { BossInstanceModel } from "../../db/BossInstance"; import { UserGuildModel } from "../../db/UserGuild"; import { raceActivityEnd } from "../timeTaskService"; import { addActive } from "../guildService"; -import { checkTask, checkActivityTask } from "../taskService"; +import { checkTask, checkActivityTask } from "../task/taskService"; import { ActivePlayer, GuildRecord, ServerRecordModel } from "../../db/ServerRecords"; import { Attack } from "../../domain/battleField/pvp"; diff --git a/game-server/app/services/guildService.ts b/game-server/app/services/guildService.ts index ed7a0655e..e796bb05d 100644 --- a/game-server/app/services/guildService.ts +++ b/game-server/app/services/guildService.ts @@ -16,7 +16,7 @@ import { ErrLogModel } from '../db/ErrLog'; import { DATA_NAME } from '../consts/dataName'; import { addRoleToGuildChannel } from "./chatService"; import { Rank } from "./rankService"; -import { checkActivityTask, checkTask } from "./taskService"; +import { checkActivityTask, checkTask } from "./task/taskService"; import { CounterModel } from "../db/Counter"; import { getAuction } from "./auctionService"; import { changeGuildActivity } from "./activity/guildPayService"; diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index c6d295b0d..a89509f33 100644 --- a/game-server/app/services/normalBattleService.ts +++ b/game-server/app/services/normalBattleService.ts @@ -8,7 +8,7 @@ import { FUNC_OPT_TYPE, TASK_TYPE, WAR_TYPE, STATUS, KING_EXP_RATIO_TYPE, ITEM_C import { BackendSession, pinus } from 'pinus'; import { REDIS_KEY } from '../consts'; import { Rank } from './rankService'; -import { checkActivityTask, checkTask } from './taskService'; +import { checkActivityTask, checkTask } from './task/taskService'; import { accomplishTask } from '../pubUtils/taskUtil'; import { RScriptRecordModel } from '../db/RScriptRecord'; import { setAp } from './actionPointService'; diff --git a/game-server/app/services/orderService.ts b/game-server/app/services/orderService.ts index 1b71ceb46..eadab397e 100644 --- a/game-server/app/services/orderService.ts +++ b/game-server/app/services/orderService.ts @@ -22,7 +22,7 @@ import { resResult } from '../pubUtils/util'; import { checkOrderWX } from './pay/weixinPay'; import { addRechargeMoney } from './activity/rechargeMoneyService'; import { addVipRechargeMoney } from './activity/vipRechargeMoneyService'; -import { checkActivityTask } from './taskService'; +import { checkActivityTask } from './task/taskService'; import { checkOrderALI } from './pay/aliPay'; import { getRoleOnlineInfo } from './redisService'; import { PayCallback37Data } from '../domain/sdk'; diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index babda80da..9af308e39 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -22,7 +22,7 @@ import { Rank } from './rankService'; import { CounterModel } from '../db/Counter'; import { DicRankRewads } from '../pubUtils/dictionary/DicPvpRankReward'; import { PvpSeasonResultModel, PvpSeasonResultType } from '../db/PvpSeasonResult'; -import { checkTask } from '../services/taskService'; +import { checkTask } from './task/taskService'; import { sendMailByContent } from './mailService'; import { RoleRankInfo } from '../domain/rank'; import { reportTAEvent } from './sdkService'; diff --git a/game-server/app/services/refreshService.ts b/game-server/app/services/refreshService.ts index 67000a7f2..92875a9f8 100644 --- a/game-server/app/services/refreshService.ts +++ b/game-server/app/services/refreshService.ts @@ -3,7 +3,7 @@ import { STATUS } from '../consts/statusCode'; import { resResult, shouldRefresh, shouldRefreshWeek } from '../pubUtils/util'; import { nowSeconds } from "../pubUtils/timeUtil"; // import { RoleModel } from '../db/Role'; -import { refDailyTask, refDailyTaskBox } from './taskService' +import { refDailyTask, refDailyTaskBox } from './task/taskService' // import { EVENT_STATUS, FUNCS_ID } from "../consts"; // import { startEvent } from "./eventSercive"; import * as dicParam from '../pubUtils/dicParam'; diff --git a/game-server/app/services/role/rewardService.ts b/game-server/app/services/role/rewardService.ts index a3eb15ffa..a837224e8 100644 --- a/game-server/app/services/role/rewardService.ts +++ b/game-server/app/services/role/rewardService.ts @@ -13,7 +13,7 @@ import { uniq } from 'underscore'; import { EPlace, HeroModel, HeroType, HeroUpdate } from '../../db/Hero'; import { Figure } from '../../domain/dbGeneral'; import { Rank } from '../rankService'; -import { pushTaskUpdate } from '../taskService'; +import { pushTaskUpdate } from '../task/taskService'; import { CreateHeroParam, HeroShowParam } from '../../domain/roleField/hero'; import { HeroSkin } from '../../db/Hero'; import { errlogger } from '../../util/logger'; diff --git a/game-server/app/services/task/taskObj.ts b/game-server/app/services/task/taskObj.ts new file mode 100644 index 000000000..5ff80e536 --- /dev/null +++ b/game-server/app/services/task/taskObj.ts @@ -0,0 +1,270 @@ +import { pinus } from "pinus"; +import { ACTIVITY_TYPE, STATUS, TASK_SUM_TYPE, TASK_TYPE } from "../../consts"; +import { ActivityBuyRecordsModel } from "../../db/ActivityBuyRecords"; +import { ActivityDailyChallengesModel } from "../../db/ActivityDailyChallenges"; +import { ActivityGrowthModel } from "../../db/ActivityGrowth"; +import { ActivityGrowthFundModel } from "../../db/ActivityGrowthFund"; +import { ActivityRefreshTaskModel } from "../../db/ActivityRefreshTask"; +import { ActivityThirtyDaysModel } from "../../db/ActivityThirtyDays"; +import { ActivityTreasureHuntTaskModel } from "../../db/ActivityTreasureHuntTask"; +import { RoleType } from "../../db/Role"; +import { ServerTempModel, ServerTempModelType } from "../../db/ServerTemp"; +import { UserTaskRecModel } from "../../db/UserTaskRec"; +import { GrowthFundData } from "../../domain/activityField/growthFundField"; +import { RefreshTaskData } from "../../domain/activityField/refreshTaskField"; +import { SevenDaysData } from "../../domain/activityField/sevenDaysField"; +import { ThirtyDaysData } from "../../domain/activityField/thirtyDaysField"; +import { TreasureHuntData } from "../../domain/activityField/treasureHuntField"; +import { TaskListReturn, UpdateTaskParam } from "../../domain/roleField/task"; +import { gameData } from "../../pubUtils/data"; +import { getZeroPoint } from "../../pubUtils/timeUtil"; +import { resResult } from "../../pubUtils/util"; +import { getActivities, getActivitiesByType, getActivityByServerId } from "../activity/activityService"; +import { getRoleOnlineInfo } from "../redisService"; + +/** + * @class CheckTask + * @classdesc 检查某个玩家任务的达成情况 + */ +export class CheckTask { + serverId: number; // 区id + roleId: string; // 玩家id + taskType: TASK_TYPE; // 任务type + roleCreateTime: number; // 玩家的创建时间 + serverCreateTime: number; // 服务器的创建时间 + + param: TaskParam; // 检查任务时传入的参数 + + treasureHuntTemp: ServerTempModelType; + + constructor(serverId: number, roleId: string, taskType: TASK_TYPE, roleCreateTime: number, serverCreateTime: number) { + this.serverId = serverId; + this.roleId = roleId; + this.taskType = taskType; + this.roleCreateTime = roleCreateTime; + this.serverCreateTime = serverCreateTime; + this.param = new TaskParam(); + } + + /** + * @description 检查任务的主程序 + */ + public async check(count: number, sid: string) { + let { taskType, roleId, serverId, roleCreateTime, serverCreateTime } = this; + let dicTaskTypeDesc = gameData.taskDescByType.get(taskType); + let taskPushMessages: TaskListReturn[] = []; + let activityTaskPushMessages = []; + + // 检查一般任务 + let dicTasks = gameData.taskType.get(taskType); + for (let dicTask of dicTasks) { + + let taskUpdateParam = this.checkIsMatch(dicTask.taskParam, count); + if (taskUpdateParam) { + let rec = await UserTaskRecModel.checkAndUpdateTask(roleId, dicTask.type, taskType, dicTask.group, taskUpdateParam); + if (!rec) continue; + if (rec.received && rec.received.includes(dicTask.id)) continue; // 已领取,不再推送 + let received = rec.received || []; + taskPushMessages.push({ type: dicTask.type, id: dicTask.id, count: rec.count, received: received.includes(dicTask.id) }); + + } + } + + // 检查活动任务 + let activities = await getActivityByServerId(serverId); + for(let activity of activities) { + let { activityId, type: activityType } = activity; + switch(activityType) { + case ACTIVITY_TYPE.SEVEN_DAY: + case ACTIVITY_TYPE.FOURTEEN_DAY://十四天乐活动 28 + case ACTIVITY_TYPE.COMMON_SEVEN_DAY://通用七天乐活动 29 + { + //成长活动统计 + let playerData = new SevenDaysData(activity, roleCreateTime, serverCreateTime); + let growthTaskArray = playerData.growth.findTaskByType(taskType); // 所有任务 + for (let task of growthTaskArray) { + let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + if(taskUpdateParam) { + let rec = await ActivityGrowthModel.checkAndUpdateTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); + if(!rec) continue; + activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "growth" }); + } + } + //今日挑战统计 + let dailyChallengeTaskArray = playerData.dailyChallenge.findTaskByType(taskType); + for (let task of dailyChallengeTaskArray) { + if(dicTaskTypeDesc.sumType == TASK_SUM_TYPE.DO && task.dayIndex != playerData.today()) { + continue; + } + let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + if(taskUpdateParam) { + let rec = await ActivityDailyChallengesModel.checkAndUpdateTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); + if(!rec) continue; + activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "daily" }); + } + } + break; + } + case ACTIVITY_TYPE.REFRESH_TASK: + { + // 通用的刷新任务 + let taskActivity = new RefreshTaskData(activity, roleCreateTime, serverCreateTime); + let taskArray = taskActivity.findTaskByType(taskType); + for (let task of taskArray) { + let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + if(taskUpdateParam) { + let rec = await ActivityRefreshTaskModel.checkAndUpdateTask(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, taskUpdateParam); + if(!rec) continue; + activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId }); + } + } + break; + } + case ACTIVITY_TYPE.TREASURE_HUNT: + { + // 寻宝奇兵任务 + let tempData = await this.getTreasureHuntTemp(); + if(tempData && tempData.huntActivityId == activityId) { + let playerData = new TreasureHuntData(activity, roleCreateTime, serverCreateTime); + let taskArray = playerData.tasks.findItemByTaskType(taskType); + for (let task of taskArray) { + let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + if(taskUpdateParam) { + let rec = await ActivityTreasureHuntTaskModel.checkAndUpdateTask(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex, taskUpdateParam); + if(!rec) continue; + activityTaskPushMessages.push({ ...task, totalCount: rec.totalCount, activityId }); + } + } + } + break; + } + case ACTIVITY_TYPE.THIRTY_DAYS: + { + //30天任务统计 + let thirtyDaysActivity = new ThirtyDaysData(activity, roleCreateTime, serverCreateTime); + let taskArray = thirtyDaysActivity.findTaskByType(taskType); + for (let task of taskArray) { + let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + if(taskUpdateParam) { + let rec = await ActivityThirtyDaysModel.checkAndUpdateTask(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, taskUpdateParam); + if(!rec) continue; + activityTaskPushMessages.push({ ...task, totalCount: rec.totalCount, activityId }); + } + } + break; + } + case ACTIVITY_TYPE.GROWTH_FUND_MAIN: + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP: + { + //主线成长基金 + if(taskType != TASK_TYPE.BATTLE_MAIN) continue; + + let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime); + let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, roleId); + growthFundActivity.setPlayerRecords(playerRecords); + if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 + let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); + growthFundActivity.initBuyRecords(buyRecords); + } + let taskArray = growthFundActivity.unLockItem(this.param.warId); + //推送 + activityTaskPushMessages.push(...taskArray); + break; + } + case ACTIVITY_TYPE.GROWTH_FUND_TOWER: + case ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP: + { + //镇念塔成长基金 + if(taskType != TASK_TYPE.BATTLE_TOWER_LV) continue; + + let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime); + let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, roleId); + growthFundActivity.setPlayerRecords(playerRecords); + if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 + let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); + growthFundActivity.initBuyRecords(buyRecords); + } + let taskArray = growthFundActivity.unLockItem(this.param.towerLv); + //推送 + activityTaskPushMessages.push(...taskArray); + break; + } + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE: + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP: + { + //精英成长基金 + if(taskType != TASK_TYPE.BATTLE_MAIN_ELITE) continue; + + let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime); + let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, roleId); + growthFundActivity.setPlayerRecords(playerRecords); + if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 + let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); + growthFundActivity.initBuyRecords(buyRecords); + } + let taskArray = growthFundActivity.unLockItem(this.param.warId); + //推送 + activityTaskPushMessages.push(...taskArray); + break; + } + } + } + + if (taskPushMessages.length > 0) { + if (!sid) { + let onlineUser = await getRoleOnlineInfo(roleId); + sid = onlineUser.sid; + } + if (!!sid) { + let uids = [{ uid: roleId, sid }]; + pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, taskPushMessages), uids); + } + } + if (activityTaskPushMessages?.length > 0) { + if (!sid) { + let onlineUser = await getRoleOnlineInfo(roleId); + sid = onlineUser.sid; + } + if (!!sid) { + let uids = [{ uid: roleId, sid }]; + pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, activityTaskPushMessages), uids); + } + } + } + + public checkIsMatch(dicTaskParam: number[], count: number): UpdateTaskParam { + let param = this.param; + switch(this.taskType) { + case TASK_TYPE.LOGIN_SUM: + { + let today = getZeroPoint(); + if (today > param.role.loginTime) { + return { inc: count } + } + } + } + } + + private async getTreasureHuntTemp() { + if(this.treasureHuntTemp) return this.treasureHuntTemp; + + let tempData: ServerTempModelType = await ServerTempModel.findData(this.serverId); + if (tempData) { + this.treasureHuntTemp = tempData; + return tempData + } else { + return null + } + } +} + +class TaskParam { + role?: RoleType; // 玩家数据 + warId?: number; + towerLv?: number; + + public setRole(role: RoleType) { + this.role = role; + } + +} diff --git a/game-server/app/services/taskService.ts b/game-server/app/services/task/taskService.ts similarity index 94% rename from game-server/app/services/taskService.ts rename to game-server/app/services/task/taskService.ts index 7edddaa97..0352bfdaf 100644 --- a/game-server/app/services/taskService.ts +++ b/game-server/app/services/task/taskService.ts @@ -1,20 +1,20 @@ -import * as taskUtil from '../pubUtils/taskUtil'; -import { RoleModel, RoleType } from '../db/Role'; +import * as taskUtil from '../../pubUtils/taskUtil'; +import { RoleModel, RoleType } from '../../db/Role'; 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 { EPlace, HeroType } from '../db/Hero'; -import { getRoleOnlineInfo } from './redisService'; -import { HeroScores } from '../db/PvpHistoryOpp'; -import { ItemInter } from '../pubUtils/interface'; -import { UserTaskModel, UserTaskType } from '../db/UserTask'; -import { UserTaskRecModel } from '../db/UserTaskRec'; -import { UserTaskHistoryModel } from '../db/UserTaskHistory'; -import { gameData } from '../pubUtils/data'; -import { getSeconds, getZeroPointD } from '../pubUtils/timeUtil'; -import { RoleStatus } from '../db/ComBattleTeam'; -import { getActivities } from './activity/activityService'; +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 { EPlace, HeroType } from '../../db/Hero'; +import { getRoleOnlineInfo } from '../redisService'; +import { HeroScores } from '../../db/PvpHistoryOpp'; +import { ItemInter } from '../../pubUtils/interface'; +import { UserTaskModel, UserTaskType } from '../../db/UserTask'; +import { UserTaskRecModel } from '../../db/UserTaskRec'; +import { UserTaskHistoryModel } from '../../db/UserTaskHistory'; +import { gameData } from '../../pubUtils/data'; +import { getSeconds, getZeroPointD } from '../../pubUtils/timeUtil'; +import { RoleStatus } from '../../db/ComBattleTeam'; +import { getActivities } from '../activity/activityService'; export async function checkTaskWithRoles(serverId: number, roleId: string, sid: string, taskType: number, roles: RoleType[]) { for (let role of roles) { diff --git a/shared/db/ActivityDailyChallenges.ts b/shared/db/ActivityDailyChallenges.ts index eba700d6b..a1c306db0 100644 --- a/shared/db/ActivityDailyChallenges.ts +++ b/shared/db/ActivityDailyChallenges.ts @@ -1,5 +1,6 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; +import { UpdateTaskParam } from '../domain/roleField/task'; /** * 活动系统 - 今日挑战活动 @@ -25,6 +26,8 @@ export default class Activity_Daily_Challenges extends BaseModel { receiveRewardCount: number; // 领取奖励次数 @prop({ required: true }) data: string; // 数据信息 + @prop({ required: true, type: String }) + records: string[]; // 数据信息 //任务领取记录 public static async addCellRecord(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number, count: number, lean = true) { @@ -33,28 +36,48 @@ export default class Activity_Daily_Challenges extends BaseModel { return result; } + // 更新任务 + public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { + let canSet = true; + if(param.record || param.max || param.min) { + let rec = await this.findDataByCellIndex(serverId, activityId, roleId, dayIndex, cellIndex); + if(rec) { + if(param.record && rec.records.indexOf(param.record) != -1) { + canSet = false; + } else if (param.max && rec.totalCount >= param.max) { + canSet = false; + } else if (param.min && rec.totalCount <= param.min) { + canSet = false; + } + } + } + if(canSet) { + return await this.setOrIncTask(serverId, activityId, roleId, dayIndex, cellIndex, param); + } + } + + public static async setOrIncTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { + if(param.set) { + return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.record); + } else if (param.inc) { + return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.record); + } + } + //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number, count: number, lean = true) { - let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex, type }, - { $set: { totalCount: count } }, { upsert: true, new: true }).lean(lean); + public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, record?: string) { + let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, + { $set: { totalCount: count }, $addToSet: { records: record||''} }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number, addCount: number, lean = true) { - let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex, type }, - { $inc: { totalCount: addCount } }, { upsert: true, new: true }).lean(lean); + public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, record?: string) { + let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, + { $inc: { totalCount: addCount }, $addToSet: { records: record||''} }, { upsert: true, new: true }).lean(); return result; } - //根据活动记录统计数据 - public static async addTaskRecord(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number, data: string,) { - let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex, type }, - { $set: { data: data } }, { upsert: true, new: true }).lean(true); - return result; - } - - //根据活动id查询活动数据 public static async findData(serverId: number, activityId: number, roleId: string, lean = true) { let result: ActivityDailyChallengesModelType[] = await ActivityDailyChallengesModel.find({ serverId, roleId, activityId }).lean(lean); @@ -68,8 +91,8 @@ export default class Activity_Daily_Challenges extends BaseModel { } //查询第几天某个的活动数据 - public static async findDataByCellIndex(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number) { - let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOne({ serverId, roleId, activityId, dayIndex, cellIndex, type }).lean(true); + public static async findDataByCellIndex(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number) { + let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOne({ serverId, roleId, activityId, dayIndex, cellIndex }).lean(true); return result; } diff --git a/shared/db/ActivityGrowth.ts b/shared/db/ActivityGrowth.ts index 45e406a2d..1a0a75c05 100644 --- a/shared/db/ActivityGrowth.ts +++ b/shared/db/ActivityGrowth.ts @@ -1,5 +1,6 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; +import { UpdateTaskParam } from '../domain/roleField/task'; /** * 活动系统 - 成长任务活动 @@ -25,6 +26,8 @@ export default class Activity_Growth extends BaseModel { receiveRewardCount: number; // 领取奖励次数 @prop({ required: true }) data: string; // 数据信息 + @prop({ required: true, type: String }) + records: string[]; // 数据信息 //任务领取记录 public static async addCellRecord(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number, count: number,) { @@ -33,28 +36,48 @@ export default class Activity_Growth extends BaseModel { return result; } + // 更新任务 + public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { + let canSet = true; + if(param.record || param.max || param.min) { + let rec = await this.findDataByCellIndex(serverId, activityId, roleId, dayIndex, cellIndex); + if(rec) { + if(param.record && rec.records.indexOf(param.record) != -1) { + canSet = false; + } else if (param.max && rec.totalCount >= param.max) { + canSet = false; + } else if (param.min && rec.totalCount <= param.min) { + canSet = false; + } + } + } + if(canSet) { + return await this.setOrIncTask(serverId, activityId, roleId, dayIndex, cellIndex, param); + } + } + + public static async setOrIncTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { + if(param.set) { + return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.record); + } else if (param.inc) { + return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.record); + } + } + //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number, count: number, lean = true) { - let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex, type }, - { $set: { totalCount: count } }, { upsert: true, new: true }).lean(lean); + public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, record?: string) { + let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, + { $set: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number, addCount: number, lean = true) { - let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex, type }, - { $inc: { totalCount: addCount } }, { upsert: true, new: true }).lean(lean); + public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, record?: string) { + let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, + { $inc: { totalCount: addCount }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); return result; } - //根据活动记录统计数据 - public static async addTaskRecord(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number, data: string,) { - let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex, type }, - { $set: { data: data } }, { upsert: true, new: true }).lean(true); - return result; - } - - //根据活动id查询活动数据 public static async findData(serverId: number, activityId: number, roleId: string, lean = true) { let result: ActivityGrowthModelType[] = await ActivityGrowthModel.find({ serverId, roleId, activityId }).lean(lean); @@ -68,8 +91,8 @@ export default class Activity_Growth extends BaseModel { } //查询第几天某个的活动数据 - public static async findDataByCellIndex(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number,) { - let result: ActivityGrowthModelType = await ActivityGrowthModel.findOne({ serverId, roleId, activityId, dayIndex, cellIndex, type }).lean(true); + public static async findDataByCellIndex(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number) { + let result: ActivityGrowthModelType = await ActivityGrowthModel.findOne({ serverId, roleId, activityId, dayIndex, cellIndex }).lean(true); return result; } diff --git a/shared/db/ActivityRefreshTask.ts b/shared/db/ActivityRefreshTask.ts index 8da1f8498..2bd9761cb 100644 --- a/shared/db/ActivityRefreshTask.ts +++ b/shared/db/ActivityRefreshTask.ts @@ -1,5 +1,6 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; +import { UpdateTaskParam } from '../domain/roleField/task'; /** * 活动系统 - 通用的刷新任务(分页,可刷新,限制领取次数) @@ -27,6 +28,8 @@ export default class Activity_Refresh_Task extends BaseModel { receiveRewardCount: number; // 领取奖励次数 @prop({ required: true }) data: string; // 数据信息 + @prop({ required: true, type: String }) + records: string[]; // 数据信息 //任务领取记录 public static async addReceiveRecord(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, type: number, count: number) { @@ -35,17 +38,47 @@ export default class Activity_Refresh_Task extends BaseModel { return result; } + + // 更新任务 + public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, param: UpdateTaskParam) { + let canSet = true; + if(param.record || param.max || param.min) { + let rec = await this.findDataById(serverId, activityId, roleId, roundIndex, pageIndex, id); + if(rec) { + if(param.record && rec.records.indexOf(param.record) != -1) { + canSet = false; + } else if (param.max && rec.totalCount >= param.max) { + canSet = false; + } else if (param.min && rec.totalCount <= param.min) { + canSet = false; + } + } + } + if(canSet) { + return await this.setOrIncTask(serverId, activityId, roleId, roundIndex, pageIndex, id, param); + } + } + + public static async setOrIncTask(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, param: UpdateTaskParam) { + if(param.set) { + return await this.setTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.set, param.record); + } else if (param.inc) { + return await this.addTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.inc, param.record); + } + } + + //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, type: number, count: number, lean = true) { - let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id, type }, - { $set: { totalCount: count } }, { upsert: true, new: true }).lean(lean); + public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, record?: string) { + let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id }, + { $set: { totalCount: count }, $setOnInsert: { records: record||'' } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, type: number, addCount: number, lean = true) { - let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id, type }, - { $inc: { totalCount: addCount } }, { upsert: true, new: true }).lean(lean); + public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, record?: string) { + let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id }, + { $inc: { totalCount: count }, $setOnInsert: { records: record||'' } }, { upsert: true, new: true }).lean(); return result; } @@ -64,8 +97,8 @@ export default class Activity_Refresh_Task extends BaseModel { } //查询活动数据 - public static async findDataById(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, type: number) { - let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOne({ serverId, roleId, activityId, roundIndex, pageIndex, id, type }).lean(true); + public static async findDataById(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number) { + let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOne({ serverId, roleId, activityId, roundIndex, pageIndex, id }).lean(true); return result; } diff --git a/shared/db/ActivityThirtyDays.ts b/shared/db/ActivityThirtyDays.ts index f1b3f8ebb..b43a02d71 100644 --- a/shared/db/ActivityThirtyDays.ts +++ b/shared/db/ActivityThirtyDays.ts @@ -1,5 +1,6 @@ import BaseModel from './BaseModel'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; +import { UpdateTaskParam } from '../domain/roleField/task'; /** * 30天目标活动 @@ -27,10 +28,8 @@ export default class Activity_Thirty_Days extends BaseModel { isReceive: boolean; // 是否领取过奖励 @prop({ required: true }) data: string; // 数据信息 - @prop({ required: true }) - isPush: boolean; // 推送过消息 - - + @prop({ required: true, type: String }) + records: string[]; // 数据信息 //添加领取记录 public static async addRecord(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number) { @@ -39,13 +38,6 @@ export default class Activity_Thirty_Days extends BaseModel { return result; } - //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, type: number, addCount: number, lean = true) { - let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab, type }, - { $inc: { totalCount: addCount } }, { upsert: true, new: true }).lean(lean); - return result; - } - //根据活动记录统计数据 public static async addTaskRecord(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, type: number, data: string,) { let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab, type }, @@ -53,13 +45,6 @@ export default class Activity_Thirty_Days extends BaseModel { return result; } - //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, type: number, count: number, lean = true) { - let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab, type }, - { $set: { totalCount: count } }, { upsert: true, new: true }).lean(lean); - return result; - } - //推送标记 public static async pushMessage(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, type: number) { let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab, type }, @@ -79,15 +64,55 @@ export default class Activity_Thirty_Days extends BaseModel { return result; } + + // 更新任务 + public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, param: UpdateTaskParam) { + let canSet = true; + if(param.record || param.max || param.min) { + let rec = await this.findDataByCellIndex(serverId, activityId, roleId, pageIndex, cellIndex, tab); + if(rec) { + if(param.record && rec.records.indexOf(param.record) != -1) { + canSet = false; + } else if (param.max && rec.totalCount >= param.max) { + canSet = false; + } else if (param.min && rec.totalCount <= param.min) { + canSet = false; + } + } + } + if(canSet) { + return await this.setOrIncTask(serverId, activityId, roleId, pageIndex, cellIndex, tab, param); + } + } + + public static async setOrIncTask(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, param: UpdateTaskParam) { + if(param.set) { + return await this.setTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.set, param.record); + } else if (param.inc) { + return await this.addTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.inc, param.record); + } + } + + + //查询第*页的某个的活动数据 - public static async findDataByCellIndex(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, type: number,) { - let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOne({ serverId, roleId, activityId, pageIndex, cellIndex, tab, type }).lean(true); + public static async findDataByCellIndex(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number,) { + let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOne({ serverId, roleId, activityId, pageIndex, cellIndex, tab }).lean(true); return result; } - //删除活动领取记录 - public static async deleteActivity(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number) { - await ActivityThirtyDaysModel.deleteMany({ serverId, roleId, activityId, pageIndex, cellIndex }); + //根据活动统计完成任务次数 + public static async addTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, record?: string) { + let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab }, + { $inc: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + return result; + } + + //根据活动统计完成任务次数 + public static async setTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, record?: string) { + let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab }, + { $set: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + return result; } } diff --git a/shared/db/ActivityTreasureHuntTask.ts b/shared/db/ActivityTreasureHuntTask.ts index 880d43a63..4d70ec83e 100644 --- a/shared/db/ActivityTreasureHuntTask.ts +++ b/shared/db/ActivityTreasureHuntTask.ts @@ -1,5 +1,6 @@ import ActivityGrowth from './ActivityGrowth'; import { index, getModelForClass, prop, DocumentType } from '@typegoose/typegoose'; +import { UpdateTaskParam } from '../domain/roleField/task'; /** * 活动系统 - 寻宝骑兵-备战任务 @@ -27,6 +28,48 @@ export default class Activity_Treasure_Hunt_Task extends ActivityGrowth { return result; } + // 更新任务 + public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, param: UpdateTaskParam) { + let canSet = true; + if(param.record || param.max || param.min) { + let rec = await this.findDataByCellIndex(serverId, activityId, roleId, roundIndex, cellIndex); + if(rec) { + if(param.record && rec.records.indexOf(param.record) != -1) { + canSet = false; + } else if (param.max && rec.totalCount >= param.max) { + canSet = false; + } else if (param.min && rec.totalCount <= param.min) { + canSet = false; + } + } + } + if(canSet) { + return await this.setOrIncTask(serverId, activityId, roleId, roundIndex, cellIndex, param); + } + } + + public static async setOrIncTask(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, param: UpdateTaskParam) { + if(param.set) { + return await this.setTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.set, param.record); + } else if (param.inc) { + return await this.addTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.inc, param.record); + } + } + + //根据活动统计完成任务次数 + public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, record?: string) { + let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, cellIndex }, + { $set: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + return result; + } + + //根据活动统计完成任务次数 + public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, record?: string) { + let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, cellIndex }, + { $inc: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + return result; + } + //查询活动数据 public static async findDataByCellIndex(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number) { let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOne({ serverId, roleId, activityId, roundIndex, cellIndex }).lean(true); diff --git a/shared/db/UserTaskRec.ts b/shared/db/UserTaskRec.ts index b61f1f19f..4c6563400 100644 --- a/shared/db/UserTaskRec.ts +++ b/shared/db/UserTaskRec.ts @@ -3,6 +3,7 @@ import { index, getModelForClass, prop, DocumentType, modelOptions } from '@type import { TASK_FUN_TYPE } from '../consts'; import { genCode } from '../pubUtils/util'; import { getZeroPointD } from '../pubUtils/timeUtil'; +import { UpdateTaskParam } from '../domain/roleField/task'; /** * 玩家任务记录表 @@ -46,19 +47,53 @@ export default class UserTaskRec extends BaseModel { } } - public static async setTaskRec(roleId: string, type: number, taskType: number, group: string, count: number) { + public static async setTaskRec(roleId: string, type: number, taskType: number, group: string, count: number, record?: string) { let condition = this.getRefreshCondition(type); - let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $set: { count } }, { new: true, upsert: true }).lean(); + let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $set: { count }, $addToSet: { records: record||'' } }, { new: true, upsert: true }).lean(); return rec; } - public static async incTaskRec(roleId: string, type: number, taskType: number, group: string, count: number) { + public static async incTaskRec(roleId: string, type: number, taskType: number, group: string, count: number, record?: string) { let condition = this.getRefreshCondition(type); - let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $inc: { count } }, { new: true, upsert: true }).lean(); + let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $inc: { count }, $addToSet: { records: record||'' } }, { new: true, upsert: true }).lean(); return rec; } + /** + * 检查是否可以更新任务并更新 + * @param roleId 玩家id + * @param type 任务大类型,日常、成就、每日 + * @param taskType 任务类型 + * @param group 活动组 + * @param param 更新参数 + * @returns + */ + public static async checkAndUpdateTask(roleId: string, type: TASK_FUN_TYPE, taskType: number, group: string, param: UpdateTaskParam) { + let canSet = true; + if(param.record || param.max || param.min) { + let rec = await this.findByRoleAndGroup(roleId, type, taskType, group); + if(rec) { + if(param.record && rec.records.indexOf(param.record) != -1) { + canSet = false; + } else if (param.max && rec.count >= param.max) { + canSet = false; + } else if (param.min && rec.count <= param.min) { + canSet = false; + } + } + } + if(canSet) { + return await this.setOrIncTask(roleId, type, taskType, group, param); + } + } + public static async setOrIncTask(roleId: string, type: number, taskType: number, group: string, param: UpdateTaskParam) { + if(param.set) { + return await this.setTaskRec(roleId, type, taskType, group, param.set, param.record); + } else if (param.inc) { + return await this.incTaskRec(roleId, type, taskType, group, param.inc, param.record); + } + } public static async checkHistoryAndSetTaskRec(roleId: string, type: number, taskType: number, group: string, count: number) { let rec: UserTaskRecType = await UserTaskRecModel.findByRoleAndGroup(roleId, type, taskType, group); diff --git a/shared/domain/activityField/activityField.ts b/shared/domain/activityField/activityField.ts index 83f93b1da..a95c55b67 100644 --- a/shared/domain/activityField/activityField.ts +++ b/shared/domain/activityField/activityField.ts @@ -135,7 +135,7 @@ export class ActivityInRemote { } } -export function transActivityInRemoteToModelType(activity: ActivityInRemote) { +export function transActivityInRemoteToModelType(activity: ActivityInRemote): ActivityModelType { if(!activity) return null; return { ...activity, diff --git a/shared/domain/activityField/growthFundField.ts b/shared/domain/activityField/growthFundField.ts index c81f2ccb9..c3ad0531b 100644 --- a/shared/domain/activityField/growthFundField.ts +++ b/shared/domain/activityField/growthFundField.ts @@ -164,8 +164,8 @@ export class GrowthFundData extends ActivityBase { } } - constructor(activityData: ActivityModelType, createTime: number) { - super(activityData, createTime) + constructor(activityData: ActivityModelType, createTime: number, serverTime?: number) { + super(activityData, createTime, serverTime) this.initData(activityData.data) } } \ No newline at end of file diff --git a/shared/domain/activityField/refreshTaskField.ts b/shared/domain/activityField/refreshTaskField.ts index ce079618c..5a4f59d6e 100644 --- a/shared/domain/activityField/refreshTaskField.ts +++ b/shared/domain/activityField/refreshTaskField.ts @@ -128,8 +128,8 @@ export class RefreshTaskData extends ActivityBase { } } - constructor(activityData: ActivityModelType, createTime: number) { - super(activityData, createTime) + constructor(activityData: ActivityModelType, createTime: number, serverTime?: number) { + super(activityData, createTime, serverTime) this.initData(activityData.data) } } \ No newline at end of file diff --git a/shared/domain/activityField/sevenDaysField.ts b/shared/domain/activityField/sevenDaysField.ts index 7cc43724d..5bd5b25e6 100644 --- a/shared/domain/activityField/sevenDaysField.ts +++ b/shared/domain/activityField/sevenDaysField.ts @@ -5,7 +5,7 @@ import { ActivityGrowthModelType } from '../../db/ActivityGrowth'; import { ActivityGrowthPointModelType } from '../../db/ActivityGrowthPoint'; import { HeroType } from '../../db/Hero'; import { RoleModel } from '../../db/Role'; -import { splitString } from '../../pubUtils/util'; +import { parseNumberList, splitString } from '../../pubUtils/util'; import { ActivityDailyGiftsModelType } from '../../db/ActivityDailyGifts'; import { parseResStr } from '../../pubUtils/util'; import { ConsumeResParam } from '../activityField/consumeField'; @@ -18,6 +18,7 @@ export class SevenDaysDailyItem { name: string; // 任务名称 taskType: number; // 任务类型 dic_zyz_taskType.json taskParam: string; //任务数据 dic_zyz_taskType.json + taskParamArray: number[]; condition: number; //任务数据条件 dic_zyz_taskType.jsonT reward: string; // 任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品 skip: string; // 跳转 @@ -35,6 +36,7 @@ export class SevenDaysDailyItem { this.reward = data.reward; this.skip = data.skip; + this.taskParamArray = parseNumberList(data.taskParam); this.totalCount = 0; this.receiveRewardCount = 0; } @@ -324,8 +326,8 @@ export class SevenDaysData extends ActivityBase { this.dailyChallenge = new SevenDaysDailyChallengesData(objData.dailyChallenge) } - constructor(activityData: ActivityModelType, createTime: number) { - super(activityData, createTime) + constructor(activityData: ActivityModelType, createTime: number, serverCreateTime?: number) { + super(activityData, createTime, serverCreateTime) this.initData(activityData.data) } } \ No newline at end of file diff --git a/shared/domain/activityField/thirtyDaysField.ts b/shared/domain/activityField/thirtyDaysField.ts index f8df43f77..fe25938bf 100644 --- a/shared/domain/activityField/thirtyDaysField.ts +++ b/shared/domain/activityField/thirtyDaysField.ts @@ -118,20 +118,6 @@ export class ThirtyDaysData extends ActivityBase { pointRewardList: Array = [];//点数兑换奖励 totalPoint: number = 0;//总共点数 - //未完成的任务 - public findUncompleteTaskByType(type: number): ThirtyDaysItem[] { - 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++) { @@ -256,8 +242,8 @@ export class ThirtyDaysData extends ActivityBase { } } - constructor(activityData: ActivityModelType, createTime: number) { - super(activityData, createTime) + constructor(activityData: ActivityModelType, createTime: number, serverTime?: number) { + super(activityData, createTime, serverTime) this.initData(activityData.data) } } \ No newline at end of file diff --git a/shared/domain/activityField/treasureHuntField.ts b/shared/domain/activityField/treasureHuntField.ts index a84f7db90..97723b600 100644 --- a/shared/domain/activityField/treasureHuntField.ts +++ b/shared/domain/activityField/treasureHuntField.ts @@ -4,7 +4,7 @@ import { ActivityTreasureHuntShopModelType } from '../../db/ActivityTreasureHunt import { ActivityTreasureHuntTaskModelType } from '../../db/ActivityTreasureHuntTask'; import { ActivityTreasureHuntTreasureShopModelType } from '../../db/ActivityTreasureHuntTreasureShop'; import { ActivityTreasureHuntFirstPageModelType } from '../../db/ActivityTreasureHuntFirstPage'; -import { splitString } from '../../pubUtils/util'; +import { parseNumberList, splitString } from '../../pubUtils/util'; import { ActivityBase } from './activityField'; @@ -142,6 +142,7 @@ export class TreasureHuntTaskItem { fragment: number; //碎片 skip: string; + taskParamArray: number[]; // 任务参数 totalCount: number = 0; //任务统计 isReceive: boolean = false; //是否领取奖励 @@ -150,6 +151,7 @@ export class TreasureHuntTaskItem { this.name = data.name; this.taskType = data.taskType; this.taskParam = data.taskParam; + this.taskParamArray = parseNumberList(data.taskParamArray); this.condition = data.condition; this.reward = data.reward; this.fragment = data.fragment; @@ -339,8 +341,8 @@ export class TreasureHuntData extends ActivityBase { } } - constructor(activityData: ActivityModelType, createTime: number) { - super(activityData, createTime) + constructor(activityData: ActivityModelType, createTime: number, sererTime?: number) { + super(activityData, createTime, sererTime); this.initData(activityData.data) } } \ No newline at end of file diff --git a/shared/domain/roleField/task.ts b/shared/domain/roleField/task.ts index 7ccd812a4..27314899b 100644 --- a/shared/domain/roleField/task.ts +++ b/shared/domain/roleField/task.ts @@ -38,4 +38,12 @@ export class TaskListReturn { id: number; // 任务id count: number; // 达成次数 received: boolean; // 是否领取 +} + +export interface UpdateTaskParam { + inc?: number; // 直接增 + set?: number; // 直接设 + record?: string; // 检查是否有这条记录、没有的话增 + max?: number; // 检查是否是最大的,不是的话更 + min?: number; // 检查是否是最小的,不是的话更 } \ No newline at end of file diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index ef74b8cc5..ebf9dc76c 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -630,10 +630,11 @@ function checkRecResult(rec: UserTaskRecType, id: number) { * */ export async function accomplishTask(serverId: number, roleId: string, taskType: TASK_TYPE, count: number, parma?: any, activities?: ActivityInRemote[]) { + // console.log('accomplishTask', roleId, taskType, count, JSON.stringify(parma)) let dicTaskType = gameData.taskDescByType.get(taskType); let pushMessage = []; - let serverInfo = await ServerlistModel.findByServerId(serverId); + /* let serverInfo = await ServerlistModel.findByServerId(serverId); if (!serverInfo) return []; let { activityGroupId } = serverInfo; let findActivitiesByTypes = async (types: number[]) => { @@ -859,6 +860,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: } } + } // console.log('***** thirtyDay after', Date.now()); @@ -990,6 +992,7 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: } } // console.log('***** growthFundElite after', Date.now()); + */ return pushMessage; } From 1c3d1c209caa2c018a61d0623dc18d278595941a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E8=8E=B9?= Date: Fri, 18 Mar 2022 20:50:11 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E4=BB=BB=E5=8A=A1=EF=BC=9A=E4=BF=AE?= =?UTF-8?q?=E6=94=B9taskType?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/handler/activityHandler.ts | 2 +- .../servers/activity/handler/gachaHandler.ts | 22 +- .../battle/handler/comBattleHandler.ts | 5 +- .../app/servers/battle/handler/pvpHandler.ts | 18 +- .../servers/connector/handler/entryHandler.ts | 14 +- .../app/servers/role/handler/heroHandler.ts | 45 +- .../app/servers/role/handler/roleHandler.ts | 3 +- .../app/servers/role/handler/taskHandler.ts | 5 +- .../app/services/normalBattleService.ts | 7 +- game-server/app/services/redisService.ts | 33 +- game-server/app/services/role/createHero.ts | 24 +- .../app/services/role/rewardService.ts | 1 - game-server/app/services/task/taskObj.ts | 713 ++++++-- game-server/app/services/task/taskService.ts | 224 +-- shared/consts/constModules/sysConst.ts | 4 +- shared/db/ActivityDailyChallenges.ts | 31 +- shared/db/ActivityGrowth.ts | 32 +- shared/db/ActivityRefreshTask.ts | 31 +- shared/db/ActivityThirtyDays.ts | 31 +- shared/db/ActivityTreasureHuntTask.ts | 31 +- shared/db/UserTaskRec.ts | 40 +- shared/domain/roleField/task.ts | 73 +- shared/pubUtils/taskUtil.ts | 1530 ----------------- web-server/app/service/Auth.ts | 4 +- 24 files changed, 821 insertions(+), 2102 deletions(-) diff --git a/game-server/app/servers/activity/handler/activityHandler.ts b/game-server/app/servers/activity/handler/activityHandler.ts index 56fd5000c..cfbb7344e 100644 --- a/game-server/app/servers/activity/handler/activityHandler.ts +++ b/game-server/app/servers/activity/handler/activityHandler.ts @@ -77,7 +77,7 @@ export class ActivityHandler { // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.PVP, 1) // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_TOWER_LV, 1, { towerLv: lv }) - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GASHA, 1) + // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GACHA, 1) // if (lv == 2) { // await GTCreateListMessage('批量推送测试11', 259200000, '哈哈哈哈哈11', '噢噢噢噢噢噢噢噢11') diff --git a/game-server/app/servers/activity/handler/gachaHandler.ts b/game-server/app/servers/activity/handler/gachaHandler.ts index 7d30a0e15..d14e743c0 100644 --- a/game-server/app/servers/activity/handler/gachaHandler.ts +++ b/game-server/app/servers/activity/handler/gachaHandler.ts @@ -10,10 +10,9 @@ import { HeroModel } from "../../../db/Hero"; import { handleCost, createHeroes, addItems } from "../../../services/role/rewardService"; import { getZeroPointD, getTimeFun } from "../../../pubUtils/timeUtil"; import { UserGachaRecModel } from "../../../db/UserGachaRec"; -import { ActivityModel } from "../../../db/Activity"; -import { checkActivityTask, checkTask } from "../../../services/task/taskService"; import { RECRUIT } from "../../../pubUtils/dicParam"; import { getActivityById } from "../../../services/activity/activityService"; +import { checkTaskInGacha } from "../../../services/task/taskService"; export default function (app: Application) { new HandlerService(app, {}); @@ -98,16 +97,7 @@ export class GachaHandler { }); await UserGachaRecModel.createRec(roleId, gachaId, activityId, count, resultList); - - // 任务 - await checkTask(roleId, sid, TASK_TYPE.GASHA, count, true, {}); - //活动统计 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GASHA, count) - for (let hero of resultHeroes) { - activityData.push({ hid: hero.hid, quality: hero.quality }); - } - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GACHA_QUALITY_COUNT, count, { heroes: activityData }) - + await checkTaskInGacha(serverId, roleId, sid, count, resultHeroes); return resResult(STATUS.SUCCESS, { gachaId, activityId, freeCount, refFreeTime: userGacha.refFreeTime, count: userGacha.count, point: userGacha.point, floor, hope, @@ -470,13 +460,7 @@ export class GachaHandler { await UserGachaRecModel.createRec(roleId, gachaId, 0, count, resultList); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GASHA, count, true, {}); - //活动统计 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GASHA, count) - for (let hero of resultHeroes) { - activityData.push({ hid: hero.hid, quality: hero.quality }); - } - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GACHA_QUALITY_COUNT, count, { heroes: activityData }) + await checkTaskInGacha(serverId, roleId, sid, count, resultHeroes); return resResult(STATUS.SUCCESS, { hasInit: !!role.gachaHasGuide, diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index f73ec5aa6..b113c472b 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -692,10 +692,7 @@ export class ComBattleHandler { } // 任务 - await checkTaskWithArgs(roleId, sid, TASK_TYPE.CHAT, [getChannelType(CHANNEL_PREFIX.TEAM)]); - - //活动任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.CHAT, 1, { chatType: getChannelType(CHANNEL_PREFIX.TEAM) }) + await checkTaskWithArgs(serverId, roleId, sid, TASK_TYPE.CHAT, { chatType: getChannelType(CHANNEL_PREFIX.TEAM) }); return resResult(STATUS.SUCCESS); } diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index 375573698..557dbf9a8 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -10,7 +10,7 @@ import { PvpDefenseModel, pvpUpdateInter } from '../../../db/PvpDefense'; import { PvpSeasonResultModel } from '../../../db/PvpSeasonResult'; import { PVPConfigModel } from '../../../db/SystemConfig'; import { Rank } from '../../../services/rankService'; -import { checkActivityTask, checkTask, checkTaskInPvpEnd } from '../../../services/task/taskService'; +import { checkTask, checkTaskInPvpEnd } from '../../../services/task/taskService'; import { Attack, AttackHero, Defense, DefenseHero, PvpDataReturn } from '../../../domain/battleField/pvp'; import { DEBUG_MAGIC_WORD, FIGURE_UNLOCK_CONDITION, ITEM_CHANGE_REASON, LINEUP_NUM, REDIS_KEY, TASK_TYPE } from '../../../consts'; import { PVP } from '../../../pubUtils/dicParam'; @@ -149,6 +149,7 @@ export class PvpHandler { const { warId, roleId: oppRoleId } = msg; let roleId = session.get('roleId'); let roleName = session.get('roleName'); + let serverId = session.get('serverId'); let sid = session.get('sid'); let warInfo = gameData.war.get(warId); @@ -180,7 +181,7 @@ export class PvpHandler { record: { heroes, pos: curOpp.pos, oppRoleId } } }, true); - await checkTask(roleId, sid, TASK_TYPE.PVP, 1, true, {}); + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP); // 对手记录更新 await PvpHistoryOppModel.setStatus(roleId, oppRoleId, 1); @@ -276,12 +277,7 @@ export class PvpHandler { let myRank = await r.getMyRank({ roleId }); result.setMyRank(myRank); - await checkTaskInPvpEnd(roleId, sid, isSuccess, pvpDefense.heroScores); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.PVP, 1) - if (isSuccess) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.PVP_WIN, 1) - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.PVP_WIN_SERIES, 1) - } + await checkTaskInPvpEnd(serverId, roleId, sid, isSuccess, pvpDefense.heroScores); if(hisWinStreakNum < pvpDefense.hisWinStreakNum) { await unlockFigure(sid, roleId, [{ type: FIGURE_UNLOCK_CONDITION.PVP_WIN_SERIES, paramWinStreakNum: pvpDefense.hisWinStreakNum }]); } @@ -519,6 +515,7 @@ export class PvpHandler { let { id } = msg; let roleId = session.get('roleId'); let sid: string = session.get('sid'); + let serverId = session.get('serverId'); let roleName = session.get('roleName'); let seasonEndTime: number = this.app.get('pvpSeasonEndTime'); @@ -536,7 +533,7 @@ export class PvpHandler { await PvpDefenseModel.updateInfo(roleId, { receivedBox, challengeCnt, challengeRefTime }); let result = await addItems(roleId, roleName, sid, pvpBox.reward, ITEM_CHANGE_REASON.PVP_BOX_REWARD); // 任务 - await checkTask(roleId, sid, TASK_TYPE.PVP_RECEIVE_BOX, 1, true, {}); + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_RECEIVE_BOX); return resResult(STATUS.SUCCESS, { goods: result, receivedBox, challengeCnt, challengeRefTime }); } @@ -554,6 +551,7 @@ export class PvpHandler { let { heroScores: addHeroScores } = msg; let roleId = session.get('roleId'); let sid = session.get('sid'); + let serverId = session.get('serverId'); let { heroScores, hisScore } = await PvpDefenseModel.findByRoleId(roleId); let score = 0; @@ -584,7 +582,7 @@ export class PvpHandler { await r.setRankWithRoleInfo(roleId, pvpDefense.score, pvpDefense.updatedAt.getTime(), role); // 任务 - await checkTask(roleId, sid, TASK_TYPE.PVP_HERO_SCORE, 0, false, { heroScores }); + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_HERO_SCORE, { heroScores }); return resResult(STATUS.SUCCESS, { score, hisScore, heroScores }); } diff --git a/game-server/app/servers/connector/handler/entryHandler.ts b/game-server/app/servers/connector/handler/entryHandler.ts index 9d77ecb6b..a7a5777aa 100644 --- a/game-server/app/servers/connector/handler/entryHandler.ts +++ b/game-server/app/servers/connector/handler/entryHandler.ts @@ -7,16 +7,13 @@ import { FrontendSession } from 'pinus'; import { HeroModel } from './../../../db/Hero'; import { genCode, generateStr, resResult } from '../../../pubUtils/util'; import { COM_BTL_QUALITY, HERO_SELECT, DEBUG_MAGIC_WORD, REDIS_KEY, TASK_TYPE, ENTERY_ROLE_PICK, COUNTER, DEFAULT_LV, TA_USERSET_TYPE, LOG_TYPE } from '../../../consts'; -import { getAp } from '../../../services/actionPointService'; -import { ItemModel } from '../../../db/Item'; -import { SkinModel } from '../../../db/Skin'; // import { loginRefresh } from '../../../services/playerEventService'; import { nowSeconds, getZeroPoint } from '../../../pubUtils/timeUtil'; import { rmRoleFromQueue, roleLeave, getRoleOnlineInfo, roleLogin } from '../../../services/redisService'; import { addRoleToGuildChannel, addRoleToSysChannel, addRoleToWorldChannel, leaveGuildAuctionChannel, leaveGuildChannel, leaveSysChannel, leaveWorldAuctionChannel, leaveWorldChannel, recentGuildMsgs, recentPrivateChatInfos, recentSysMsgs, recentWorldMsgs } from '../../../services/chatService'; import { reportOneOnline, savePlayTime } from '../../../services/authenticateService'; -import { checkTaskWithRole, } from '../../../services/task/taskService'; +import { checkTaskInEntry, } from '../../../services/task/taskService'; import { pushData, everydayRefresh, kickUser } from '../../../services/connectorService'; // import { setComBtlOnUserLeave } from '../../../services/comBattleService'; import Counter from '../../../db/Counter'; @@ -65,7 +62,7 @@ export class EntryHandler { } } let serverName = this.app.getServerId(); - await roleLogin(role.roleId, user.userCode, serverName, user.pkgName); // 保存在线用户 + await roleLogin(role.roleId, user.userCode, serverName, user.pkgName, role.createTime); // 保存在线用户 await this.addSession(role, session); saveLoginAndOutLog(LOG_TYPE.LOGIN, session); @@ -75,9 +72,7 @@ export class EntryHandler { reportOneOnline(role.roleId, user.userCode, self.app.get('serverId'), true, user); // 任务 - checkTaskWithRole(serverId, role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SUM, role); - checkTaskWithRole(serverId, role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SERIES, role); - + checkTaskInEntry(serverId, role.roleId, self.app.get('serverId'), role); if (role.hasGuild) { addRoleToGuildChannel(role.roleId, self.app.get('serverId'), role.guildCode); } @@ -154,8 +149,7 @@ export class EntryHandler { let { serverId } = role; // 任务 - checkTaskWithRole(serverId, role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SUM, role); - checkTaskWithRole(serverId, role.roleId, self.app.get('serverId'), TASK_TYPE.LOGIN_SERIES, role); + checkTaskInEntry(serverId, role.roleId, self.app.get('serverId'), role); // 推送数据 pushData(role.hasInit, role, session, 'refresh'); diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index 0df6bf309..51665d3f3 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -13,7 +13,7 @@ import { getDropItems, FIGURE_UNLOCK_CONDITION } from '../../../consts/constModu import { pushComposeOrangeHero, pushHeroQualityUpMsg, pushHeroStarMax, pushHeroWakeUp } from '../../../services/chatService'; import { calculatetopLineup } from '../../../pubUtils/playerCe'; import { PvpDefenseModel } from '../../../db/PvpDefense'; -import { checkTaskWithHero, checkTask, checkActivityTask } from '../../../services/task/taskService'; +import { checkTask, checkTaskInHeroQUalityUp, checkTaskInHeroStarUp, checkTaskInHeroTrain, checkTaskInHeroWakeUp } from '../../../services/task/taskService'; import { isNumber, pick } from 'underscore'; import { updateEplaces } from '../../../services/equipService'; import { addConsumeToHero } from '../../../services/roleService'; @@ -128,8 +128,7 @@ export class HeroHandler { hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.LVUP, sid, roleId, hero, update); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_LV, hero, [oldLv]); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_LV, 1, { hid, lv: update.lv }); + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_LV, { oldLv, hero }); const curHero = { hid, lv: hero.lv, exp: hero.exp @@ -194,12 +193,7 @@ export class HeroHandler { if (isUpStar) { await calAllHeroCe(HERO_SYSTEM_TYPE.STAR, sid, roleId, {}, [hid, isUpStar ? 1 : 0]); // 升星可能影响到百家学院全局加成 // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_STAR_UP, hero); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_STAR_UP, 1); - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_QUALITY_STAR_UP, hero); - //成长任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_QUALITY_STAR_UP, 1, { quality: dicHero.quality, star: hero.star }); - + await checkTaskInHeroStarUp(serverId, roleId, sid, hero, oldStar); } const curHero = { @@ -254,11 +248,7 @@ export class HeroHandler { } hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, hero, update); await calAllHeroCe(HERO_SYSTEM_TYPE.QUALITY, sid, roleId, {}, [hid, 0]); // 升品可能影响到百家学院全局加成 - - // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_QUALITY_UP, hero); - // 任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT, 1, { oldQuality: dicHero.quality, quality: hero.quality }); + await checkTaskInHeroQUalityUp(serverId, roleId, sid, hero); const curHero = { hid, @@ -330,14 +320,10 @@ export class HeroHandler { hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, hero, update); if (isUpStar) { await calAllHeroCe(HERO_SYSTEM_TYPE.COLORSTAR, sid, roleId, {}, [hid, isUpStar ? 1 : 0]); // 升星可能影响到百家学院全局加成 - ; + // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_STAR_UP, hero); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_STAR_UP, 1); - await checkTask(roleId, sid, TASK_TYPE.HERO_WAKE_UP, 1, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_QUALITY_WAKE_UP_COUNT, 1, { quality: hero.quality }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_WAKE_UP_COUNT, 1, { hid: hid }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT, 1, { quality: dicHero.quality, colorStar: update.colorStar }); + await checkTaskInHeroWakeUp(serverId, roleId, sid, hero, oldColorStar); + } const curHero = { hid, @@ -373,6 +359,7 @@ export class HeroHandler { let newJobStage = hero.jobStage; let oldJobStage = hero.jobStage, oldJob = hero.job; let max = isOneClick ? dicJob.maxStage: hero.jobStage + 1; + let trainCount = 0; let check = new CheckMeterial(roleId); for(let i = hero.jobStage; i < max; i++) { let singleConsume = dicJob.trainingConsume[i]; @@ -381,6 +368,7 @@ export class HeroHandler { let isEnough = await check.decrease([singleConsume]); if(!isEnough) break; // 消耗不足 newJobStage ++; + trainCount++; } if (newJobStage == hero.jobStage) return resResult(STATUS.ROLE_MATERIAL_NOT_ENOUGH); let consumes = check.getConsume(); @@ -395,11 +383,7 @@ export class HeroHandler { } hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.TRAIN, sid, roleId, hero, update); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_TRAIN, hero, [oldJob, oldJobStage]); - await checkTask(roleId, sid, TASK_TYPE.HERO_TRAIN_SUM, newJobStage - oldJobStage, true, {}); - //活动统计 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_TRAIN_SUM, newJobStage - oldJobStage); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_TRAIN, newJobStage - oldJobStage, { hid }) + await checkTaskInHeroTrain(serverId, roleId, sid, hero, trainCount); return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, job: hero.job, jobStage: hero.jobStage } }); } @@ -436,8 +420,7 @@ export class HeroHandler { } hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAGEUP, sid, roleId, hero, update); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_STAGE_UP, hero); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_STAGE_UP, 1, { job: hero.job }); + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_STAGE_UP, { hero, stageUpCnt: 1 }) return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, job: hero.job, jobStage: hero.jobStage } }); } @@ -446,6 +429,7 @@ export class HeroHandler { async heroConectionActivate(msg: { shipId: number }, session: BackendSession) { let roleId: string = session.get('roleId'); let sid: string = session.get('sid'); + let serverId: number = session.get('serverId'); let { shipId } = msg; let shipHidAndLevel = gameData.friendShipHidAandIds.get(shipId); @@ -493,7 +477,7 @@ export class HeroHandler { hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.CONNECT, sid, roleId, hero, update, [shipId]); // 任务 - await checkTask(roleId, sid, TASK_TYPE.HERO_CONNECT, 1, true, { connectLv: level }) + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_CONNECT, { connectLv: level }) return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, connections: hero.connections } }); } @@ -573,8 +557,7 @@ export class HeroHandler { hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.FAVOUR, sid, roleId, hero, update, [oldLv]); // 任务 - await checkTaskWithHero(roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, hero, [oldLv]); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_FAVOUR_LV, 1, { lv: newLv, oldLv }); + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_FAVOUR_LV, { hero, oldFavourLv: oldLv }); } else { hero = await HeroModel.updateHeroInfo(roleId, hero.hid, update); } diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 886cd6686..55c6979f5 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -16,7 +16,7 @@ import { HERO_SYSTEM_TYPE, LINEUP_NUM, ROLE_SELECT, REDIS_KEY, TASK_TYPE, DEFAUL import { checkBattleHeroesByHid, roleLevelup } from '../../../services/normalBattleService'; import { Rank } from '../../../services/rankService'; import { updateUserInfo } from '../../../services/redisService'; -import { checkTaskWithHero, checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/task/taskService'; +import { checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/task/taskService'; import { getGoldObject, getCoinObject } from '../../../pubUtils/itemUtils'; import { RScriptRecordModel } from '../../../db/RScriptRecord'; import { SkinModel, SkinUpdate } from '../../../db/Skin'; @@ -61,7 +61,6 @@ export class RoleHandler { infos.set(heroInfo.hid, { heroInfo, skinInfo }); } await createHero.createWithInitInfo(infos, initInfos.figureInfo); - await createHero.clearTask(await getActivities()); await createHero.pushMessage(sid); await createHero.updateRedisRank(); let heroes = createHero.getResultHeroes(); diff --git a/game-server/app/servers/role/handler/taskHandler.ts b/game-server/app/servers/role/handler/taskHandler.ts index 6a8384ee9..7f78cbb6c 100644 --- a/game-server/app/servers/role/handler/taskHandler.ts +++ b/game-server/app/servers/role/handler/taskHandler.ts @@ -228,7 +228,7 @@ export class ShopHandler { tasks.push(task); } let task = getRandSingleEelm(tasks); - await checkTask(roleId, sid, task.taskType, task.condition, false, { isDebug: true }); + // await checkTask(roleId, sid, task.taskType, task.condition, false, { isDebug: true }); return resResult(STATUS.SUCCESS, { task }); @@ -332,9 +332,6 @@ export class ShopHandler { let sid = session.get('sid'); let role = await RoleModel.findByRoleId(roleId); let server = await ServerlistModel.findByServerId(serverId); - let task = new CheckTask(serverId, roleId, TASK_TYPE.LOGIN_SUM, role.createTime, server.openTime); - task.param.setRole(role); - task.check(1, sid); return resResult(STATUS.SUCCESS) } } \ No newline at end of file diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index a89509f33..27ab6c8b3 100644 --- a/game-server/app/services/normalBattleService.ts +++ b/game-server/app/services/normalBattleService.ts @@ -8,8 +8,7 @@ import { FUNC_OPT_TYPE, TASK_TYPE, WAR_TYPE, STATUS, KING_EXP_RATIO_TYPE, ITEM_C import { BackendSession, pinus } from 'pinus'; import { REDIS_KEY } from '../consts'; import { Rank } from './rankService'; -import { checkActivityTask, checkTask } from './task/taskService'; -import { accomplishTask } from '../pubUtils/taskUtil'; +import { checkTask } from './task/taskService'; import { RScriptRecordModel } from '../db/RScriptRecord'; import { setAp } from './actionPointService'; import { resResult } from '../pubUtils/util'; @@ -45,9 +44,7 @@ export async function roleLevelup(type: KING_EXP_RATIO_TYPE, roleId: string, kin await r.setRankWithRoleInfo(roleId, newLv, Date.now(), role); // 任务 - await checkTask(roleId, session.get('sid'), TASK_TYPE.ROLE_LV, newLv, false, {}); - //成长任务 - await checkActivityTask(serverId, session.get('sid'), roleId, TASK_TYPE.ROLE_LV, newLv); + await checkTask(serverId, roleId, session.get('sid'), TASK_TYPE.ROLE_LV, { oldLv: lv, lv: newLv }); // 弹出礼包 await checkPopUpCondition(serverId, roleId, POP_UP_SHOP_CONDITION_TYPE.LV_TO, { oldLv: lv, newLv }) diff --git a/game-server/app/services/redisService.ts b/game-server/app/services/redisService.ts index 2191f7e5e..83a8e41c8 100644 --- a/game-server/app/services/redisService.ts +++ b/game-server/app/services/redisService.ts @@ -307,8 +307,8 @@ export async function clearChannelServers() { * @param userCode user表唯一字符串标识 * @param sid connector服的那个sid */ -export async function roleLogin(roleId: string, userCode: string, sid: string, pkgName: string) { - let param = { userCode, sid, pkgName }; +export async function roleLogin(roleId: string, userCode: string, sid: string, pkgName: string, createTime: number) { + let param = { userCode, sid, pkgName, createTime }; return await redisClient().hsetAsync(REDIS_KEY.ONLINE_USERS, roleId, JSON.stringify(param)); } @@ -344,7 +344,8 @@ export async function getRoleOnlineInfo(roleId: string) { isOnline: true, userCode: result.userCode, sid: result.sid, - pkgName: result.pkgName + pkgName: result.pkgName, + createtime: result.createTime } } catch(e) { return { isOnline: false } @@ -354,6 +355,15 @@ export async function getRoleOnlineInfo(roleId: string) { } } +export async function getRoleCreateTime(roleId: string) { + let onlineInfo = await getRoleOnlineInfo(roleId); + if(onlineInfo.isOnline) { + return onlineInfo.createtime; + } else { + return null + } +} + /** * 获得所有在线的玩家 */ @@ -440,16 +450,16 @@ export async function readDataBase() { async function setServerList() { const serverList = await ServerlistModel.getAllServerList(); - await redisClient().delAsync(REDIS_KEY.DB_GAME); + await redisClient().delAsync(REDIS_KEY.SERVER); - for(let { id, name } of serverList) { + for(let { id, name, openTime } of serverList) { // console.log(roleId); - await redisClient().hsetAsync(REDIS_KEY.DB_GAME, `${id}`, name); + await redisClient().hsetAsync(REDIS_KEY.SERVER, `${id}`, `${name}|${openTime}`); } } export async function getAllServers() { - let servers = await redisClient().hgetallAsync(REDIS_KEY.DB_GAME); + let servers = await redisClient().hgetallAsync(REDIS_KEY.SERVER); let serverlist = new Array(); for(let serverStr in servers) { let serverId = parseInt(serverStr); @@ -462,10 +472,17 @@ export async function getAllServers() { } export async function getServerName(serverId: number) { - let name = await redisClient().hgetAsync(REDIS_KEY.DB_GAME, `${serverId}`); + let value = await redisClient().hgetAsync(REDIS_KEY.SERVER, `${serverId}`); + let name = value.split('|')[0]; return name||'常山少年' } +export async function getServerCreateTime(serverId: number) { + let value = await redisClient().hgetAsync(REDIS_KEY.SERVER, `${serverId}`); + let time = value.split('|')[1]; + return parseInt(time); +} + export function redisClient() { const client: Redis.RedisClient = pinus.app.get('redis'); return client; diff --git a/game-server/app/services/role/createHero.ts b/game-server/app/services/role/createHero.ts index 8ae70d02e..750866b68 100644 --- a/game-server/app/services/role/createHero.ts +++ b/game-server/app/services/role/createHero.ts @@ -4,7 +4,6 @@ import { HeroModel, HeroSkin, HeroType, HeroUpdate } from "../../db/Hero"; import { RoleModel, RoleType, RoleUpdate } from "../../db/Role"; import { SkinUpdate } from "../../db/Skin"; import { Figure, TopHero } from "../../domain/dbGeneral"; -import { accomplishTask, checkTask, checkTaskWithHeroes } from '../../pubUtils/taskUtil'; import { combineFigureInfo, unlockFigureWithoutSave } from '../../pubUtils/itemUtils'; import { TaskListReturn } from "../../domain/roleField/task"; import { GuildModel, GuildType } from "../../db/Guild"; @@ -15,10 +14,10 @@ import { nowSeconds } from "../../pubUtils/timeUtil"; import { saveCeChangeLog } from "../../pubUtils/logUtil"; import { reduceCe, resResult } from "../../pubUtils/util"; import { AttributeCal } from "../../domain/roleField/attribute"; -import { ActivityInRemote } from "../../domain/activityField/activityField"; import { HeroShowParam } from "../../domain/roleField/hero"; import { pinus } from "pinus"; import { Rank } from "../rankService"; +import { checkTaskInCreateHero } from "../task/taskService"; export class UpdateHeroes { roleId: string; @@ -188,36 +187,17 @@ export class CreateHeroes extends UpdateHeroes { this.resultHeroes = await HeroModel.insertHeroes(this.roleId, this.roleName, this.serverId, heroeInfos); } - public async clearTask(activitiesTypeMap: ActivityInRemote[]) { - // 任务 - // console.log('****** checkTask before', Date.now()) - let m1 = await checkTask(this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, true, {}); - let m2 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_QUALITY, this.resultHeroes); - let m3 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_QUALITY_STAR_UP, this.resultHeroes); - let m4 = await checkTaskWithHeroes(this.roleId, TASK_TYPE.HERO_LV, this.resultHeroes); - this.taskPushMessage.push(...m1, ...m2, ...m3, ...m4); - // console.log('****** checkTask after', Date.now()) - //成长任务 - // console.log('****** accomplishTask before', Date.now()) - let mm1 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_NUM, this.heroNum, null, activitiesTypeMap) - console.log('****mn1', mm1) - let mm2 = await accomplishTask(this.serverId, this.roleId, TASK_TYPE.HERO_QUALITY, this.heroNum, { heroes: this.resultHeroes }, activitiesTypeMap); - // console.log('****** accomplishTask after', Date.now()) - this.activityTaskPushMessage.push(...mm1, ...mm2); - } - public async pushMessage(sid: string) { let role = await this.getRole(); let uids = [{ uid: this.roleId, sid }]; pinus.app.get('channelService').pushMessageByUids('onPlayerCeUpdate', resResult(STATUS.SUCCESS, { ce: reduceCe(role.ce) , heros: this.pushHeroes.map(cur => { return {...cur, ce: reduceCe(cur.ce), incHeroCe: reduceCe(cur.incHeroCe) }}), topLineupCe: reduceCe(role.topLineupCe) }), uids); - pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, this.taskPushMessage), uids); - pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, this.activityTaskPushMessage), uids); let figureInfo = combineFigureInfo(this.figureInfos); if (!!figureInfo && (figureInfo.heads.length > 0 || figureInfo.frames.length > 0 || figureInfo.spines.length > 0)) { pinus.app.get('channelService').pushMessageByUids('onHeadChange', resResult(STATUS.SUCCESS, { ...figureInfo }), uids); } pinus.app.get('channelService').pushMessageByUids('onHeroSkinChange', resResult(STATUS.SUCCESS, this.skinPushMessages), uids); pinus.app.get('channelService').pushMessageByUids('onHeroUpdate', resResult(STATUS.SUCCESS, { heroes: this.getResultHeroes() }), uids); + checkTaskInCreateHero(this.serverId, this.roleId, sid, this.heroNum, this.resultHeroes) } public getResultHeroes() { diff --git a/game-server/app/services/role/rewardService.ts b/game-server/app/services/role/rewardService.ts index a837224e8..0c42bcee2 100644 --- a/game-server/app/services/role/rewardService.ts +++ b/game-server/app/services/role/rewardService.ts @@ -600,7 +600,6 @@ export async function createHeroes(roleId: string, roleName: string, sid: string if (infos.size > 0) { let createHero = new CreateHeroes(roleId, roleName, serverId); await createHero.createWithHeroInfo(infos); - await createHero.clearTask(await getActivities()) await createHero.pushMessage(sid); await createHero.updateRedisRank(); heroes = createHero.getShowHeroes(); diff --git a/game-server/app/services/task/taskObj.ts b/game-server/app/services/task/taskObj.ts index 5ff80e536..3341c941e 100644 --- a/game-server/app/services/task/taskObj.ts +++ b/game-server/app/services/task/taskObj.ts @@ -1,5 +1,6 @@ import { pinus } from "pinus"; -import { ACTIVITY_TYPE, STATUS, TASK_SUM_TYPE, TASK_TYPE } from "../../consts"; +import { ABI_STAGE, ACTIVITY_TYPE, STATUS, TASK_SUM_TYPE, TASK_TYPE, WAR_TYPE } from "../../consts"; +import { ActivityModelType } from "../../db/Activity"; import { ActivityBuyRecordsModel } from "../../db/ActivityBuyRecords"; import { ActivityDailyChallengesModel } from "../../db/ActivityDailyChallenges"; import { ActivityGrowthModel } from "../../db/ActivityGrowth"; @@ -7,7 +8,7 @@ import { ActivityGrowthFundModel } from "../../db/ActivityGrowthFund"; import { ActivityRefreshTaskModel } from "../../db/ActivityRefreshTask"; import { ActivityThirtyDaysModel } from "../../db/ActivityThirtyDays"; import { ActivityTreasureHuntTaskModel } from "../../db/ActivityTreasureHuntTask"; -import { RoleType } from "../../db/Role"; +import { RoleModel, RoleType } from "../../db/Role"; import { ServerTempModel, ServerTempModelType } from "../../db/ServerTemp"; import { UserTaskRecModel } from "../../db/UserTaskRec"; import { GrowthFundData } from "../../domain/activityField/growthFundField"; @@ -15,57 +16,169 @@ import { RefreshTaskData } from "../../domain/activityField/refreshTaskField"; import { SevenDaysData } from "../../domain/activityField/sevenDaysField"; import { ThirtyDaysData } from "../../domain/activityField/thirtyDaysField"; import { TreasureHuntData } from "../../domain/activityField/treasureHuntField"; -import { TaskListReturn, UpdateTaskParam } from "../../domain/roleField/task"; +import { TaskListReturn, TaskParam, TaskParamInter, UpdateTaskParam } from "../../domain/roleField/task"; import { gameData } from "../../pubUtils/data"; import { getZeroPoint } from "../../pubUtils/timeUtil"; import { resResult } from "../../pubUtils/util"; import { getActivities, getActivitiesByType, getActivityByServerId } from "../activity/activityService"; -import { getRoleOnlineInfo } from "../redisService"; +import { getRoleCreateTime, getRoleOnlineInfo, getServerCreateTime } from "../redisService"; + +export class CheckTask { + serverId: number; // 区id + roleId: string; // 玩家id + role?: RoleType; + roleCreateTime: number; // 玩家的创建时间 + serverCreateTime: number; // 服务器的创建时间 + + taskPushMessages: TaskListReturn[] = []; + activityTaskPushMessages = []; + + treasureHuntTemp: ServerTempModelType; + tasks: CheckSingleTask[] = []; + + constructor(serverId: number, roleId: string) { + this.serverId = serverId; + this.roleId = roleId; + } + + public setParam(taskType: TASK_TYPE, param: TaskParamInter) { + let task = new CheckSingleTask(taskType, this); + task.param.setParam(param); + this.tasks.push(task); + } + + public async saveAndPush(sid: string) { + for(let task of this.tasks) { + await task.check(); + } + await this.pushMessage(sid); + } + + public setRole(role: RoleType) { + this.role = role; + } + + // 用于活动任务:获取服务器开服时间 + async getServerCreateTime() { + if(!this.serverCreateTime) { + this.serverCreateTime = await getServerCreateTime(this.serverId); + } + return this.serverCreateTime; + } + + // 用于活动任务:获取玩家创建时间 + async getRoleCreateTime() { + if(!this.roleCreateTime) { + if(this.role) { + this.roleCreateTime = this.role?.createTime; + } else { + this.roleCreateTime = await getRoleCreateTime(this.roleId); + } + } + if(!this.roleCreateTime) { + let role = await RoleModel.findByRoleId(this.roleId); + this.role = role; + this.roleCreateTime = role.createTime; + } + return this.roleCreateTime; + } + + // 神州探秘活动 + async getTreasureHuntTemp() { + if(this.treasureHuntTemp) return this.treasureHuntTemp; + + let tempData: ServerTempModelType = await ServerTempModel.findData(this.serverId); + if (tempData) { + this.treasureHuntTemp = tempData; + return tempData + } else { + return null + } + } + + // 推送 + public async pushMessage(sid: string) { + let roleId = this.roleId; + if (!sid) { + let onlineUser = await getRoleOnlineInfo(roleId); + sid = onlineUser.sid; + } + let uids = [{ uid: roleId, sid }]; + if(!!sid) { + if (this.taskPushMessages.length > 0) { + pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, this.taskPushMessages), uids); + } + if (this.activityTaskPushMessages.length > 0) { + pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, this.activityTaskPushMessages), uids); + } + } + } + +} /** * @class CheckTask * @classdesc 检查某个玩家任务的达成情况 */ -export class CheckTask { +export class CheckSingleTask { serverId: number; // 区id roleId: string; // 玩家id taskType: TASK_TYPE; // 任务type - roleCreateTime: number; // 玩家的创建时间 - serverCreateTime: number; // 服务器的创建时间 - + parent: CheckTask; param: TaskParam; // 检查任务时传入的参数 - treasureHuntTemp: ServerTempModelType; - - constructor(serverId: number, roleId: string, taskType: TASK_TYPE, roleCreateTime: number, serverCreateTime: number) { - this.serverId = serverId; - this.roleId = roleId; + constructor(taskType: TASK_TYPE, parent: CheckTask) { this.taskType = taskType; - this.roleCreateTime = roleCreateTime; - this.serverCreateTime = serverCreateTime; + this.parent = parent; + this.serverId = parent.serverId; + this.roleId = parent.roleId; this.param = new TaskParam(); } + private addTaskPushMessage(...param: TaskListReturn[]) { + this.parent.taskPushMessages.push(...param); + } + + private addActivityTaskPushMessage(...param: any[]) { + this.parent.activityTaskPushMessages.push(...param); + } + + private getServerCreateTime() { + return this.parent.getServerCreateTime(); + } + + private getRoleCreateTime() { + return this.parent.getRoleCreateTime(); + } + + private getRole() { + return this.parent.role; + } + /** * @description 检查任务的主程序 */ - public async check(count: number, sid: string) { - let { taskType, roleId, serverId, roleCreateTime, serverCreateTime } = this; + public async check() { + let { taskType, roleId, serverId } = this; + let serverCreateTime = await this.getServerCreateTime(); + let roleCreateTime = await this.getRoleCreateTime(); + let param = this.param; let dicTaskTypeDesc = gameData.taskDescByType.get(taskType); - let taskPushMessages: TaskListReturn[] = []; - let activityTaskPushMessages = []; // 检查一般任务 let dicTasks = gameData.taskType.get(taskType); for (let dicTask of dicTasks) { - let taskUpdateParam = this.checkIsMatch(dicTask.taskParam, count); + let taskUpdateParam = await this.checkIsMatch(dicTask.taskParam, async () => { + let data = await UserTaskRecModel.findByRoleAndGroup(roleId, dicTask.type, taskType, dicTask.group); + return data? data.records: [] + }); if (taskUpdateParam) { - let rec = await UserTaskRecModel.checkAndUpdateTask(roleId, dicTask.type, taskType, dicTask.group, taskUpdateParam); + let rec = await UserTaskRecModel.setOrIncTask(roleId, dicTask.type, taskType, dicTask.group, taskUpdateParam); if (!rec) continue; if (rec.received && rec.received.includes(dicTask.id)) continue; // 已领取,不再推送 let received = rec.received || []; - taskPushMessages.push({ type: dicTask.type, id: dicTask.id, count: rec.count, received: received.includes(dicTask.id) }); + this.addTaskPushMessage({ type: dicTask.type, id: dicTask.id, count: rec.count, received: received.includes(dicTask.id) }); } } @@ -83,11 +196,14 @@ export class CheckTask { let playerData = new SevenDaysData(activity, roleCreateTime, serverCreateTime); let growthTaskArray = playerData.growth.findTaskByType(taskType); // 所有任务 for (let task of growthTaskArray) { - let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { + let data = await ActivityGrowthModel.findDataByCellIndex(serverId, activityId, roleId, task.dayIndex, task.cellIndex); + return data? data.records: [] + }); if(taskUpdateParam) { - let rec = await ActivityGrowthModel.checkAndUpdateTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); + let rec = await ActivityGrowthModel.setOrIncTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); if(!rec) continue; - activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "growth" }); + this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "growth" }); } } //今日挑战统计 @@ -96,11 +212,14 @@ export class CheckTask { if(dicTaskTypeDesc.sumType == TASK_SUM_TYPE.DO && task.dayIndex != playerData.today()) { continue; } - let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { + let data = await ActivityDailyChallengesModel.findDataByCellIndex(serverId, activityId, roleId, task.dayIndex, task.cellIndex); + return data? data.records: [] + }); if(taskUpdateParam) { - let rec = await ActivityDailyChallengesModel.checkAndUpdateTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); + let rec = await ActivityDailyChallengesModel.setOrIncTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); if(!rec) continue; - activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "daily" }); + this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "daily" }); } } break; @@ -111,11 +230,14 @@ export class CheckTask { let taskActivity = new RefreshTaskData(activity, roleCreateTime, serverCreateTime); let taskArray = taskActivity.findTaskByType(taskType); for (let task of taskArray) { - let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { + let data = await ActivityRefreshTaskModel.findDataById(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id); + return data? data.records: [] + }); if(taskUpdateParam) { - let rec = await ActivityRefreshTaskModel.checkAndUpdateTask(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, taskUpdateParam); + let rec = await ActivityRefreshTaskModel.setOrIncTask(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, taskUpdateParam); if(!rec) continue; - activityTaskPushMessages.push({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId }); + this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId }); } } break; @@ -123,16 +245,19 @@ export class CheckTask { case ACTIVITY_TYPE.TREASURE_HUNT: { // 寻宝奇兵任务 - let tempData = await this.getTreasureHuntTemp(); + let tempData = await this.parent.getTreasureHuntTemp(); if(tempData && tempData.huntActivityId == activityId) { let playerData = new TreasureHuntData(activity, roleCreateTime, serverCreateTime); let taskArray = playerData.tasks.findItemByTaskType(taskType); for (let task of taskArray) { - let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { + let data = await ActivityTreasureHuntTaskModel.findDataByCellIndex(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex); + return data? data.records: []; + }); if(taskUpdateParam) { - let rec = await ActivityTreasureHuntTaskModel.checkAndUpdateTask(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex, taskUpdateParam); + let rec = await ActivityTreasureHuntTaskModel.setOrIncTask(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex, taskUpdateParam); if(!rec) continue; - activityTaskPushMessages.push({ ...task, totalCount: rec.totalCount, activityId }); + this.addActivityTaskPushMessage({ ...task, totalCount: rec.totalCount, activityId }); } } } @@ -144,11 +269,14 @@ export class CheckTask { let thirtyDaysActivity = new ThirtyDaysData(activity, roleCreateTime, serverCreateTime); let taskArray = thirtyDaysActivity.findTaskByType(taskType); for (let task of taskArray) { - let taskUpdateParam = this.checkIsMatch(task.taskParamArray, count); + let taskUpdateParam = await this.checkIsMatch(task.taskParamArray, async () => { + let data = await ActivityThirtyDaysModel.findDataByCellIndex(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab); + return data? data.records: []; + }); if(taskUpdateParam) { - let rec = await ActivityThirtyDaysModel.checkAndUpdateTask(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, taskUpdateParam); + let rec = await ActivityThirtyDaysModel.setOrIncTask(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, taskUpdateParam); if(!rec) continue; - activityTaskPushMessages.push({ ...task, totalCount: rec.totalCount, activityId }); + this.addActivityTaskPushMessage({ ...task, totalCount: rec.totalCount, activityId }); } } break; @@ -158,17 +286,7 @@ export class CheckTask { { //主线成长基金 if(taskType != TASK_TYPE.BATTLE_MAIN) continue; - - let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime); - let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, roleId); - growthFundActivity.setPlayerRecords(playerRecords); - if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 - let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); - growthFundActivity.initBuyRecords(buyRecords); - } - let taskArray = growthFundActivity.unLockItem(this.param.warId); - //推送 - activityTaskPushMessages.push(...taskArray); + await this.checkFundAcctivityTask(activity, param.warId); break; } case ACTIVITY_TYPE.GROWTH_FUND_TOWER: @@ -176,17 +294,7 @@ export class CheckTask { { //镇念塔成长基金 if(taskType != TASK_TYPE.BATTLE_TOWER_LV) continue; - - let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime); - let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, roleId); - growthFundActivity.setPlayerRecords(playerRecords); - if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 - let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); - growthFundActivity.initBuyRecords(buyRecords); - } - let taskArray = growthFundActivity.unLockItem(this.param.towerLv); - //推送 - activityTaskPushMessages.push(...taskArray); + await this.checkFundAcctivityTask(activity, param.towerLv); break; } case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE: @@ -194,77 +302,448 @@ export class CheckTask { { //精英成长基金 if(taskType != TASK_TYPE.BATTLE_MAIN_ELITE) continue; - - let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime); - let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, roleId); - growthFundActivity.setPlayerRecords(playerRecords); - if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 - let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); - growthFundActivity.initBuyRecords(buyRecords); - } - let taskArray = growthFundActivity.unLockItem(this.param.warId); - //推送 - activityTaskPushMessages.push(...taskArray); + await this.checkFundAcctivityTask(activity, param.warId); break; } } } - if (taskPushMessages.length > 0) { - if (!sid) { - let onlineUser = await getRoleOnlineInfo(roleId); - sid = onlineUser.sid; - } - if (!!sid) { - let uids = [{ uid: roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, taskPushMessages), uids); - } - } - if (activityTaskPushMessages?.length > 0) { - if (!sid) { - let onlineUser = await getRoleOnlineInfo(roleId); - sid = onlineUser.sid; - } - if (!!sid) { - let uids = [{ uid: roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, activityTaskPushMessages), uids); - } - } } - public checkIsMatch(dicTaskParam: number[], count: number): UpdateTaskParam { + private async checkFundAcctivityTask(activity: ActivityModelType, unlockParam: number) { + let serverCreateTime = await this.getServerCreateTime(); + let roleCreateTime = await this.getRoleCreateTime(); + let growthFundActivity = new GrowthFundData(activity, roleCreateTime, serverCreateTime); + let playerRecords = await ActivityGrowthFundModel.findData(activity.activityId, this.roleId); + growthFundActivity.setPlayerRecords(playerRecords); + if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 + let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, this.roleId); + growthFundActivity.initBuyRecords(buyRecords); + } + let taskArray = growthFundActivity.unLockItem(unlockParam); + //推送 + this.addActivityTaskPushMessage(...taskArray); + } + + public async checkIsMatch(dicTaskParam: number[], getRecord: () => Promise) { let param = this.param; + let result: UpdateTaskParam = null; switch(this.taskType) { - case TASK_TYPE.LOGIN_SUM: + case TASK_TYPE.LOGIN_SUM: // 1. 累计登录 x 天 { + let role = this.getRole(); let today = getZeroPoint(); - if (today > param.role.loginTime) { - return { inc: count } + if (today > role.loginTime) { + result = { inc: 1 } } + break; + } + case TASK_TYPE.LOGIN_SERIES: // 2. 连续登录 x 天 + { + let role = this.getRole(); + let today = getZeroPoint(); + if (today > role.loginTime) { + if (today - role.loginTime > 24 * 60 * 60) { + result = { set: 1 } + } else { + result = { inc: 1 } + } + } + break; + } + case TASK_TYPE.ROLE_LV: // 3. 主公达x级 + { + let { lv, oldLv } = param; + if(oldLv < dicTaskParam[0] && lv >= dicTaskParam[0]) { + result = { set: lv } + } + break; + } + case TASK_TYPE.GACHA: // 4. 招募x次 + { + let { count } = param; + result = { inc: count }; + break; + } + case TASK_TYPE.HERO_NUM: // 5. 拥有x名武将 + { + let { heroNum } = param; + result = { inc: heroNum }; + break; + } + case TASK_TYPE.HERO_STAR_UP: // 6. x名武将升星x次 + { + let { hero } = param; + let records = await getRecord(); + let count = 0, index = -1; + for(let i = 0; i < records.length; i++) { + let arr = records[i].split('|'); + if(parseInt(arr[0]) == hero.hid) { + count = parseInt(arr[1]); + index = i; + break; + } + } + if(count + 1 >= dicTaskParam[1]) { + records[index] = `${hero.hid}_${count + 1}`; + result = { inc: 1, records } + } else { + records.push(`${hero.hid}_${count + 1}`); + result = { records } + } + break; + } + case TASK_TYPE.HERO_QUALITY: // 7. 拥有x名初始x品质武将 + { + let { heroes } = param; + let num = 0; + for(let { hid } of heroes) { + let dicHero = gameData.hero.get(hid); + if(dicHero.quality == dicTaskParam[1]) { + num ++; + } + } + result = { inc: num }; + break; + } + case TASK_TYPE.HERO_QUALITY_STAR_UP: // 8. x名x品质升至x星 + { + let { heroes, hero, oldStar } = param; + if(param.heroes) { // 创建武将的时候 + let num = 0; + for(let { hid, star } of heroes) { + let dicHero = gameData.hero.get(hid); + if(dicHero.quality == dicTaskParam[1] && star == dicTaskParam[2]) { + num ++; + } + } + result = { inc: num }; + } else { // 武将升星的时候 + let dicHero = gameData.hero.get(hero.hid); + if(dicHero.quality == dicTaskParam[1] && hero.star >= dicTaskParam[2] && oldStar < dicTaskParam[2]) { + result = { inc: 1 } + } + } + break; + } + case TASK_TYPE.HERO_LV: // 9. x名武将升至x级 + { + let { heroes, hero, oldLv } = param; + if(heroes) { // 创建武将的时候 + let num = 0; + for(let { lv } of heroes) { + if(lv >= dicTaskParam[1]) { + num ++; + } + } + result = { inc: num }; + } else { // 武将升级的时候 + if(hero.lv >= dicTaskParam[1] && oldLv < dicTaskParam[1]) { + result = { inc: 1 } + } + } + break; + } + case TASK_TYPE.HERO_TRAIN: // 10. x名武将各训练x次 + { + let { hero, trainCount } = param; + let records = await getRecord(); + let count = 0, index = -1; + for(let i = 0; i < records.length; i++) { + let arr = records[i].split('|'); + if(parseInt(arr[0]) == hero.hid) { + count = parseInt(arr[1]); + index = i; + break; + } + } + if( count < dicTaskParam[1] && count + trainCount >= dicTaskParam[1]) { + records[index] = `${hero.hid}_${count + trainCount}`; + result = { inc: 1, records } + } else { + records.push(`${hero.hid}_${count + trainCount}`); + result = { records } + } + break; + } + case TASK_TYPE.HERO_QUALITY_UP: // 11. x名武将进行升品 + { + let { hero } = param; + let records = await getRecord(); + if(records.indexOf(`${hero.hid}`) == -1) { + records.push(`${hero.hid}`); + result = { records, inc: 1 }; + } + break; + } + case TASK_TYPE.HERO_WAKE_UP: // 12.武将觉醒x次 + { + let { hero, oldColorStar } = param; + if(oldColorStar == 0 && hero.colorStar > 0) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.HERO_TRAIN_SUM: // 13. 训练x次 + { + let { trainCount } = param; + result = { inc: trainCount }; + break; + } + case TASK_TYPE.HERO_STAGE_UP: // 14. x名武将各兵种进阶x次 + { + let { hero, stageUpCnt } = param; + let records = await getRecord(); + let count = 0, index = -1; + for(let i = 0; i < records.length; i++) { + let arr = records[i].split('|'); + if(parseInt(arr[0]) == hero.hid) { + count = parseInt(arr[1]); + index = i; + break; + } + } + if( count < dicTaskParam[1] && count + stageUpCnt >= dicTaskParam[1]) { + records[index] = `${hero.hid}_${count + stageUpCnt}`; + result = { inc: 1, records } + } else { + records.push(`${hero.hid}_${count + stageUpCnt}`); + result = { records } + } + break; + } + case TASK_TYPE.HERO_FAVOUR_LV: // 15. + { + let { hero, oldFavourLv } = param; + if(dicTaskParam[1] > oldFavourLv && dicTaskParam[1] <= hero.favourLv) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.HERO_CONNECT: // 16. 激活x次 x星 武将羁绊 + { + let { connectLv } = param; + if(dicTaskParam[1] == connectLv) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.CHAT: + { + if (dicTaskParam[0] == 0 || dicTaskParam[0] == param.chatType) { + result = { inc: param.count }; + } + break; + } + case TASK_TYPE.FRIEND_NUM: + { + let role = this.getRole(); + result = { set: role.friendCnt }; + break; + } + case TASK_TYPE.BATTLE_WITH_HERO: // 38. 使用hId武将挑战x关卡x次 + { + let { warId, battleHeroes } = param; + if(this.checkIdList(dicTaskParam, 2, warId) && battleHeroes.indexOf(dicTaskParam[0]) != -1) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.BATTLE_MAIN: // 39. 主线通关第x关 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.NORMAL) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_MAIN_SWEEP: // 40. 主线扫荡X次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.NORMAL) { + result = { inc: count } + } + break; + } + case TASK_TYPE.BATTLE_DAILY_STAR: // 42. 每日x星通关 x 次 + { + let { warId, battleStar } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.DAILY && (dicTaskParam[0] == 0|| dicTaskParam[0] == battleStar) && this.checkIdList(dicTaskParam, 2, warId)) { + result = { inc: 1 } + } + break; + } + case TASK_TYPE.BATTLE_DAILY: // 43. 每日关卡挑战x次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if(dicTaskParam[0] == 0 || dicTaskParam[0] == dicWar.dailyType) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_DUNGEON: // 44. 参与秘境x次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if(dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_DUNGEON_WAR: // 45. 秘境通关x关x难度 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE && this.checkIdList(dicTaskParam, 0, warId)) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_TOWER: // 47. 通关镇念塔x次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.TOWER) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_VESTIGE: // 48. 挑战遗迹x次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.VESTIGE) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_EXPEDITION: // 49. 开启远征x次 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.EXPEDITION) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.COM_BATTLE_CREATE_TEAM: // 51. 寻宝招募队友x次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.COM_BATTLE_ASSIST_TEAM: // 53. 协助寻宝x次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.COM_BATTLE: // 54. 组队寻宝 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.PVP_RECEIVE_BOX: // 59. 领取x次pvp巅峰之路宝箱 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.PVP: // 57. pvp挑战 x 次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.PVP_WIN: // 58. pvp胜利 x 次 + { + let { isSuccess } = param; + if(isSuccess) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.PVP_WIN_SERIES: // 60. pvp连胜x次 + { + let { isSuccess } = param; + if (isSuccess) { + result = { inc: 1 }; + } else { + result = { set: 0 }; + } + break; + } + case TASK_TYPE.PVP_HERO_SCORE: // 61. pvp拥有x个积分达到x的武将 + { + let { heroScores } = param; + let count = 0; + for (let { score } of heroScores) { + if (score >= dicTaskParam[0]) { + count++; + } + } + if (count > 0) { + result = { set: count }; + } + break; + + } + case TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT: // 74. x名初始x品质武将升至X品质 + { + let { hero } = param; + let dicHero = gameData.hero.get(hero.hid); + if(dicHero.quality == dicTaskParam[1] && hero.quality == dicTaskParam[2]) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.HERO_QUALITY_WAKE_UP_COUNT: // 75. x名初始x品质武将觉醒 + { + let { hero, oldColorStar } = param; + let dicHero = gameData.hero.get(hero.hid); + if(dicTaskParam[1] == dicHero.quality && oldColorStar == 0 && hero.colorStar > 0) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT: // 76. x名武将觉醒后升至x星 + { + let { hero, oldColorStar } = param; + if(dicTaskParam[1] > oldColorStar && hero.colorStar >= dicTaskParam[1]) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.GACHA_QUALITY_COUNT: // 81. 抽到*次品质*武将 + { + let { heroes } = param; + let count = 0; + for (let hero of heroes) { + let dicHero = gameData.hero.get(hero.hid); + if(dicHero.quality == dicTaskParam[1]) count++; + } + if(count > 0) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.HERO_WAKE_UP_COUNT: // 84. x名武将觉醒 + { + let { hero, oldColorStar } = param; + if(oldColorStar == 0 && hero.colorStar > 0) { + result = { inc: 1 }; + } + break; } } + return result } - - private async getTreasureHuntTemp() { - if(this.treasureHuntTemp) return this.treasureHuntTemp; - - let tempData: ServerTempModelType = await ServerTempModel.findData(this.serverId); - if (tempData) { - this.treasureHuntTemp = tempData; - return tempData - } else { - return null - } + + private checkIdList(taskParam: number[], index: number, id: number) { + let count = taskParam[index]; + if (!count) return false; + let idList = taskParam.slice(index + 1, index + 1 + count); + return idList.indexOf(id) != -1; } -} - -class TaskParam { - role?: RoleType; // 玩家数据 - warId?: number; - towerLv?: number; - - public setRole(role: RoleType) { - this.role = role; - } - + } diff --git a/game-server/app/services/task/taskService.ts b/game-server/app/services/task/taskService.ts index 0352bfdaf..b4a71115b 100644 --- a/game-server/app/services/task/taskService.ts +++ b/game-server/app/services/task/taskService.ts @@ -1,9 +1,8 @@ -import * as taskUtil from '../../pubUtils/taskUtil'; import { RoleModel, RoleType } from '../../db/Role'; 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 { TaskParamInter, TaskListReturn } from '../../domain/roleField/task'; import { EPlace, HeroType } from '../../db/Hero'; import { getRoleOnlineInfo } from '../redisService'; import { HeroScores } from '../../db/PvpHistoryOpp'; @@ -15,187 +14,136 @@ import { gameData } from '../../pubUtils/data'; import { getSeconds, getZeroPointD } from '../../pubUtils/timeUtil'; import { RoleStatus } from '../../db/ComBattleTeam'; import { getActivities } from '../activity/activityService'; +import { CheckTask } from './taskObj'; -export async function checkTaskWithRoles(serverId: number, roleId: string, sid: string, taskType: number, roles: RoleType[]) { +export async function checkTaskWithRoles(serverId: number, roleId: string, sid: string, taskType: TASK_TYPE, roles: RoleType[]) { for (let role of roles) { if (role) { - await checkTaskWithRole(serverId, role.roleId, role.roleId == roleId ? sid : null, taskType, role); + await checkTask(serverId, role.roleId, role.roleId == roleId ? sid : null, taskType, role); } } } -export async function checkTaskWithRole(serverId: number, roleId: string, sid: string, taskType: number, role: RoleType) { - let pushMessage = await taskUtil.checkTaskWithRole(serverId, roleId, taskType, role); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskWithRole(serverId: number, roleId: string, sid: string, taskType: TASK_TYPE, role: RoleType, args?: TaskParamInter) { + let task = new CheckTask(serverId, roleId); + task.setRole(role); + task.setParam(taskType, args); + await task.saveAndPush(sid); } -export async function checkTaskWithHero(roleId: string, sid: string, taskType: number, hero: HeroType, args?: number[]) { - let pushMessage = await taskUtil.checkTaskWithHero(roleId, taskType, hero, args); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTask(serverId: number, roleId: string, sid: string, taskType: TASK_TYPE, args?: TaskParamInter) { + let task = new CheckTask(serverId, roleId); + task.setParam(taskType, args); + await task.saveAndPush(sid); } -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 checkTaskInEntry(serverId: number, roleId: string, sid: string, role: RoleType) { + let task = new CheckTask(serverId, roleId); + task.setRole(role); + task.setParam(TASK_TYPE.LOGIN_SUM, {}); + task.setParam(TASK_TYPE.LOGIN_SERIES, {}); + await task.saveAndPush(sid); } -export async function checkTaskWithEplace(roleId: string, sid: string, taskType: number, oldEquip: EPlace, newEplace: EPlace, params?: any) { - let pushMessage = await taskUtil.checkTaskWithEplace(roleId, taskType, oldEquip, newEplace, params); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskInCreateHero(serverId: number, roleId: string, sid: string, heroNum: number, heroes: HeroType[]) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.HERO_NUM, { heroNum }); + task.setParam(TASK_TYPE.HERO_QUALITY, { heroes }); + task.setParam(TASK_TYPE.HERO_QUALITY_STAR_UP, { heroes }); + task.setParam(TASK_TYPE.HERO_LV, { heroes }); + await task.saveAndPush(sid); } -export async function checkTaskWithArgs(roleId: string, sid: string, taskType: number, args: number[]) { - let pushMessage = await taskUtil.checkTaskWithArgs(roleId, taskType, args); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskInHeroStarUp(serverId: number, roleId: string, sid: string, hero: HeroType, oldStar: number) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.HERO_STAR_UP, { hero }); + task.setParam(TASK_TYPE.HERO_QUALITY_STAR_UP, { hero, oldStar }); + await task.saveAndPush(sid); } -export async function checkTaskWithWar(roleId: string, sid: string, taskType: number, warId: number, heroes: number[], count: number, star: number) { - let pushMessage = await taskUtil.checkTaskWithWar(roleId, taskType, warId, heroes, count, star); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskInHeroWakeUp(serverId: number, roleId: string, sid: string, hero: HeroType, oldColorStar: number) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.HERO_STAR_UP, { hero }); + task.setParam(TASK_TYPE.HERO_WAKE_UP, { hero, oldColorStar }); + task.setParam(TASK_TYPE.HERO_QUALITY_WAKE_UP_COUNT, { hero, oldColorStar }); + task.setParam(TASK_TYPE.HERO_WAKE_UP_COUNT, { hero, oldColorStar }); + task.setParam(TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT, { hero }); + await task.saveAndPush(sid); } -export async function checkTaskWithGoods(roleId: string, sid: string, taskType: number, goods: ItemInter[]) { - let pushMessage = await taskUtil.checkTaskWithGoods(roleId, taskType, goods); - pushTaskUpdate(roleId, sid, pushMessage); +export async function checkTaskInHeroQUalityUp(serverId: number, roleId: string, sid: string, hero: HeroType) { + // 任务 + await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_QUALITY_UP, { hero }); + // 任务 + await checkTask(serverId, sid, roleId, TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT, { hero }); + } -export async function checkTask(roleId: string, sid: string, taskType: number, count: number, isInc: boolean, param: TaskParam) { - let pushMessage = await taskUtil.checkTask(roleId, taskType, count, isInc, param); - pushTaskUpdate(roleId, sid, pushMessage); -} - -export async function pushTaskUpdate(roleId: string, sid: string, pushMessage: TaskListReturn[]) { - if (pushMessage.length > 0) { - if (!sid) { - let onlineUser = await getRoleOnlineInfo(roleId); - sid = onlineUser.sid; - } - if (!!sid) { - let uids = [{ uid: roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onTaskUpdate', resResult(STATUS.SUCCESS, pushMessage), uids); - } - } -} - - -export async function checkActivityTask(serverId: number, sid: string, roleId: string, taskType: TASK_TYPE, count: number, parma?: any) { - let pushMessage = await taskUtil.accomplishTask(serverId, roleId, taskType, count, parma, await getActivities()); - pushActivityUpdate(roleId, sid, pushMessage); - return pushMessage; -} - -export async function pushActivityUpdate(roleId: string, sid: string, pushMessage: any[]) { - // console.log('pushActivityUpdate', JSON.stringify(pushMessage)) - if (pushMessage?.length > 0) { - if (!sid) { - let onlineUser = await getRoleOnlineInfo(roleId); - sid = onlineUser.sid; - } - if (!!sid) { - let uids = [{ uid: roleId, sid }]; - pinus.app.get('channelService').pushMessageByUids('onActivityTaskUpdate', resResult(STATUS.SUCCESS, pushMessage), uids); - } - } +export async function checkTaskInHeroTrain(serverId: number, roleId: string, sid: string, hero: HeroType, trainCount: number) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.HERO_TRAIN, { hero, trainCount }); + task.setParam(TASK_TYPE.HERO_TRAIN_SUM, { hero, trainCount }); + await task.saveAndPush(sid); } /** * battle.normalBattleHandler.battleEnd 中会触发的任务,因为有点多提出来了 */ -export async function checkTaskInBattleEnd(serverId: number, roleId: string, sid: string, battleId: number, heroes: number[], star: number) { - - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_WITH_HERO, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_MAIN, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DAILY_STAR, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DAILY, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DUNGEON, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DUNGEON_WAR, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_TOWER, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_VESTIGE, battleId, heroes, 1, star); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_EXPEDITION, battleId, heroes, 1, star); - //成长任务 - let dicWar = gameData.war.get(battleId); - if (dicWar) { - if (dicWar.warType == WAR_TYPE.NORMAL) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_MAIN, 1, { warId: battleId }) - } else if (dicWar.warType == WAR_TYPE.EXPEDITION) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_EXPEDITION, 1) - } else if (dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DUNGEON, 1) - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DUNGEON_WAR, 1, { warId: battleId }) - } else if (dicWar.warType == WAR_TYPE.TOWER) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_TOWER, 1) - } else if (dicWar.warType == WAR_TYPE.DAILY) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DAILY, 1, { dailyType: dicWar.dailyType }) - } - } - + export async function checkTaskInBattleEnd(serverId: number, roleId: string, sid: string, warId: number, battleHeroes: number[], battleStar: number) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.BATTLE_WITH_HERO, { warId, battleHeroes }); + task.setParam(TASK_TYPE.BATTLE_MAIN, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_DAILY_STAR, { warId, battleStar }); + task.setParam(TASK_TYPE.BATTLE_DAILY, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_DUNGEON, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_DUNGEON_WAR, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_TOWER, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_VESTIGE, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_EXPEDITION, { warId, count: 1 }); + await task.saveAndPush(sid); } -export async function checkTaskInBattleSweep(serverId: number, roleId: string, sid: string, battleId: number, count: number) { - // 任务 - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_MAIN_SWEEP, battleId, [], count, 0); - //活动任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_MAIN_SWEEP, count, { battleId }) - - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_MAIN, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DAILY_STAR, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DAILY, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DUNGEON, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_DUNGEON_WAR, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_TOWER, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_VESTIGE, battleId, [], count, 0); - await checkTaskWithWar(roleId, sid, TASK_TYPE.BATTLE_EXPEDITION, battleId, [], count, 0); - //成长任务 - let dicWar = gameData.war.get(battleId); - if (dicWar) { - if (dicWar.warType == WAR_TYPE.NORMAL) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_MAIN, count, { warId: battleId }) - } else if (dicWar.warType == WAR_TYPE.EXPEDITION) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_EXPEDITION, count) - } else if (dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DUNGEON, count) - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DUNGEON_WAR, count, { warId: battleId }) - } else if (dicWar.warType == WAR_TYPE.TOWER) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_TOWER, count) - } else if (dicWar.warType == WAR_TYPE.DAILY) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DAILY, count, { dailyType: dicWar.dailyType }) - } - } +export async function checkTaskInBattleSweep(serverId: number, roleId: string, sid: string, warId: number, count: number) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.BATTLE_MAIN_SWEEP, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_MAIN, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_DAILY, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_DUNGEON, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_DUNGEON_WAR, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_TOWER, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_VESTIGE, { warId, count }); + task.setParam(TASK_TYPE.BATTLE_EXPEDITION, { warId, count }); + await task.saveAndPush(sid); } + export async function checkTaskInComBattleStart(roleStatus: RoleStatus[], capId: string) { // console.log('********', JSON.stringify(roleStatus), capId, quality) for (let { roleId, isRobot } of roleStatus) { if (!isRobot) { - - let { serverId } = await RoleModel.findByRoleId(roleId); + let role = await RoleModel.findByRoleId(roleId); if (roleId == capId && roleStatus.length > 1) { // 招募队友 - await checkTask(roleId, null, TASK_TYPE.COM_BATTLE_CREATE_TEAM, 1, true, {}); + await checkTaskWithRole(role.serverId, roleId, null, TASK_TYPE.COM_BATTLE_CREATE_TEAM, role); } else if (roleId !== capId) { // 协助寻宝 - await checkTask(roleId, null, TASK_TYPE.COM_BATTLE_ASSIST_TEAM, 1, true, {}); - //活动任务 - await checkActivityTask(serverId, null, roleId, TASK_TYPE.COM_BATTLE_ASSIST_TEAM, 1); + await checkTaskWithRole(role.serverId, roleId, null, TASK_TYPE.COM_BATTLE_ASSIST_TEAM, role); } - await checkTask(roleId, null, TASK_TYPE.COM_BATTLE, 1, true, {}); - //活动任务 - await checkActivityTask(serverId, null, roleId, TASK_TYPE.COM_BATTLE, 1); + await checkTaskWithRole(role.serverId, roleId, null, TASK_TYPE.COM_BATTLE, role); } } } -export async function checkTaskInPvpEnd(roleId: string, sid: string, isSuccess: boolean, heroScores: HeroScores[]) { - if (isSuccess) { - await checkTask(roleId, sid, TASK_TYPE.PVP_WIN, 1, true, {}); - await checkTask(roleId, sid, TASK_TYPE.PVP_WIN_SERIES, 1, true, {}); - } else { - await checkTask(roleId, sid, TASK_TYPE.PVP_WIN_SERIES, 0, false, {}); - } - - await checkTask(roleId, sid, TASK_TYPE.PVP_HERO_SCORE, 0, false, { heroScores }); +export async function checkTaskInPvpEnd(serverId: number, roleId: string, sid: string, isSuccess: boolean, heroScores: HeroScores[]) { + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_WIN, { isSuccess }) + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_WIN_SERIES, { isSuccess }); + await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_HERO_SCORE, { heroScores }); } +export async function checkTaskInGacha(serverId: number, roleId: string, sid: string, count: number, heroes: HeroType[]) { + await checkTask(serverId, roleId, sid, TASK_TYPE.GACHA, { count }); + await checkTask(serverId, roleId, sid, TASK_TYPE.GACHA_QUALITY_COUNT, { heroes }); +} // 获取task状态 export async function getCurTask(roleId: string, session: FrontendOrBackendSession) { diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index e112504cd..2d05d9f84 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -211,7 +211,7 @@ export enum REDIS_KEY { PVP_RANK ="pvpRank", // pvp排行榜 GUILD_INFO ="guildInfo", // 公会信息 GUILD_ACTIVE_RANK ="guildActiveRank", // 公会周活跃排行榜 - DB_GAME ='dbGame', // 服务器列表 + SERVER ='server', // 服务器列表 ONLINE_USERS ='onlineUsers', // 在线用户情况 ONLINE_TIME ='onlineTime', // 玩家在线时间 CHANNEL_SERVERS ='chat:channelServers', // 渠道对应的 chat 服务器 Id, @@ -634,7 +634,7 @@ export enum TASK_TYPE { LOGIN_SUM = 1, // 累计登录 LOGIN_SERIES = 2, // 连续登录 ROLE_LV = 3, // 主公等级 - GASHA = 4, // 招募 + GACHA = 4, // 招募 HERO_NUM = 5, // 武将数量 HERO_STAR_UP = 6, // 升星次数 HERO_QUALITY = 7, // 拥有品质 diff --git a/shared/db/ActivityDailyChallenges.ts b/shared/db/ActivityDailyChallenges.ts index a1c306db0..ba3aaeda8 100644 --- a/shared/db/ActivityDailyChallenges.ts +++ b/shared/db/ActivityDailyChallenges.ts @@ -37,44 +37,25 @@ export default class Activity_Daily_Challenges extends BaseModel { } // 更新任务 - public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findDataByCellIndex(serverId, activityId, roleId, dayIndex, cellIndex); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.totalCount >= param.max) { - canSet = false; - } else if (param.min && rec.totalCount <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(serverId, activityId, roleId, dayIndex, cellIndex, param); - } - } - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.record); + return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.record); + return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, record?: string) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, records?: string[]) { let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $set: { totalCount: count }, $addToSet: { records: record||''} }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, record?: string) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, records?: string[]) { let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $inc: { totalCount: addCount }, $addToSet: { records: record||''} }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: addCount }, $set: { records: records||[]} }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/db/ActivityGrowth.ts b/shared/db/ActivityGrowth.ts index 1a0a75c05..965688494 100644 --- a/shared/db/ActivityGrowth.ts +++ b/shared/db/ActivityGrowth.ts @@ -36,45 +36,25 @@ export default class Activity_Growth extends BaseModel { return result; } - // 更新任务 - public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findDataByCellIndex(serverId, activityId, roleId, dayIndex, cellIndex); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.totalCount >= param.max) { - canSet = false; - } else if (param.min && rec.totalCount <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(serverId, activityId, roleId, dayIndex, cellIndex, param); - } - } - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.record); + return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.record); + return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, record?: string) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, records?: string[]) { let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $set: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[] } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, record?: string) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, records?: string[]) { let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $inc: { totalCount: addCount }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: addCount }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/db/ActivityRefreshTask.ts b/shared/db/ActivityRefreshTask.ts index 2bd9761cb..e611e75fa 100644 --- a/shared/db/ActivityRefreshTask.ts +++ b/shared/db/ActivityRefreshTask.ts @@ -40,45 +40,26 @@ export default class Activity_Refresh_Task extends BaseModel { // 更新任务 - public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findDataById(serverId, activityId, roleId, roundIndex, pageIndex, id); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.totalCount >= param.max) { - canSet = false; - } else if (param.min && rec.totalCount <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(serverId, activityId, roleId, roundIndex, pageIndex, id, param); - } - } - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.set, param.record); + return await this.setTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.inc, param.record); + return await this.addTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, record?: string) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, records?: string[]) { let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id }, - { $set: { totalCount: count }, $setOnInsert: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[] }}, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, record?: string) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, records?: string[]) { let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id }, - { $inc: { totalCount: count }, $setOnInsert: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: count }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/db/ActivityThirtyDays.ts b/shared/db/ActivityThirtyDays.ts index b43a02d71..f6d393ed2 100644 --- a/shared/db/ActivityThirtyDays.ts +++ b/shared/db/ActivityThirtyDays.ts @@ -66,30 +66,11 @@ export default class Activity_Thirty_Days extends BaseModel { // 更新任务 - public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findDataByCellIndex(serverId, activityId, roleId, pageIndex, cellIndex, tab); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.totalCount >= param.max) { - canSet = false; - } else if (param.min && rec.totalCount <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(serverId, activityId, roleId, pageIndex, cellIndex, tab, param); - } - } - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.set, param.record); + return await this.setTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.inc, param.record); + return await this.addTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.inc, param.records); } } @@ -102,16 +83,16 @@ export default class Activity_Thirty_Days extends BaseModel { } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, record?: string) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, records?: string[]) { let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab }, - { $inc: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: count }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, record?: string) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, records?: string[]) { let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab }, - { $set: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[] } }, { upsert: true, new: true }).lean(); return result; } } diff --git a/shared/db/ActivityTreasureHuntTask.ts b/shared/db/ActivityTreasureHuntTask.ts index 4d70ec83e..34a93df95 100644 --- a/shared/db/ActivityTreasureHuntTask.ts +++ b/shared/db/ActivityTreasureHuntTask.ts @@ -29,44 +29,25 @@ export default class Activity_Treasure_Hunt_Task extends ActivityGrowth { } // 更新任务 - public static async checkAndUpdateTask(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findDataByCellIndex(serverId, activityId, roleId, roundIndex, cellIndex); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.totalCount >= param.max) { - canSet = false; - } else if (param.min && rec.totalCount <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(serverId, activityId, roleId, roundIndex, cellIndex, param); - } - } - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.set, param.record); + return await this.setTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.inc, param.record); + return await this.addTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, record?: string) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, records?: string[]) { let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, cellIndex }, - { $set: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[] } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, record?: string) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, records?: string[]) { let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, cellIndex }, - { $inc: { totalCount: count }, $addToSet: { records: record||'' } }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: count }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/db/UserTaskRec.ts b/shared/db/UserTaskRec.ts index 4c6563400..694700925 100644 --- a/shared/db/UserTaskRec.ts +++ b/shared/db/UserTaskRec.ts @@ -47,51 +47,23 @@ export default class UserTaskRec extends BaseModel { } } - public static async setTaskRec(roleId: string, type: number, taskType: number, group: string, count: number, record?: string) { + public static async setTaskRec(roleId: string, type: number, taskType: number, group: string, count: number, records?: string[]) { let condition = this.getRefreshCondition(type); - let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $set: { count }, $addToSet: { records: record||'' } }, { new: true, upsert: true }).lean(); + let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $set: { count, records: records||[] } }, { new: true, upsert: true }).lean(); return rec; } - public static async incTaskRec(roleId: string, type: number, taskType: number, group: string, count: number, record?: string) { + public static async incTaskRec(roleId: string, type: number, taskType: number, group: string, count: number, records?: string[]) { let condition = this.getRefreshCondition(type); - let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $inc: { count }, $addToSet: { records: record||'' } }, { new: true, upsert: true }).lean(); + let rec: UserTaskRecType = await UserTaskRecModel.findOneAndUpdate({ roleId, group, taskType, ...condition }, { $setOnInsert: { code: genCode(8), received: [] }, $inc: { count }, $set: { records: records||[] } }, { new: true, upsert: true }).lean(); return rec; } - /** - * 检查是否可以更新任务并更新 - * @param roleId 玩家id - * @param type 任务大类型,日常、成就、每日 - * @param taskType 任务类型 - * @param group 活动组 - * @param param 更新参数 - * @returns - */ - public static async checkAndUpdateTask(roleId: string, type: TASK_FUN_TYPE, taskType: number, group: string, param: UpdateTaskParam) { - let canSet = true; - if(param.record || param.max || param.min) { - let rec = await this.findByRoleAndGroup(roleId, type, taskType, group); - if(rec) { - if(param.record && rec.records.indexOf(param.record) != -1) { - canSet = false; - } else if (param.max && rec.count >= param.max) { - canSet = false; - } else if (param.min && rec.count <= param.min) { - canSet = false; - } - } - } - if(canSet) { - return await this.setOrIncTask(roleId, type, taskType, group, param); - } - } - public static async setOrIncTask(roleId: string, type: number, taskType: number, group: string, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskRec(roleId, type, taskType, group, param.set, param.record); + return await this.setTaskRec(roleId, type, taskType, group, param.set, param.records); } else if (param.inc) { - return await this.incTaskRec(roleId, type, taskType, group, param.inc, param.record); + return await this.incTaskRec(roleId, type, taskType, group, param.inc, param.records); } } diff --git a/shared/domain/roleField/task.ts b/shared/domain/roleField/task.ts index 27314899b..8b01c93de 100644 --- a/shared/domain/roleField/task.ts +++ b/shared/domain/roleField/task.ts @@ -1,38 +1,43 @@ -import { HeroScore } from "../../domain/battleField/pvp"; +import { HeroType } from "../../db/Hero"; +import { HeroScore } from "../battleField/pvp"; + +export class TaskParamInter { + hero?: HeroType; // 武将数据 + heroes?: HeroType[]; // 很多武将数据 + count?: number; // 抽卡的次数 + + warId?: number; // 当前关卡id + towerLv?: number; // 镇念塔层数 + lv?: number; // 现玩家等级 + chatType?: number; // 聊天:聊天类型 + battleHeroes?: number[]; // 战斗时候使用的 + battleStar?: number; // 战斗结算时候的星级 + heroNum?: number; // 武将数量 + trainCount?: number; // 武将训练次数 + stageUpCnt?: number; // 武将升阶次数 + connectLv?: number; // 羁绊等级 + isSuccess?: boolean; // pvp是否胜利 + heroScores?: HeroScore[]; // pvp各武将积分 + + oldLv?: number; // 原武将等级,原玩家等级 + oldStar?: number; // 原武将星级 + oldColorStar?: number; // 原武将彩星 + oldJob?: number; // 原武将职业 + oldJobStage?: number; // 原武将职业阶 + oldFavourLv?: number; // 原好感度等级 +}; + +export class TaskParam extends TaskParamInter { + + public setParam(params: TaskParamInter) { + for(let key in params) { + this[key] = params[key]; + } + } -export class TaskParam { - star?: number; - quality?: number; - lv?: number; - count?: number; - favourLv?: number; - connectLv?: number; - isPutOn?: number; - oldLv?: number; - stage?: number; - chatType?: number; - warId?: number; - heroes?: number[]; - eventType?: number; - dailyType?: number; - point?: number; - gid?: number; - heroScores?: HeroScore[]; - rankLv?: number; - title?: number; - oldTitle?: number; - job?: number; - aid?: number; - isDebug?: boolean; - oldCount?: number; - oldStar?: number; - hid?: number; - eplaceId?: number; - oldQuality?: number; - oldStoneLvs?: number[]; - newStoneLvs?: number[]; } + export class TaskListReturn { type: number; // 类型 id: number; // 任务id @@ -43,7 +48,5 @@ export class TaskListReturn { export interface UpdateTaskParam { inc?: number; // 直接增 set?: number; // 直接设 - record?: string; // 检查是否有这条记录、没有的话增 - max?: number; // 检查是否是最大的,不是的话更 - min?: number; // 检查是否是最小的,不是的话更 + records?: string[]; // 检查是否有这条记录、没有的话增 } \ No newline at end of file diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index ebf9dc76c..e69de29bb 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -1,1530 +0,0 @@ -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 { EPlace, HeroType } from '../db/Hero'; -import { ItemInter } from './interface'; -import { DailyChallengesData } from '../domain/activityField/dailyChallengesField'; -import { splitString } from './util'; -import { ActivityModel, ActivityModelType } from '../db/Activity'; -import { ACTIVITY_TYPE } from '../consts/constModules/activityConst'; -import { ActivityGrowthModel } from '../db/ActivityGrowth'; -import { ActivityDailyChallengesModel } from '../db/ActivityDailyChallenges'; -import { ThirtyDaysData } from '../domain/activityField/thirtyDaysField'; -import { GrowthFundData } from '../domain/activityField/growthFundField'; -import { ActivityThirtyDaysModel, ActivityThirtyDaysModelType } from '../db/ActivityThirtyDays'; -import { ServerlistModel } from '../db/Serverlist'; -import { ActivityGrowthFundModel, ActivityGrowthFundModelType } from '../db/ActivityGrowthFund'; -import { ActivityBuyRecordsModel } from '../db/ActivityBuyRecords'; -import { ServerTempModel, ServerTempModelType } from '../db/ServerTemp'; -import { TreasureHuntData } from '../domain/activityField/treasureHuntField'; -import { ActivityTreasureHuntTaskModel, ActivityTreasureHuntTaskModelType } from '../db/ActivityTreasureHuntTask'; -import { SevenDaysData } from '../domain/activityField/sevenDaysField'; -import moment = require("moment"); -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'; - - - -export async function checkTaskWithRoles(serverId: number, taskType: number, roles: RoleType[]) { - let pushMessage = new Array(); - for (let role of roles) { - if (role) { - let singlePush = await checkTaskWithRole(serverId, role.roleId, taskType, role); - pushMessage.push(...singlePush); - } - } - return pushMessage -} - -export async function checkTaskWithRole(serverId: number, roleId: string, taskType: number, role: RoleType) { - let pushMessage = new Array(); - - if (taskType == TASK_TYPE.LOGIN_SUM) { - let today = getZeroPoint(); - if (today > role.loginTime) { - pushMessage = await checkTask(roleId, taskType, 1, true, {}); - //成长任务-累计登录游戏天数 - await accomplishTask(serverId, roleId, taskType, 1) - } - } - else if (taskType == TASK_TYPE.LOGIN_SERIES) { - let today = getZeroPoint(); - if (today > role.loginTime) { - if (today - role.loginTime > 24 * 60 * 60) { - pushMessage = await checkTask(roleId, taskType, 1, false, {}); - } else { - pushMessage = await checkTask(roleId, taskType, 1, true, {}); - } - } - } - else if (taskType == TASK_TYPE.FRIEND_NUM) { - let { friendCnt } = role; - pushMessage = await checkTask(roleId, taskType, friendCnt, false, {}); - } - - return pushMessage -} - - -export async function checkTaskWithHeroes(roleId: string, taskType: number, heroes: HeroType[]) { - let pushMessage = new Array(); - for (let hero of heroes) { - let singlePush = await checkTaskWithHero(roleId, taskType, hero, []); - pushMessage.push(...singlePush); - } - return pushMessage -} - -export async function checkTaskWithHero(roleId: string, taskType: number, hero: HeroType, args: number[] = []) { - let pushMessage = new Array(); - if (taskType == TASK_TYPE.HERO_STAR_UP) { - let dicHero = gameData.hero.get(hero.hid); - let starUp = hero.star - dicHero.initialStars; - if (hero.colorStar > 1) starUp += hero.colorStar - 1; - pushMessage = await checkTask(roleId, taskType, 1, true, { star: starUp }) - } - else if (taskType == TASK_TYPE.HERO_QUALITY) { - let dicHero = gameData.hero.get(hero.hid); - pushMessage = await checkTask(roleId, taskType, 1, true, { quality: dicHero.quality }); - } - else if (taskType == TASK_TYPE.HERO_QUALITY_STAR_UP) { - let dicHero = gameData.hero.get(hero.hid); - pushMessage = await checkTask(roleId, taskType, 1, true, { quality: dicHero.quality, star: hero.star }); - } - else if (taskType == TASK_TYPE.HERO_LV) { - pushMessage = await checkTask(roleId, taskType, 1, true, { lv: hero.lv, oldLv: args[0]||0 }); - } - else if (taskType == TASK_TYPE.HERO_TRAIN) { - let dicHero = gameData.hero.get(hero.hid); - let initGrage = gameData.job.get(dicHero.jobid).grade; - let curGrade = gameData.job.get(hero.job).grade; - let oldGrade = gameData.job.get(args[0]).grade; - let count = (curGrade - initGrage) * (ABI_STAGE.END - ABI_STAGE.START) + (hero.jobStage - ABI_STAGE.START); // 训练次数 - let oldCount = (oldGrade - initGrage) * (ABI_STAGE.END - ABI_STAGE.START) + (args[1] - ABI_STAGE.START); - pushMessage = await checkTask(roleId, taskType, 1, true, { count, oldCount }); - } - else if (taskType == TASK_TYPE.HERO_QUALITY_UP) { - 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); - let initGrage = gameData.job.get(dicHero.jobid).grade; - let curGrade = gameData.job.get(hero.job).grade; - let count = curGrade - initGrage; // 进阶次数 - pushMessage = await checkTask(roleId, taskType, 1, true, { count }); - } - else if (taskType == TASK_TYPE.HERO_FAVOUR_LV) { - pushMessage = await checkTask(roleId, taskType, 1, true, { favourLv: hero.favourLv, oldLv: args[0] }) - } - - 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, 1, true, { oldCount: oldEplace.length, count: newEplace.length }); - - } else { - for(let eplaceId of eplaceIds) { - let { oldEquip, newEquip } = getEquipById({ oldEplace, newEplace, eplaceId }); - 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 { oldJewel, newJewel } = getJewelByEquip(oldEquip, newEquip, { jewels: params.jewels }); - let oldLv = gameData.jewel.get(oldJewel?.id)?.lv || 0; - 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 { oldJewel, newJewel } = getJewelByEquip(oldEquip, newEquip, { jewels: params.jewels }); - - let oldRandSe = oldJewel?.randSe||[]; - let oldUnlockSeCnt = oldRandSe.filter(se => { - return isRandSeUnLock(oldJewel.id, se.id, oldEquip.stones); - }).length; - - 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 -} - - - -function getEquipById(paramObj: {oldEplace: EPlace[], newEplace: EPlace[], eplaceId: number}) { - let { oldEplace, newEplace, eplaceId } = paramObj; - let oldEquip = oldEplace.find(cur => cur.id == eplaceId)||new EPlace(eplaceId, 0); - let newEquip = newEplace.find(cur => cur.id == eplaceId)||new EPlace(eplaceId, 0); - return { oldEquip, newEquip } -} - -function getJewelByEquip(oldEquip: EPlace, newEquip: EPlace, paramObj: { jewels: JewelType[] }) { - let jewels: JewelType[] = paramObj.jewels; - let oldJewel = jewels.find(cur => cur && cur.seqId == oldEquip.jewel); - let newJewel = jewels.find(cur => cur && cur.seqId == newEquip.jewel); - return { oldJewel, newJewel } -} - -// export async function checkTaskWithEquip(roleId: string, taskType: number, equip: EquipType, args: number[] = []) { -// let pushMessage = new Array(); -// if (taskType == TASK_TYPE.EQUIP_QUALITY) { -// // args[0] 1:装上 -1:脱下 -// let dicGood = gameData.goods.get(equip.id); -// pushMessage = await checkTask(roleId, taskType, args[0], true, { quality: dicGood.quality }) -// } -// else if (taskType == TASK_TYPE.EQUIP_JEWEL) { -// // args[0] 原来镶嵌了多少宝石 -// let { holes } = equip; -// let jewelCount = holes.filter(cur => cur.jewel > 0).length; -// if (jewelCount > 0 && args[0] <= 0) { // 原来没有,镶嵌上了 -// pushMessage = await checkTask(roleId, taskType, 1, true, {}); -// } else if (jewelCount <= 0 && args[0] > 0) { // 原来镶嵌着,现在没了 -// pushMessage = await checkTask(roleId, taskType, -1, true, {}); -// } -// } -// else if (taskType == TASK_TYPE.EQUIP_COMPOSE_SUIT) { -// let dicGood = gameData.goods.get(equip.id); -// if (dicGood.suitId) { -// pushMessage = await checkTask(roleId, taskType, 1, true, {}); -// } -// } -// else if (taskType == TASK_TYPE.EQUIP_SUIT) { -// let dicGood = gameData.goods.get(equip.id); -// if (dicGood.suitId) { -// let suit = gameData.suit.get(dicGood.suitId); -// let equips = await EquipModel.getEquipsByIds(roleId, suit.tireInfo); -// let everyEquip = new Map(); -// for (let equip of equips) { -// if (everyEquip.has(equip.id)) { -// everyEquip.set(equip.id, everyEquip.get(equip.id) + 1); -// } else { -// everyEquip.set(equip.id, 1); -// } -// } -// let minCount = 0, curCount = 0; -// for (let id of suit.tireInfo) { -// let count = everyEquip.get(id) || 0; -// if (minCount > count) minCount = count; -// if (id == equip.id) curCount = count; -// } -// if (curCount == minCount) { -// pushMessage = await checkTask(roleId, taskType, 1, true, {}); -// } -// } -// } -// else if (taskType == TASK_TYPE.EQUIP_JEWEL_SUM) { -// // args[0] 原来镶嵌了多少宝石 -// let { holes } = equip; -// let jewelCount = holes.filter(cur => cur.jewel > 0).length; -// pushMessage = await checkTask(roleId, taskType, jewelCount - args[0], true, {}); -// } -// return pushMessage -// } - -export async function checkTaskWithArgs(roleId: string, taskType: number, args: number[]) { - let pushMessage = new Array(); - - if (taskType == TASK_TYPE.ROLE_SCHOOL_PUT_HERO) { - let [hid, preHid] = args; - if (hid > 0 && preHid <= 0) { // 放置 - pushMessage = await checkTask(roleId, taskType, 1, true, {}); - } else if (hid <= 0 && preHid > 0) { // 卸下 - pushMessage = await checkTask(roleId, taskType, -1, true, {}); - } - } - else if (taskType == TASK_TYPE.CHAT) { - // args[0] 聊天type 1-系统 2-世界 3-军团 4-组队 5-私聊 - pushMessage = await checkTask(roleId, taskType, 1, true, { chatType: args[0] }) - } - - return pushMessage -} - -export async function checkTaskWithWar(roleId: string, taskType: number, warId: number, heroes: number[], count: number, star: number) { - let dicWar = gameData.war.get(warId); - let pushMessage = new Array(); - if (taskType == TASK_TYPE.BATTLE_WITH_HERO) { - pushMessage = await checkTask(roleId, taskType, count, true, { warId, heroes }); - } - else if (taskType == TASK_TYPE.BATTLE_MAIN) { - if (dicWar.warType == WAR_TYPE.NORMAL) { - pushMessage = await checkTask(roleId, taskType, count, true, { warId }); - } - } - else if (taskType == TASK_TYPE.BATTLE_MAIN_SWEEP) { - if (dicWar.warType == WAR_TYPE.NORMAL) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); - } - } - else if (taskType == TASK_TYPE.BATTLE_DAILY_STAR) { - if (dicWar.warType == WAR_TYPE.DAILY) { - pushMessage = await checkTask(roleId, taskType, count, true, { warId, star }); - } - } - else if (taskType == TASK_TYPE.BATTLE_DAILY) { - if (dicWar.warType == WAR_TYPE.DAILY) { - pushMessage = await checkTask(roleId, taskType, count, true, { dailyType: dicWar.dailyType }) - } - } - else if (taskType == TASK_TYPE.BATTLE_DUNGEON) { - if (dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); - } - } - else if (taskType == TASK_TYPE.BATTLE_DUNGEON_WAR) { - if (dicWar.warType == WAR_TYPE.MYSTERY || dicWar.warType == WAR_TYPE.MYSTERY_ELITE) { - pushMessage = await checkTask(roleId, taskType, count, true, { warId }); - } - } - else if (taskType == TASK_TYPE.BATTLE_TOWER) { - if (dicWar.warType == WAR_TYPE.TOWER) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); - } - } - else if (taskType == TASK_TYPE.BATTLE_VESTIGE) { - if (dicWar.warType == WAR_TYPE.VESTIGE) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); - } - } - else if (taskType == TASK_TYPE.BATTLE_EXPEDITION) { - if (dicWar.warType == WAR_TYPE.EXPEDITION) { - pushMessage = await checkTask(roleId, taskType, count, true, {}); - } - } - return pushMessage -} - - -export async function checkTaskWithGoods(roleId: string, taskType: number, goods: ItemInter[]) { - let pushMessage = new Array(); - if (taskType == TASK_TYPE.COM_BATTLE_DROP) { - for (let { id, count } of goods) { - let push = await checkTask(roleId, taskType, count, true, { gid: id }); - pushMessage.push(...push); - } - } - return pushMessage -} - -// 根据taskType判断有哪些任务需要check的 -export async function checkTask(roleId: string, taskType: number, count: number, isInc: boolean, param: TaskParam) { - // console.log('******checkTask', roleId, taskType, count, isInc, param) - let tasks = gameData.taskType.get(taskType) || []; - let pushMessage = new Array(); - let groups = new Map(); - for (let dicTask of tasks) { - if (!groups.has(`${dicTask.type}_${dicTask.group}`)) { - groups.set(`${dicTask.type}_${dicTask.group}`, { task0: dicTask, tasks: new Array() }); - } - groups.get(`${dicTask.type}_${dicTask.group}`).tasks.push(dicTask); - } - - for (let [typeAndGroup, { task0, tasks }] of groups) { - let arr = typeAndGroup.split('_'); - let type = parseInt(arr[0]); - let group = arr[1]; - - let rec = await checkTaskRec(roleId, type, group, task0, count, isInc, param); - if (rec) { - for (let dicTask of tasks) { - if (checkRecResult(rec, dicTask.id)) { - let received = rec.received || []; - pushMessage.push({ type: dicTask.type, id: dicTask.id, count: rec.count, received: received.includes(dicTask.id) }); - } - } - } - } - return pushMessage; -} - -// 检查各项任务是否达成,达成了就保存到数据库 -export async function checkTaskRec(roleId: string, type: number, group: string, dicTask: DicTask, count: number, isInc: boolean, param: TaskParam) { - let { taskParam, taskType } = dicTask; - - let isMatch = true; // 条件是否满足 - let checkHistory = false; // 是否检查历史 - let checkRecord = ''; // 检查记录 - switch (taskType) { - case TASK_TYPE.ROLE_TITLE: - isMatch = param.title >= taskParam[0] && param.oldTitle < taskParam[0]; - checkHistory = true; - break; - case TASK_TYPE.HERO_STAR_UP: - isMatch = taskParam[1] == param.star; - break; - case TASK_TYPE.HERO_QUALITY: - isMatch = taskParam[1] == param.quality; - break; - 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; - break; - case TASK_TYPE.HERO_LV: - isMatch = param.lv >= taskParam[1] && param.oldLv < taskParam[1]; - break; - case TASK_TYPE.HERO_TRAIN: - isMatch = param.count >= taskParam[1] && param.oldCount < taskParam[1]; - break; - case TASK_TYPE.HERO_FAVOUR_LV: - isMatch = param.favourLv >= taskParam[1] && param.oldLv < taskParam[1]; - break; - case TASK_TYPE.HERO_CONNECT: - isMatch = taskParam[1] == param.connectLv; - break; - case TASK_TYPE.CHAT: - isMatch = taskParam[0] == 0 || param.chatType == taskParam[0]; - break; - case TASK_TYPE.BATTLE_WITH_HERO: - isMatch = checkIdList(taskParam, 2, param.warId) && checkHero(taskParam, 0, param.heroes); - break; - case TASK_TYPE.BATTLE_MAIN: - case TASK_TYPE.BATTLE_DUNGEON_WAR: - isMatch = checkIdList(taskParam, 0, param.warId); - break; - case TASK_TYPE.BATTLE_EVENT: - isMatch = taskParam[0] == 0 || param.eventType == taskParam[0]; - break; - case TASK_TYPE.BATTLE_DAILY_STAR: - isMatch = (taskParam[0] == 0 || param.star == taskParam[0]) && checkIdList(taskParam, 2, param.warId); - break; - case TASK_TYPE.BATTLE_DAILY: - isMatch = taskParam[0] == 0 || param.dailyType == taskParam[0]; - break; - case TASK_TYPE.BATTLE_EXPEDITION_BOX: - isMatch = taskParam[1] == 0 || param.point == taskParam[1]; - break; - case TASK_TYPE.COM_BATTLE_DROP: - isMatch = checkIdList(taskParam, 1, param.gid); - break; - case TASK_TYPE.PVP_HERO_SCORE: - for (let { score } of param.heroScores) { - if (score >= taskParam[0]) { - count++; - } - } - if (count <= 0) isMatch = false; - break; - case TASK_TYPE.PVP_RANK: - isMatch = taskParam[0] <= param.rankLv; - checkHistory = true; - break; - case TASK_TYPE.GUILD_JOB: - isMatch = taskParam[0] <= param.job && param.job != GUILD_JOB.DAJIANGJUN; - checkHistory = true; - break; - 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; - case TASK_TYPE.EQUIP_COMPOSE_CNT: - isMatch = param.oldCount < taskParam[1] && param.count >= taskParam[1]; - break; - - } - // console.log('****isMatch', isMatch, checkHistory, type, taskType, group, count) - if (param.isDebug) { - isMatch = true; - } - - if (isMatch) { - if (isInc) { - 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); - return rec; - } else { - let rec = await UserTaskRecModel.setTaskRec(roleId, type, taskType, group, count); - return rec; - } - } - } -} - -/** - * 检查id是否在某列表中 - * @param taskParam 条件number[] 填法 如: count&id&... 有多少id就count填几 - * @param index count在第几位,0开始 - * @param id 关卡id - */ -function checkIdList(taskParam: number[], index: number, id: number) { - let count = taskParam[index]; - if (!count) return false; - let idList = taskParam.slice(index + 1, index + 1 + count); - return idList.indexOf(id) != -1; -} - -function checkHero(taskParam: number[], index: number, heroes: number[]) { - let hid = taskParam[index]; - return heroes.indexOf(hid) != -1; -} - -function checkRecResult(rec: UserTaskRecType, id: number) { - if (!rec) return false; - if (rec.received && rec.received.includes(id)) return false; // 已领取,不再推送 - - return rec -} - - -/** - * 任务统计 - * - * @param {number} serverId 区Id - * @param {string} roleId 角色Id - * @param {number} taskType 任务类型 - * @param {number} count 任务数据 - * @param {number} parma 参数 - * - */ -export async function accomplishTask(serverId: number, roleId: string, taskType: TASK_TYPE, count: number, parma?: any, activities?: ActivityInRemote[]) { - - // console.log('accomplishTask', roleId, taskType, count, JSON.stringify(parma)) - let dicTaskType = gameData.taskDescByType.get(taskType); - let pushMessage = []; - /* let serverInfo = await ServerlistModel.findByServerId(serverId); - if (!serverInfo) return []; - let { activityGroupId } = serverInfo; - let findActivitiesByTypes = async (types: number[]) => { - if(activities) { - let result: ActivityModelType[] = []; - for(let activity of activities) { - if(activity.beginTime <= Date.now() && activity.endTime >= Date.now()) { - if(activityGroupId.includes(activity.groupId) && types.includes(activity.type)) { - result.push( transActivityInRemoteToModelType(activity)); - } - } - } - return result; - } else { - if(types.length > 1) { - return ActivityModel.findOpenActivityByTypes(activityGroupId, types, new Date()); - } else { - return ActivityModel.findOpenActivityByType(activityGroupId, types[0], new Date()); - } - } - } - let { createTime } = await RoleModel.findByRoleId(roleId); - //七天乐 - let allActivity: ActivityModelType[] = await findActivitiesByTypes([ACTIVITY_TYPE.SEVEN_DAY]); - for (let activity of allActivity) { - let playerData = new SevenDaysData(activity, createTime) - //成长活动统计 - let growthActivity = playerData.growth; - let growthTaskArray = growthActivity.findTaskByType(taskType); // 所有任务 - for (let task of growthTaskArray) { - let taskRecord = await ActivityGrowthModel.findDataByCellIndex(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType); - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null; - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, activity.activityId, parma, recordData); - - if (addCount) { - if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV || taskType == TASK_TYPE.FRIEND_NUM) { - let playerRecord = await ActivityGrowthModel.setTaskCount(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId, activityType: "growth" })); - } else { - let playerRecord = await ActivityGrowthModel.addTaskCount(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId, activityType: "growth" })); - } - } - if (record) { - await ActivityGrowthModel.addTaskRecord(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, JSON.stringify(record)); - } - } - //今日挑战统计 - let dailyChallengeActivity = playerData.dailyChallenge; - let dailyChallengeTaskArray = dailyChallengeActivity.findTaskByType(taskType); - for (let task of dailyChallengeTaskArray) { - if(dicTaskType.sumType == TASK_SUM_TYPE.DO && task.dayIndex != playerData.today()) { - continue; - } - - let taskRecord = await ActivityDailyChallengesModel.findDataByCellIndex(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType) - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, activity.activityId, parma, recordData); - // console.log('******* dailyChallenge', addCount, record) - if (addCount) { - if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV || taskType == TASK_TYPE.FRIEND_NUM) { - let playerRecord = await ActivityDailyChallengesModel.setTaskCount(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId, activityType: "daily" })); - } else { - let playerRecord = await ActivityDailyChallengesModel.addTaskCount(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId, activityType: "daily" })); - } - } - if (record) { - await ActivityDailyChallengesModel.addTaskRecord(serverId, activity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, JSON.stringify(record)); - } - } - } - // console.log('***** sevenDay after', Date.now()); - - // console.log('***** DailyChallenge before', Date.now()); - //今日挑战统计 - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.TASK_DAILY_CHALLENGES]); - for (let activity of allActivity) { - let growthActivity = new DailyChallengesData(activity, createTime); - let taskArray = growthActivity.findTaskByType(taskType, growthActivity.today()); - for (let task of taskArray) { - let taskRecord = await ActivityDailyChallengesModel.findDataByCellIndex(serverId, growthActivity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType) - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, growthActivity.activityId, parma, recordData); - if (addCount) { - if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV) { - let playerRecord = await ActivityDailyChallengesModel.setTaskCount(serverId, growthActivity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: growthActivity.activityId })); - } else { - let playerRecord = await ActivityDailyChallengesModel.addTaskCount(serverId, growthActivity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: growthActivity.activityId })); - } - } - if (record) { - await ActivityGrowthModel.addTaskRecord(serverId, growthActivity.activityId, roleId, task.dayIndex, task.cellIndex, task.taskType, JSON.stringify(record)); - } - } - } - // console.log('***** DailyChallenge after', Date.now()); - - // console.log('***** RefreshTask before', Date.now()); - //刷新任务统计 - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.REFRESH_TASK]); - for (let activity of allActivity) { - let taskActivity = new RefreshTaskData(activity, createTime); - let taskArray = taskActivity.findTaskByType(taskType); - for (let task of taskArray) { - let taskRecord = await ActivityRefreshTaskModel.findDataById(serverId, taskActivity.activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, task.taskType) - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, taskActivity.activityId, parma, recordData); - if (addCount) { - if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV) { - let playerRecord = await ActivityRefreshTaskModel.setTaskCount(serverId, taskActivity.activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: taskActivity.activityId })); - } else { - let playerRecord = await ActivityRefreshTaskModel.addTaskCount(serverId, taskActivity.activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, task.taskType, addCount); - //推送 - task.totalCount = playerRecord.totalCount; - task.receiveRewardCount = playerRecord.receiveRewardCount ? playerRecord.receiveRewardCount : 0; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: taskActivity.activityId })); - } - } - if (record) { - await ActivityRefreshTaskModel.addTaskRecord(serverId, taskActivity.activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, task.taskType, JSON.stringify(record)); - } - } - } - // console.log('***** RefreshTask after', Date.now()); - - // console.log('***** hunt before', Date.now()); - //寻宝骑兵活动任务 - let tempData: ServerTempModelType = await ServerTempModel.findData(serverId); - if (tempData) { - // let huntActivityId = tempData.huntActivityId; - let huntBeginTime = tempData.huntBeginTime; - let huntEndTime = tempData.huntEndTime; - let huntRoundIndex = tempData.huntRoundIndex; - let activity = await ActivityModel.findActivity(tempData.huntActivityId); - if (activity) { - let playerData = new TreasureHuntData(activity, createTime); - playerData.beginTime = moment(huntBeginTime).valueOf(); - playerData.endTime = moment(huntEndTime).valueOf(); - playerData.roundIndex = huntRoundIndex; - let taskArray = playerData.tasks.findItemByTaskType(taskType); - for (let task of taskArray) { - let taskRecord: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findDataByCellIndex(serverId, activity.activityId, roleId, huntRoundIndex, task.cellIndex); - if (!taskRecord || !taskRecord.isPush) { - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, activity.activityId, parma, recordData); - if (addCount) { - let playerRecord = await ActivityTreasureHuntTaskModel.addTreasureHuntTaskCount(serverId, activity.activityId, roleId, huntRoundIndex, task.cellIndex, addCount); - //推送 - if (task.condition <= playerRecord.totalCount) {//已经完成 - playerRecord = await ActivityTreasureHuntTaskModel.pushMessage(serverId, activity.activityId, roleId, huntRoundIndex, task.cellIndex); - task.totalCount = playerRecord.totalCount; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId })); - } else {//没有完成 - task.totalCount = playerRecord.totalCount; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: activity.activityId })); - } - } - if (record) { - await ActivityTreasureHuntTaskModel.addTreasureHuntTaskRecord(serverId, activity.activityId, roleId, huntRoundIndex, task.cellIndex, JSON.stringify(record)); - } - } - } - } - } - // console.log('***** hunt after', Date.now()); - - - // console.log('***** thirtyDay before', Date.now()); - //30天任务统计 - { - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.THIRTY_DAYS]); - for (let activity of allActivity) { - let thirtyDaysActivity = new ThirtyDaysData(activity, createTime); - let playerRecords: ActivityThirtyDaysModelType[] = await ActivityThirtyDaysModel.findData(serverId, activity.activityId, roleId); - thirtyDaysActivity.setPlayerRecords(playerRecords); - let taskArray = thirtyDaysActivity.findUncompleteTaskByType(taskType); - for (let task of taskArray) { - let taskRecord = await ActivityThirtyDaysModel.findDataByCellIndex(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, task.taskType) - let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null - let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, thirtyDaysActivity.activityId, parma, recordData); - if (addCount) { - let playerRecord = await ActivityThirtyDaysModel.addTaskCount(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, task.taskType, addCount); - //推送 - if (task.condition <= playerRecord.totalCount) {//已经完成 - playerRecord = await ActivityThirtyDaysModel.pushMessage(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, task.taskType); - task.totalCount = playerRecord.totalCount; - task.isComplete = true; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: thirtyDaysActivity.activityId })); - } else {//没有完成 - task.totalCount = playerRecord.totalCount; - pushMessage = pushMessage.concat(Object.assign(task, { activityId: thirtyDaysActivity.activityId })); - } - } - if (record) { - await ActivityThirtyDaysModel.addTaskRecord(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, task.taskType, JSON.stringify(record)); - } - - } - } - - } - // console.log('***** thirtyDay after', Date.now()); - - // console.log('***** popUpShop before', Date.now()); - //弹出商店 - // { - // allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.POP_UP_SHOP]); - // for (let activity of allActivity) { - // let allTaskData: any[] = JSON.parse(activity.data); - // for (let task of allTaskData) { - // if (task.taskType == taskType) { - // let popShopData = new PopUpShopData(task, activity.activityId); - // let beginTime = new Date(); - // let endTime = moment(new Date()).add(task.duration, 'h').toDate(); - // if (taskType == TASK_TYPE.ROLE_TERAPH_STAGE_UP) {//只要触发就弹出礼包商店 - // //推送 - // 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.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); - // let oldCount = (recordData && recordData.count) ? recordData.count : 0; - // if (oldCount < task.condition && (oldCount + addCount >= task.condition)) {//完成当天任务 - // let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, oldCount + addCount, beginTime, endTime); - // popShopData.setPlayerRecords(playerRecord) - // pushMessage = pushMessage.concat(popShopData); - // } - // await ActivityPopUpShopRecordModel.addRecord(serverId, activity.activityId, roleId, task.id, task.taskType, recordDate, addCount) - // } else if (taskType == TASK_TYPE.GUILD_TRAIN_COUNT) {//军团练兵场通关层数推送所有团员 - // if (task.taskParam[0] == parma.trainId) { - // let playerRecord = await ActivityPopUpShopModel.addTaskPushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, count, beginTime, endTime); - // popShopData.setPlayerRecords(playerRecord) - // pushMessage = pushMessage.concat(popShopData); - - // //全服推送 - // let code = parma.code; - // const guildData = await GuildModel.findByCode(code, serverId, 'members'); - // let members = guildData.members.filter(member => { return member != roleId }) - // await ActivityPopUpShopModel.addTaskArrayPushMessage(serverId, activity.activityId, members, task.id, task.taskType, count, beginTime, endTime); - - // } - // } else { - // let taskRecord = await ActivityPopUpShopModel.findDataByTaskId(serverId, activity.activityId, roleId, popShopData.id, popShopData.taskType) - // let recordData = taskRecord && taskRecord.data ? JSON.parse(taskRecord.data) : null - // if (!taskRecord || !taskRecord.isPush) { - // let { addCount, record } = isComplete(roleId, task.taskType, task.taskParam, count, activity.activityId, parma, recordData); - // if (addCount) { - // if (taskType == TASK_TYPE.ROLE_LV || taskType == TASK_TYPE.ROLE_TITLE || taskType == TASK_TYPE.BATTLE_TOWER_LV) { - // let playerRecord = await ActivityPopUpShopModel.setTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); - // //推送 - // if (task.condition <= playerRecord.totalCount) { - // playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); - // popShopData.setPlayerRecords(playerRecord) - // pushMessage = pushMessage.concat(popShopData); - // } - // } else { - // let playerRecord = await ActivityPopUpShopModel.addTaskCount(serverId, activity.activityId, roleId, task.id, task.taskType, addCount); - // //推送 - // if (task.condition <= playerRecord.totalCount) { - // playerRecord = await ActivityPopUpShopModel.pushMessage(serverId, activity.activityId, roleId, task.id, task.taskType, beginTime, endTime); - // popShopData.setPlayerRecords(playerRecord) - // pushMessage = pushMessage.concat(popShopData); - // } - // } - // } - // if (record) { - // await ActivityPopUpShopModel.addTaskRecord(serverId, activity.activityId, roleId, task.id, task.taskType, JSON.stringify(record)); - // } - // } - // } - // } - // } - // } - // } - // console.log('***** popUpShop after', Date.now()); - // console.log('***** growthFund before', Date.now()); - //主线成长基金 - if (taskType === TASK_TYPE.BATTLE_MAIN) { - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.GROWTH_FUND_MAIN, ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP]); - for (let activity of allActivity) { - let growthFundActivity = new GrowthFundData(activity, createTime); - let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId); - growthFundActivity.setPlayerRecords(playerRecords); - if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 - let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); - growthFundActivity.initBuyRecords(buyRecords); - } - let taskArray = growthFundActivity.unLockItem(parma.warId); - //推送 - pushMessage = pushMessage.concat(taskArray); - } - } - // console.log('***** growthFund after', Date.now()); - // console.log('***** growthFundTower before', Date.now()); - //镇念塔成长基金getRoleOnlineInfo - if (taskType === TASK_TYPE.BATTLE_TOWER_LV) { - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.GROWTH_FUND_TOWER, ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP]); - for (let activity of allActivity) { - let growthFundActivity = new GrowthFundData(activity, createTime); - let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId); - growthFundActivity.setPlayerRecords(playerRecords); - if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 - let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); - growthFundActivity.initBuyRecords(buyRecords); - } - let taskArray = growthFundActivity.unLockItem(parma.towerLv); - //推送 - pushMessage = pushMessage.concat(taskArray); - } - } - // console.log('***** growthFundTower after', Date.now()); - // console.log('***** growthFundElite before', Date.now()); - //精英成长基金 - if (taskType === TASK_TYPE.BATTLE_MAIN_ELITE) { - allActivity = await findActivitiesByTypes([ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP]); - for (let activity of allActivity) { - let growthFundActivity = new GrowthFundData(activity, createTime); - let playerRecords: ActivityGrowthFundModelType[] = await ActivityGrowthFundModel.findData(activity.activityId, roleId); - growthFundActivity.setPlayerRecords(playerRecords); - if (growthFundActivity.isVipActivity()) {//vip高阶需要购买 - let buyRecords = await ActivityBuyRecordsModel.findRecordsByActivityId(activity.activityId, roleId); - growthFundActivity.initBuyRecords(buyRecords); - } - let taskArray = growthFundActivity.unLockItem(parma.mainEliteWarId); - //推送 - pushMessage = pushMessage.concat(taskArray); - } - } - // console.log('***** growthFundElite after', Date.now()); - */ - return pushMessage; -} - -/** - * 达成任务标准 - * - * @param {string} roleId 角色Id - * @param {number} taskType 任务类型 - * @param {number} taskParam 任务条件数据 - * @param {number} count 数据 - * @param {number} parma 参数 - * - */ - -export function isComplete(_roleId: string, taskType: TASK_TYPE, taskParam: string, count: number, _activityId: number, paramObj?: any, recordData?: any): any { - // console.log('达成任务标准', roleId, taskType, taskParam, count, activityId, paramObj) - let param = splitString(taskParam, '&'); - let addCount: number = 0; // 条件是否满足 - let record: any = null; - switch (taskType) { - case TASK_TYPE.ROLE_LV://重置数据 - addCount = count; - break; - case TASK_TYPE.GUILD_JOIN: - addCount = count; - break; - case TASK_TYPE.LOGIN_SUM: - addCount = count; - break; - case TASK_TYPE.HERO_NUM: - addCount = count; - break; - - case TASK_TYPE.HERO_QUALITY_STAR_UP://herocount&quality&star& - addCount = (param[1] == paramObj.quality) && (param[2] == paramObj.star) ? count : 0; - break; - case TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT://herocount&quality&star& {oldQuality, quality: hero.quality} - addCount = (param[1] == paramObj.oldQuality) && (param[2] == paramObj.quality) ? count : 0; - break; - case TASK_TYPE.HERO_QUALITY_WAKE_UP_COUNT://herocount&quality - addCount = (param[1] == paramObj.quality) ? count : 0; - break; - case TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT://herocount&colorStar& colorStar:彩星 1表示觉醒 - addCount = (param[1] == paramObj.colorStar) ? count : 0; - break; - case TASK_TYPE.HERO_STAGE_UP://herocount&star& - let dicJob = gameData.job.get(paramObj.job); - addCount = (param[1] == dicJob.grade) ? count : 0; - break; - - case TASK_TYPE.ROLE_TITLE://重置数据 - addCount = param[0] <= count ? count : 0; - break; - case TASK_TYPE.GASHA: - addCount = count; - break; - case TASK_TYPE.BATTLE_MAIN: - addCount = (param[1] == paramObj.warId) ? 1 : 0; - break; - case TASK_TYPE.GUILD_TRAIN: - addCount = count; - break; - case TASK_TYPE.ROLE_SCHOOL_PUT_HERO: - addCount = count; - break; - case TASK_TYPE.GUILD_ACTIVITY: - { - let aid = paramObj.aid; - if (param[0] == 0 || aid == param[0]) { - addCount = count; - } - break; - } - case TASK_TYPE.HERO_LV://{ hid, lv} - { - let hid = paramObj.hid; - let lv = paramObj.lv; - if (lv < param[1]) { - break; - } - if (recordData) { - record = recordData; - if (recordData.indexOf(hid) != -1) { - break; - } - } else { - record = []; - } - - addCount = count; - record.push(hid) - break; - } - case TASK_TYPE.HERO_TRAIN_SUM://训练X次是所有武将的训练次数的总和达到要求就好了 - { - addCount = count; - break; - } - case TASK_TYPE.HERO_TRAIN://X名武将训练Y次,要求单名武将训练Y次,这样的武将要有X名 - { - let hid = paramObj.hid; - if (recordData) { - record = recordData; - let oldCount = record[hid]; - if (oldCount) { - if (oldCount < param[1] && (oldCount + count >= param[1])) { - addCount = count; - record[hid] = oldCount + count; - break; - } - } else { - record[hid] = count; - if (count >= param[1]) { - addCount = count; - break; - } - } - } else { - record = {}; - record[hid] = count; - if (count >= param[1]) { - addCount = count; - break; - } - } - break; - } - case TASK_TYPE.BATTLE_EXPEDITION: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_EXPEDITION_BOX: - { - addCount = count; - break; - } - case TASK_TYPE.HERO_QUALITY: - { - let quality = param[1] - let heroes = paramObj.heroes.filter(hero => { return hero.quality == quality }) - addCount = heroes.length; - break; - } - case TASK_TYPE.PVP_WIN_SERIES: - { - addCount = count; - break; - } - case TASK_TYPE.PVP_WIN: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_TOWER_LV://{towerLv} - { - let towerLv = paramObj.towerLv; - if (recordData) { - if (recordData >= towerLv) { - break; - } - } - record = towerLv; - addCount = towerLv; - break; - } - case TASK_TYPE.BATTLE_MAIN_ELITE: - { - if (paramObj.mainEliteWarId == param[1]) { - addCount = count; - } - break; - } - case TASK_TYPE.BATTLE_DUNGEON_WAR: - { - if (paramObj.warId == param[1]) { - addCount = count; - } - break; - } - case TASK_TYPE.BATTLE_DUNGEON: - { - addCount = count; - break; - } - case TASK_TYPE.HERO_NUM: - { - addCount = count; - break; - } - case TASK_TYPE.PVP: - { - addCount = count; - break; - } - case TASK_TYPE.GUILD_TRAIN_COUNT://trainId trainId& - { - if (paramObj.trainId == param[0]) { - addCount = count; - } - break; - } - case TASK_TYPE.HERO_UNLOCK:// - { - let camp = param[1] - let heroes = paramObj.dicHeroes.filter(hero => { return hero.camp == camp }) - addCount = heroes.length; - break; - } - case TASK_TYPE.GACHA_QUALITY_COUNT://count&quality& - { - let quality = param[1] - let heroes = paramObj.heroes.filter(hero => { return hero.quality == quality }) - addCount = heroes.length; - break; - } - case TASK_TYPE.ROLE_TERAPH_STAGE_UP:// - { - addCount = count; - break; - } - - case TASK_TYPE.HERO_WAKE_UP_COUNT: - { - - let hid = paramObj.hid; - if (recordData) { - record = recordData; - if (recordData.indexOf(hid) != -1) { - break; - } - } else { - record = []; - } - - addCount = count; - record.push(hid) - break; - } - case TASK_TYPE.COM_BATTLE: - { - addCount = count; - break; - } - case TASK_TYPE.COM_BATTLE_ASSIST_TEAM: - { - addCount = count; - break; - } - case TASK_TYPE.GUILD_JOIN_ACTIVITY_END: - { - addCount = count; - break; - } - case TASK_TYPE.ACTIVITY_RMB: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_EVENT: - { - if (param[0] == 0 || param[0] == paramObj.eventType) { - addCount = count; - } - break; - } - case TASK_TYPE.GUILD_DONATE: - { - addCount = count; - break; - } - case TASK_TYPE.CHAT: - { - if (param[0] == 0 || param[0] == paramObj.chatType) { - addCount = count; - } - break; - } - case TASK_TYPE.BATTLE_TOWER: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_COST_AP: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_MAIN_SWEEP: - { - addCount = count; - break; - } - case TASK_TYPE.BATTLE_DAILY: - { - console.log('*********** TASK_TYPE.BATTLE_DAILY', param[0], paramObj.dailyType) - if (param[0] == 0 || param[0] == paramObj.dailyType) { - addCount = count; - } - break; - } - case TASK_TYPE.FRIEND_SEND_HEART: - { - addCount = count; - break; - } - case TASK_TYPE.ROLE_TERAPH_STRENGTHEN: - addCount = count; - break; - case TASK_TYPE.HERO_FAVOUR_LV: - if(paramObj.lv >= param[1] && paramObj.oldLv < param[1]) { - addCount = count; - } - break; - case TASK_TYPE.GUILD_RECEIVE_BOX: - addCount = count; - break; - case TASK_TYPE.ROLE_SCHOOL_UNLOCK: - addCount = count; - break; - case TASK_TYPE.HERO_STAR_UP: - addCount = count; - break; - case TASK_TYPE.FRIEND_NUM: - addCount = count; - break; - case TASK_TYPE.ROLE_SCROLL_ACTIVE: - addCount = count; - break; - case TASK_TYPE.EQUIP_LV_TO: - { - for(let eplaceId of paramObj.eplaceIds) { - let { oldEquip, newEquip } = getEquipById({ ...paramObj, eplaceId }); - if(oldEquip.lv < param[1] && newEquip.lv >= param[1]) { - addCount += 1; - } else if (oldEquip.lv >= param[1] && newEquip.lv < param[1]) { - addCount -= 1; - } - } - break; - } - case TASK_TYPE.EQUIP_PUT_JEWEL: - { - let { oldEquip, newEquip } = paramObj; - let { oldJewel, newJewel } = getJewelByEquip(oldEquip, newEquip, paramObj); - let oldLv = gameData.jewel.get(oldJewel?.id)?.lv || 0; - let lv = gameData.jewel.get(newJewel?.id)?.lv || 0; - - if(lv >= param[1] && oldLv < param[1]) { - addCount = count; - } else if (lv < param[1] && oldLv >= param[1]) { - addCount = -count; - } - break; - } - case TASK_TYPE.EQUIP_PUT_STONE: - { - let { oldEquip, newEquip } = paramObj; - let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; - let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; - - if(oldStoneCnt < param[1] && newStoneCnt >= param[1]) { - addCount = count; - } else if (oldStoneCnt >= param[1] && newStoneCnt < param[1]) { - addCount = -count; - } - break; - } - case TASK_TYPE.EQUIP_STAR_UP_TO: - { - let { oldEquip, newEquip } = paramObj; - let oldStar = oldEquip?.star||0; - let star = newEquip?.star||0 - if(oldStar < param[1] && star >= param[1]) addCount = count; - break; - } - case TASK_TYPE.EQUIP_STAR_UP_CNT: - addCount = count; - break; - case TASK_TYPE.EQUIP_SUIT_SEID_NUM: - { - let dicEquipSuit = getEquipSuitByHero(paramObj.hid); - let oldSuitStars: number[] = [], newSuitStars: number[] = []; - for(let equipId of dicEquipSuit.equips) { - let oldEquip = paramObj.oldEplace.find(cur => cur.equipId == equipId); - oldSuitStars.push(oldEquip? oldEquip.star: 0); - let newEquip = paramObj.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++; - } - if(oldCount < param[1] && count >= param[1]) { - addCount = count; - } - break; - } - case TASK_TYPE.EQUIP_QUALITY_UP: - { - let r = `${paramObj.hid}_${paramObj.eplaceId}`; - if (recordData) { - record = recordData; - if (recordData.indexOf(r) != -1) { - break; - } - } else { - record = []; - } - - addCount = count; - record.push(r) - break; - } - case TASK_TYPE.EQUIP_QUALITY_UP_CNT: - addCount = count; - break; - case TASK_TYPE.EQUIP_QUALITY_UP_TO: - { - let { oldEquip, newEquip } = paramObj; - let oldQuality = oldEquip?.quality||0; - let quality = newEquip?.quality||0; - if(oldQuality < param[1] && quality >= param[1]) { - addCount = count; - } - break; - } - case TASK_TYPE.EQUIP_COMPOSE: - addCount = count; - break; - case TASK_TYPE.EQUIP_COMPOSE_CNT: - { - if(paramObj.oldEplace.length < param[1] && paramObj.newEplace.length >= param[1]) { - addCount = count; - } - break; - } - case TASK_TYPE.EQUIP_LV_UP: - addCount = count; - break; - case TASK_TYPE.EQUIP_PUT_JEWEL_CNT: - { - let { oldEquip, newEquip } = paramObj; - if(oldEquip.jewel && !newEquip.jewel) { - addCount = -count; - } else if (!oldEquip.jewel && newEquip.jewel) { - addCount = count; - } - break; - } - case TASK_TYPE.EQUIP_PUT_STONE_CNT: - { - let { oldEquip, newEquip } = paramObj; - 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) { - addCount = -count; - } else if (oldStoneCnt == 0 && newStoneCnt > 0) { - addCount = count; - } - break; - } - case TASK_TYPE.EQUIP_STONE_CNT: - { - let { oldEquip, newEquip } = paramObj; - let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; - let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; - addCount = newStoneCnt - oldStoneCnt; - break; - } - case TASK_TYPE.EQUIP_STONE_CNT_LV: - { - let { oldEquip, newEquip } = paramObj; - 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; - }); - let oldCount = oldStoneLvs.filter(lv => lv >= param[2]).length; - let newCount = newStoneLvs.filter(lv => lv >= param[2]).length; - if(oldCount < param[1] && newCount >= param[1]) { - addCount = count; - } else if (oldCount >= param[1] && newCount < param[1]) { - addCount = -count; - } - break; - } - case TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT: - { - let { oldEquip, newEquip } = paramObj; - let { oldJewel, newJewel } = getJewelByEquip(oldEquip, newEquip, { jewels: paramObj.jewels }); - - let oldRandSe = oldJewel?.randSe||[]; - let oldUnlockSeCnt = oldRandSe.filter(se => { - return isRandSeUnLock(oldJewel.id, se.id, oldEquip.stones); - }).length; - - let newRandSe = newJewel?.randSe||[]; - let newUnlockSeCnt = newRandSe.filter(se => { - return isRandSeUnLock(newJewel.id, se.id, newEquip.stones); - }).length; - - if(oldUnlockSeCnt < param[1] && newUnlockSeCnt >= param[1]) { - addCount = count; - } else if (oldUnlockSeCnt >= param[1] && newUnlockSeCnt < param[1]) { - addCount = -count; - } - break; - } - case TASK_TYPE.STONE_COMPOSE: - addCount = count; - break; - case TASK_TYPE.JEWEL_RESET: - addCount = count; - break; - case TASK_TYPE.JEWEL_QUENCH: - addCount = count; - break; - case TASK_TYPE.JEWEL_QUENCH_SUCCESS: - addCount = count; - break; - default: - addCount = 0; - break; - - } - // console.log('dddddddddddd', addCount, record) - return { addCount, record }; -} \ No newline at end of file diff --git a/web-server/app/service/Auth.ts b/web-server/app/service/Auth.ts index db7439141..fc9e19f26 100644 --- a/web-server/app/service/Auth.ts +++ b/web-server/app/service/Auth.ts @@ -1,5 +1,5 @@ -import { COUNTER, DEFAULT_LV, ADULT_AGE, GUEST_MAX_TIME, TASK_TYPE, BLOCK_TYPE, TA_EVENT } from '@consts'; +import { COUNTER, DEFAULT_LV, ADULT_AGE, GUEST_MAX_TIME, BLOCK_TYPE, TA_EVENT } from '@consts'; import { RoleModel } from '@db/Role'; import { UserModel, UserType } from '@db/User'; import { STATUS, GET_SMS_TYPE, ADDICTION_PREVENTION_CODE } from '@consts'; @@ -12,7 +12,6 @@ import { getAge, nowSeconds } from '../pubUtils/timeUtil'; import { resResult } from '../pubUtils/util'; import { checkTeeanAgerTime } from '../pubUtils/authenticateUtil'; // import { authenticate } from '../pubUtils/httpUtil'; -import { checkTask } from 'app/pubUtils/taskUtil'; import { getChannelId, loginValidata } from '../pubUtils/sdkUtil'; import { LoginValidateData37 } from 'app/domain/sdk'; import { ServerlistModel } from '@db/Serverlist'; @@ -322,7 +321,6 @@ export default class Auth extends Service { if (role) { await ServerlistModel.incRoleCnt(serverId); // 任务 - await checkTask(roleId, TASK_TYPE.ROLE_LV, role.lv, false, {}); ctx.service.sdk.reportTAEventWithRoleIdAndDistinctId(roleId, distinctId, TA_EVENT.CREATE_ROLE, null, ctx.clientIp); return ctx.service.utils.resResult(STATUS.SUCCESS, { roleId: role.roleId }); From 4f5edb7386f0dffc326b5d5ad52cc3518979894c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E8=8E=B9?= Date: Mon, 21 Mar 2022 19:50:46 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=EF=BC=9A=E6=B8=85?= =?UTF-8?q?=E7=90=86=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../activity/handler/activityHandler.ts | 45 -- .../activity/handler/dailyCoinHandler.ts | 3 +- .../servers/activity/handler/gachaHandler.ts | 3 +- .../activity/handler/luckyTurntableHandler.ts | 2 +- .../activity/handler/newHeroGachaHandler.ts | 3 +- .../activity/handler/timeLimitRankHandler.ts | 3 - .../battle/handler/comBattleHandler.ts | 11 +- .../battle/handler/dailyBattleHandler.ts | 3 +- .../battle/handler/dungeonBattleHandler.ts | 3 +- .../battle/handler/eventBattleHandler.ts | 6 +- .../battle/handler/expeditionBattleHandler.ts | 7 +- .../battle/handler/normalBattleHandler.ts | 7 +- .../app/servers/battle/handler/pvpHandler.ts | 5 +- .../battle/handler/towerBattleHandler.ts | 3 +- .../app/servers/chat/handler/chatHandler.ts | 12 +- .../app/servers/gm/handler/gmRoleHandler.ts | 3 +- .../servers/guild/handler/auctionHandler.ts | 3 +- .../guild/handler/cityActivityHandler.ts | 9 +- .../servers/guild/handler/donateHandler.ts | 7 +- .../guild/handler/gateActivityHandler.ts | 7 +- .../servers/guild/handler/guildBossHandler.ts | 5 +- .../app/servers/guild/handler/guildHandler.ts | 12 +- .../guild/handler/guildRefineHandler.ts | 5 +- .../guild/handler/guildTrainHandler.ts | 13 +- .../guild/handler/raceActivityHandler.ts | 7 +- .../servers/guild/handler/wishPoolHandler.ts | 3 +- .../app/servers/order/handler/orderHandler.ts | 1 - .../app/servers/role/handler/equipHandler.ts | 11 +- .../app/servers/role/handler/friendHandler.ts | 19 +- .../app/servers/role/handler/heroHandler.ts | 5 +- .../app/servers/role/handler/itemHandler.ts | 6 +- .../app/servers/role/handler/roleHandler.ts | 30 +- .../app/servers/role/handler/shopHandler.ts | 1 - .../app/services/actionPointService.ts | 8 +- .../app/services/activity/gachaService.ts | 2 +- .../services/activity/giftPackageService.ts | 3 +- .../services/activity/monthlyTicketService.ts | 2 +- .../app/services/activity/popUpShopService.ts | 2 +- game-server/app/services/battleService.ts | 5 +- game-server/app/services/equipService.ts | 105 +-- .../guildActivity/guildActivityService.ts | 3 +- game-server/app/services/guildService.ts | 7 +- .../app/services/normalBattleService.ts | 2 +- game-server/app/services/orderService.ts | 4 +- game-server/app/services/pvpService.ts | 4 +- .../app/services/role/checkMaterial.ts | 136 ++++ game-server/app/services/role/createHero.ts | 70 +- .../app/services/role/initRoleService.ts | 2 +- .../app/services/role/rewardService.ts | 691 +++++++++--------- game-server/app/services/role/util.ts | 133 ++++ game-server/app/services/roleService.ts | 2 +- game-server/app/services/sdkService.ts | 2 +- game-server/app/services/task/taskObj.ts | 516 ++++++++++++- game-server/app/services/task/taskService.ts | 133 +++- game-server/app/services/warRewardService.ts | 3 +- shared/consts/constModules/sysConst.ts | 8 +- shared/db/PvpDefense.ts | 2 + shared/domain/roleField/task.ts | 32 +- shared/pubUtils/itemUtils.ts | 377 ---------- web-server/app/service/Utils.ts | 6 - 60 files changed, 1447 insertions(+), 1076 deletions(-) create mode 100644 game-server/app/services/role/checkMaterial.ts create mode 100644 game-server/app/services/role/util.ts delete mode 100644 shared/pubUtils/itemUtils.ts diff --git a/game-server/app/servers/activity/handler/activityHandler.ts b/game-server/app/servers/activity/handler/activityHandler.ts index cfbb7344e..524ca6ec1 100644 --- a/game-server/app/servers/activity/handler/activityHandler.ts +++ b/game-server/app/servers/activity/handler/activityHandler.ts @@ -1,7 +1,6 @@ import { Application, BackendSession, HandlerService, pinus, } from 'pinus'; import { aesEncrypt, aesEncryptcfb, resResult } from '../../../pubUtils/util'; import { ENCRYPT_IV, ENCRYPT_KEY, STATUS, TASK_TYPE } from '../../../consts'; -import { checkActivityTask } from '../../../services/task/taskService'; import { ActivityGroupModel } from '../../../db/ActivityGroup'; import { ServerlistModel } from '../../../db/Serverlist'; import { getActivity, getActivityById } from '../../../services/activity/activityService'; @@ -58,50 +57,6 @@ export class ActivityHandler { return resResult(STATUS.SUCCESS, { playerActivityArray, playerGroupArray }); } - //测试活动任务数据 - async testActivityTask(msg: { hid: number, lv: number }, session: BackendSession) { - const { lv } = msg; - const roleId = session.get('roleId'); - const serverId = session.get('serverId'); - const sid: string = session.get('sid'); - - - let heroNum = 1; - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_QUALITY, heroNum, { heroes: [{ quality: 3 }] }) - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT, 1, { oldQuality: 1, quality: 2 }) - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT, 1, { quality: 1, colorStar: 1 }) - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_MAIN_ELITE, 1, { mainEliteWarId: 9001 }) - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_DUNGEON_WAR, 1, { warId: 5001 }) - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_EXPEDITION_BOX, 1) - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.ROLE_LV, 100) - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.PVP, 1) - - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_TOWER_LV, 1, { towerLv: lv }) - // await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GACHA, 1) - - // if (lv == 2) { - // await GTCreateListMessage('批量推送测试11', 259200000, '哈哈哈哈哈11', '噢噢噢噢噢噢噢噢11') - // } - // if (lv == 3) { - // await GTPushListCidMessage('RASL_0630_da707a0c484d4ee39f2d462d5f52984', ['ba64ee9a9d516bbd341267d685baceb4'], true); - // } - // if (lv == 1) { - // await GTPushSingleCidMessage('ba64ee9a9d516bbd341267d685baceb4', 259200000, '哈哈哈哈哈', '噢噢噢噢噢噢噢噢'); - // } - // let beginTime = 1624050000000; - // let interval = 86400; - // console.log('ddddddbbbbbbbbbbbbbb', moment(new Date).valueOf(), (moment(new Date).valueOf() - beginTime), ((moment(new Date).valueOf() - beginTime) % (interval * 1000)), 24 * 60 * 60 * 1000, ((moment(new Date).valueOf() - beginTime) % (interval * 1000)) / (24 * 60 * 60 * 1000)) - // let aaa = Math.ceil(((moment(new Date).valueOf() - beginTime) / (24 * 60 * 60 * 1000))); - // console.log('xxxxxxxxxxxxxxxxxxx', aaa); - //aesEncryptcfb - console.log('13121622738', await aesEncryptcfb("13121622738", ENCRYPT_KEY, ENCRYPT_IV)) - //18612532385:cc80b189dc03cff31fe75d - //13636354764:cc8bb18bd805c9f51be95c,Z6ArLdom2c - //13121622738:cc8bb68adf00cef31bec50 - return resResult(STATUS.SUCCESS,); - - } - async debugActivityMemory(msg: {}, session: BackendSession) { const { } = msg; const roleId = session.get('roleId'); diff --git a/game-server/app/servers/activity/handler/dailyCoinHandler.ts b/game-server/app/servers/activity/handler/dailyCoinHandler.ts index 64c2c0190..60d1c5a74 100644 --- a/game-server/app/servers/activity/handler/dailyCoinHandler.ts +++ b/game-server/app/servers/activity/handler/dailyCoinHandler.ts @@ -1,14 +1,13 @@ import { Application, BackendSession, HandlerService } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { ACTIVITY_RESOURCES_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, ITEM_CHANGE_REASON, STATUS } from '../../../consts'; -import { handleCost } from '../../../services/role/rewardService'; +import { getGoldObject, handleCost } from '../../../services/role/rewardService'; import { getPlayerDailyCoinData, mergeData } from '../../../services/activity/dailyCoinService'; import { ConsumeExchangeFormulaItem, CoinRewardFormulaItem } from '../../../domain/activityField/dailyCoinField'; import { ActivityDailyCoinModel } from '../../../db/ActivityDailyCoin'; import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { RewardParam } from '../../../domain/activityField/rewardField'; import { ItemInter } from '../../../pubUtils/interface'; -import { getGoldObject } from '../../../pubUtils/itemUtils'; import { RoleModel } from '../../../db/Role'; import moment = require('moment'); diff --git a/game-server/app/servers/activity/handler/gachaHandler.ts b/game-server/app/servers/activity/handler/gachaHandler.ts index d14e743c0..b16022965 100644 --- a/game-server/app/servers/activity/handler/gachaHandler.ts +++ b/game-server/app/servers/activity/handler/gachaHandler.ts @@ -7,12 +7,13 @@ import { UserGachaModel } from "../../../db/UserGacha"; import { refreshGacha, getGachaList, getVisitedHeroList, getAllHeroByQuality, GachaPull } from "../../../services/activity/gachaService"; import { RoleModel } from "../../../db/Role"; import { HeroModel } from "../../../db/Hero"; -import { handleCost, createHeroes, addItems } from "../../../services/role/rewardService"; +import { handleCost, addItems } from "../../../services/role/rewardService"; import { getZeroPointD, getTimeFun } from "../../../pubUtils/timeUtil"; import { UserGachaRecModel } from "../../../db/UserGachaRec"; import { RECRUIT } from "../../../pubUtils/dicParam"; import { getActivityById } from "../../../services/activity/activityService"; import { checkTaskInGacha } from "../../../services/task/taskService"; +import { createHeroes } from "../../../services/role/createHero"; export default function (app: Application) { new HandlerService(app, {}); diff --git a/game-server/app/servers/activity/handler/luckyTurntableHandler.ts b/game-server/app/servers/activity/handler/luckyTurntableHandler.ts index 68c3b4d62..b49a81329 100644 --- a/game-server/app/servers/activity/handler/luckyTurntableHandler.ts +++ b/game-server/app/servers/activity/handler/luckyTurntableHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { ITEM_CHANGE_REASON, STATUS } from '../../../consts'; import { getPlayerLuckyTurntableDataShow, getPlayerLuckyTurntableData } from '../../../services/activity/luckyTurntableService'; -import { addItems, combineItems, handleCost } from '../../../services/role/rewardService'; +import { addItems, handleCost } from '../../../services/role/rewardService'; import { ActivityTurntableModel } from '../../../db/ActivityTurntableRec'; import { pick } from 'underscore'; import { addReward, stringToRewardInter, stringToRewardParam } from '../../../services/activity/giftPackageService'; diff --git a/game-server/app/servers/activity/handler/newHeroGachaHandler.ts b/game-server/app/servers/activity/handler/newHeroGachaHandler.ts index f6f85a2a5..fd80a7212 100644 --- a/game-server/app/servers/activity/handler/newHeroGachaHandler.ts +++ b/game-server/app/servers/activity/handler/newHeroGachaHandler.ts @@ -5,10 +5,11 @@ import { getPlayerNewHeroGachaData } from '../../../services/activity/newHeroGac import { RoleModel } from '../../../db/Role'; import { HeroModel } from '../../../db/Hero'; import { GachaPull } from '../../../services/activity/gachaService'; -import { addItems, createHeroes, handleCost } from '../../../services/role/rewardService'; +import { addItems, handleCost } from '../../../services/role/rewardService'; import { ActivityNewHeroGachaModel } from '../../../db/ActivityNewHeroGacha'; import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { RewardParam } from '../../../domain/activityField/rewardField'; +import { createHeroes } from '../../../services/role/createHero'; export default function (app: Application) { diff --git a/game-server/app/servers/activity/handler/timeLimitRankHandler.ts b/game-server/app/servers/activity/handler/timeLimitRankHandler.ts index 22576c73e..5b8b781fc 100644 --- a/game-server/app/servers/activity/handler/timeLimitRankHandler.ts +++ b/game-server/app/servers/activity/handler/timeLimitRankHandler.ts @@ -1,10 +1,7 @@ import { Application, BackendSession, HandlerService, } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { DEBUG_MAGIC_WORD, getRedisKeyByRankType, HERO_SELECT, ITEM_CHANGE_REASON, RANK_TYPE, ROLE_SELECT, STATUS } from '../../../consts'; -import { addItems, combineItems, handleCost } from '../../../services/role/rewardService'; -import { ActivityTurntableModel } from '../../../db/ActivityTurntableRec'; import { pick } from 'underscore'; -import { addReward, stringToRewardInter, stringToRewardParam } from '../../../services/activity/giftPackageService'; import { getTimeLimitRankData, getTimeLimitRankDataShow, sendRankMail, takeSnapshot } from '../../../services/activity/timeLimitRankService'; import { getRankInHandler, Rank } from '../../../services/rankService'; import { getActivityById } from '../../../services/activity/activityService'; diff --git a/game-server/app/servers/battle/handler/comBattleHandler.ts b/game-server/app/servers/battle/handler/comBattleHandler.ts index b113c472b..bd0c4ff6b 100644 --- a/game-server/app/servers/battle/handler/comBattleHandler.ts +++ b/game-server/app/servers/battle/handler/comBattleHandler.ts @@ -24,7 +24,7 @@ import { pushComBtlTeamMsg, pushFriendTeamInviteMsg, pushNormalItemMsg, pushTeam import { EXTERIOR } from '../../../pubUtils/dicParam'; import { getZeroPointD, getTimeFunD, getSeconds, nowSeconds } from '../../../pubUtils/timeUtil'; import { FriendParams } from '../../../domain/roleField/friend'; -import { checkActivityTask, checkTask, checkTaskInComBattleStart, checkTaskWithArgs, checkTaskWithGoods } from '../../../services/task/taskService'; +import { checkTask, checkTaskInComBattleStart } from '../../../services/task/taskService'; import { gameData, getWarByBlueprtId } from '../../../pubUtils/data'; import { HeroModel } from '../../../db/Hero'; @@ -461,7 +461,7 @@ export class ComBattleHandler { updateRobotHurtByTime(teamStatus, st, COM_BTL_CONST.ROBOT_BASE_TIME_INTERVAL + idx, channel, this.robotHurtTimer, this.teamMap); } }); - await checkTaskInComBattleStart(teamStatus.roleStatus, teamStatus.capId); + await checkTaskInComBattleStart(teamStatus.roleStatus, teamStatus.capId, teamStatus.blueprtId); return resResult(STATUS.SUCCESS); } @@ -565,6 +565,7 @@ export class ComBattleHandler { let roleName = session.get('roleName'); let sid = session.get('sid'); let ip = session.get('ip'); + let serverId = session.get('serverId'); let { teamCode } = msg; let team = await ComBattleTeamModel.getTeamByCode(teamCode); @@ -582,7 +583,7 @@ export class ComBattleHandler { if (!warInfo) return resResult(STATUS.BATTLE_MISS_INFO); let role = await RoleModel.findByRoleId(roleId, 'lv'); - let apJson = await setAp(roleId, ip, role.lv, -1 * warInfo.cost, sid, ITEM_CHANGE_REASON.COM_BATTLE_END); // 扣除体力 + let apJson = await setAp(serverId, roleId, ip, role.lv, -1 * warInfo.cost, sid, ITEM_CHANGE_REASON.COM_BATTLE_END); // 扣除体力 if(!apJson) { return resResult(STATUS.BATTLE_ACTION_POINT_LACK); } @@ -598,8 +599,6 @@ export class ComBattleHandler { await ComBattleTeamModel.updateRewardSt(teamCode, roleId, true); const goods = await addItems(roleId, roleName, sid, roleSt.fixReward, ITEM_CHANGE_REASON.COM_BATTLE_END); let actordata = await roleLevelup(KING_EXP_RATIO_TYPE.BATTLE, roleId, warInfo.kingExp, session);// 主公升级经验 - // 任务 - await checkTaskWithGoods(roleId, sid, TASK_TYPE.COM_BATTLE_DROP, goods); return resResult(STATUS.SUCCESS, { battleGoods: goods, ...actordata, teamInfo: {status, teamCode, roleStatus, bossHpArr} }); } @@ -692,7 +691,7 @@ export class ComBattleHandler { } // 任务 - await checkTaskWithArgs(serverId, roleId, sid, TASK_TYPE.CHAT, { chatType: getChannelType(CHANNEL_PREFIX.TEAM) }); + await checkTask(serverId, roleId, sid, TASK_TYPE.CHAT, { chatType: getChannelType(CHANNEL_PREFIX.TEAM) }); return resResult(STATUS.SUCCESS); } diff --git a/game-server/app/servers/battle/handler/dailyBattleHandler.ts b/game-server/app/servers/battle/handler/dailyBattleHandler.ts index 616333602..0a93e82f2 100644 --- a/game-server/app/servers/battle/handler/dailyBattleHandler.ts +++ b/game-server/app/servers/battle/handler/dailyBattleHandler.ts @@ -4,8 +4,7 @@ import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; import { RoleModel } from '../../../db/Role'; import { getDailyNum, getDailyBattleList, getDailyBuyCountCost } from '../../../services/dailyBattleService'; -import { handleCost } from '../../../services/role/rewardService'; -import { getGoldObject } from '../../../pubUtils/itemUtils'; +import { getGoldObject, handleCost } from '../../../services/role/rewardService'; import { gameData } from '../../../pubUtils/data'; import { DEBUG_MAGIC_WORD, ITEM_CHANGE_REASON } from '../../../consts'; diff --git a/game-server/app/servers/battle/handler/dungeonBattleHandler.ts b/game-server/app/servers/battle/handler/dungeonBattleHandler.ts index 437b91629..48fbc6f51 100644 --- a/game-server/app/servers/battle/handler/dungeonBattleHandler.ts +++ b/game-server/app/servers/battle/handler/dungeonBattleHandler.ts @@ -2,8 +2,7 @@ import { Application, BackendSession } from 'pinus'; import { STATUS } from '../../../consts/statusCode'; import { resResult, shouldRefresh } from '../../../pubUtils/util'; import { RoleModel } from '../../../db/Role'; -import { handleCost } from '../../../services/role/rewardService'; -import { getGoldObject } from '../../../pubUtils/itemUtils'; +import { getGoldObject, handleCost } from '../../../services/role/rewardService'; import { getDungeonData, getDungeonBuyCountCost } from '../../../services/dungeonService'; import * as dicParam from '../../../pubUtils/dicParam'; import { DungeonFirstModel } from '../../../db/DungeonFirst'; diff --git a/game-server/app/servers/battle/handler/eventBattleHandler.ts b/game-server/app/servers/battle/handler/eventBattleHandler.ts index 40fa3ae93..6c6289f25 100644 --- a/game-server/app/servers/battle/handler/eventBattleHandler.ts +++ b/game-server/app/servers/battle/handler/eventBattleHandler.ts @@ -6,7 +6,7 @@ import { checkEventStatus, getEventSuccessStatus, getEvent, checkQuiz, startEven import { addItems } from '../../../services/role/rewardService'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; -import { checkActivityTask, checkTask } from '../../../services/task/taskService'; +import { checkTask } from '../../../services/task/taskService'; import { gameData } from '../../../pubUtils/data'; export default function (app: Application) { @@ -123,9 +123,7 @@ export class EventBattleHandler { // 推送消息刷新 // await checkEvent(session, true); // 任务 - await checkTask(roleId, sid, TASK_TYPE.BATTLE_EVENT, 1, true, { eventType: dicEvent.eventType }) - // 活动任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_EVENT, 1, { eventType: dicEvent.eventType }) + await checkTask(serverId, roleId, sid, TASK_TYPE.BATTLE_EVENT, { eventType: dicEvent.eventType }); return resResult(STATUS.SUCCESS, { isSuccess, eventCode: result.eventCode, diff --git a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts index 93e69d710..ae52159ee 100644 --- a/game-server/app/servers/battle/handler/expeditionBattleHandler.ts +++ b/game-server/app/servers/battle/handler/expeditionBattleHandler.ts @@ -13,7 +13,7 @@ import { getAp, setAp } from '../../../services/actionPointService'; import { STATUS } from '../../../consts/statusCode'; import { resResult } from '../../../pubUtils/util'; import { calculateWarStar, checkBattleHeroes, roleLevelup } from '../../../services/normalBattleService'; -import { checkActivityTask, checkTask, checkTaskInBattleEnd } from '../../../services/task/taskService'; +import { checkTask, checkTaskInBattleEnd } from '../../../services/task/taskService'; import { gameData } from '../../../pubUtils/data'; import * as dicParam from '../../../pubUtils/dicParam'; import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil'; @@ -209,7 +209,7 @@ export class ExpeditionBattleHandler { } let role = await RoleModel.findByRoleId(roleId, 'lv'); - let apJson = await setAp(roleId, ip, role.lv, isSuccess?-1 * warInfo.cost: 0, sid, ITEM_CHANGE_REASON.EXPEDITION_BATTLE_END); // 扣除体力 + let apJson = await setAp(serverId, roleId, ip, role.lv, isSuccess?-1 * warInfo.cost: 0, sid, ITEM_CHANGE_REASON.EXPEDITION_BATTLE_END); // 扣除体力 if (!apJson) { return resResult(STATUS.BATTLE_ACTION_POINT_LACK); } @@ -315,8 +315,7 @@ export class ExpeditionBattleHandler { let pointRewards = await getPointRewardStatus(roleId); // 任务 - await checkTask(roleId, sid, TASK_TYPE.BATTLE_EXPEDITION_BOX, 1, true, { point }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_EXPEDITION_BOX, 1) + await checkTask(serverId, roleId, sid, TASK_TYPE.BATTLE_EXPEDITION_BOX, { point }); let goods = await addItems(roleId, roleName, sid, curDicExpeditionPoint.reward, ITEM_CHANGE_REASON.EXPEDITION_POINT_REWARD); diff --git a/game-server/app/servers/battle/handler/normalBattleHandler.ts b/game-server/app/servers/battle/handler/normalBattleHandler.ts index d4ca5c055..286de604b 100644 --- a/game-server/app/servers/battle/handler/normalBattleHandler.ts +++ b/game-server/app/servers/battle/handler/normalBattleHandler.ts @@ -19,7 +19,7 @@ import { gameData } from '../../../pubUtils/data'; import { pushMysteryFirstMsg, pushTowerMsg, pushVestigeFirstMsg } from '../../../services/chatService'; import { getSeconds, nowSeconds } from '../../../pubUtils/timeUtil'; import { Rank } from '../../../services/rankService'; -import { checkTaskWithWar, checkTaskInBattleEnd, checkActivityTask, checkTaskInBattleSweep } from '../../../services/task/taskService'; +import { checkTaskInBattleEnd, checkTaskInBattleSweep } from '../../../services/task/taskService'; import { ActivitySelfServiceModel } from '../../../db/ActivitySelfService'; import { getSelfServiceShopActivityData } from '../../../services/activity/selfServiceShopActivityService'; import { challengeDailyGK } from '../../../services/activity/dailyGKService'; @@ -164,7 +164,7 @@ export class NormalBattleHandler { } let role = await RoleModel.findByRoleId(roleId, 'lv'); - let apJson = await setAp(roleId, ip, role.lv, isSuccess? -1 * warInfo.cost: 0, sid, getReasonByWarType(warInfo.warType)); // 扣除体力 + let apJson = await setAp(serverId, roleId, ip, role.lv, isSuccess? -1 * warInfo.cost: 0, sid, getReasonByWarType(warInfo.warType)); // 扣除体力 if (!apJson) { return resResult(STATUS.BATTLE_ACTION_POINT_LACK); } @@ -218,7 +218,6 @@ export class NormalBattleHandler { if (role) { let r = new Rank(REDIS_KEY.MAIN_ELITE_RANK, { serverId }); await r.setRankWithRoleInfo(roleId, role.mainEliteWarId, role.mainEliteUpdatedAt, role); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_MAIN_ELITE, 1, { mainEliteWarId: battleId }) } } else if (warInfo.warType == WAR_TYPE.ACT_SELF_SHOP) { //糜家商队挑战成功后记录挑战次数 @@ -305,7 +304,7 @@ export class NormalBattleHandler { // 扣体力 let role = await RoleModel.findByRoleId(roleId, 'lv'); - let apJson = await setAp(roleId, ip, role.lv, -1 * warInfo.cost * count, sid, getReasonByWarType(warInfo.warType)); // 扣除体力 + let apJson = await setAp(serverId, roleId, ip, role.lv, -1 * warInfo.cost * count, sid, getReasonByWarType(warInfo.warType)); // 扣除体力 if (!apJson) { return resResult(STATUS.BATTLE_ACTION_POINT_LACK); } diff --git a/game-server/app/servers/battle/handler/pvpHandler.ts b/game-server/app/servers/battle/handler/pvpHandler.ts index 557dbf9a8..0a2ab0e9e 100644 --- a/game-server/app/servers/battle/handler/pvpHandler.ts +++ b/game-server/app/servers/battle/handler/pvpHandler.ts @@ -14,8 +14,7 @@ import { checkTask, checkTaskInPvpEnd } from '../../../services/task/taskService import { Attack, AttackHero, Defense, DefenseHero, PvpDataReturn } from '../../../domain/battleField/pvp'; import { DEBUG_MAGIC_WORD, FIGURE_UNLOCK_CONDITION, ITEM_CHANGE_REASON, LINEUP_NUM, REDIS_KEY, TASK_TYPE } from '../../../consts'; import { PVP } from '../../../pubUtils/dicParam'; -import { getGoldObject } from '../../../pubUtils/itemUtils'; -import { addItems, handleCost, unlockFigure } from '../../../services/role/rewardService'; +import { addItems, getGoldObject, handleCost, unlockFigure } from '../../../services/role/rewardService'; import { pick } from "underscore"; import { HeroModel } from '../../../db/Hero'; import PvpHistoryOpp, { PvpHistoryOppModel } from '../../../db/PvpHistoryOpp'; @@ -42,7 +41,7 @@ export class PvpHandler { let pvpDefense = await PvpDefenseModel.findByRoleIdIncludeAll(roleId); if(!pvpDefense) { let role = await RoleModel.findByRoleId(roleId); - pvpDefense = await PvpDefenseModel.createPvpDefense({ roleId: role.roleId, roleName: role.roleName, role: role._id }); + pvpDefense = await PvpDefenseModel.createPvpDefense({ serverId: role.serverId, roleId: role.roleId, roleName: role.roleName, role: role._id }); } // 如果没有发过,将上赛季的奖励发下 pvpDefense = await sendLastSeasonRewardIfNotSent(pvpDefense); diff --git a/game-server/app/servers/battle/handler/towerBattleHandler.ts b/game-server/app/servers/battle/handler/towerBattleHandler.ts index 865659bc4..eb83a464f 100644 --- a/game-server/app/servers/battle/handler/towerBattleHandler.ts +++ b/game-server/app/servers/battle/handler/towerBattleHandler.ts @@ -8,9 +8,8 @@ import { TowerRecordModel } from './../../../db/TowerRecord'; import { Application, BackendSession } from 'pinus'; import { resResult, genCode, shouldRefresh } from '../../../pubUtils/util'; import { calcuHangUpReward, refreshTasks, treatTask, getRemainTime, getTowerStatus, getHungupRewards, getTasks, checkTaskRewards, getTowerTaskCostGold, getHangSpdUpCostGold, getManyHangSpdUpCostGold, getTaskStatus, checkForbiddenChar, checkAndStartHungUp, createNewTowerRecord, getTowerRecByLv } from '../../../services/battleService'; -import { addItems, handleCost } from '../../../services/role/rewardService'; +import { addItems, getGoldObject, handleCost } from '../../../services/role/rewardService'; import { checkBattleHeroes } from '../../../services/normalBattleService'; -import { getGoldObject } from '../../../pubUtils/itemUtils'; import { gameData } from '../../../pubUtils/data'; import * as dicParam from '../../../pubUtils/dicParam'; import { isNumber } from 'underscore'; diff --git a/game-server/app/servers/chat/handler/chatHandler.ts b/game-server/app/servers/chat/handler/chatHandler.ts index 2522ed651..8bf0df788 100644 --- a/game-server/app/servers/chat/handler/chatHandler.ts +++ b/game-server/app/servers/chat/handler/chatHandler.ts @@ -4,7 +4,7 @@ import { resResult } from '../../../pubUtils/util'; import { DEFAULT_MSG_PER_PAGE, STATUS, TASK_TYPE } from '../../../consts'; import { createAccuseData, createGroupMsg, createPrivateMsg, getPrivateMessages, pushGroupMsgToRoom, pushMsgToRole, updatePrivateMsgReadInfo, recentPrivateChatInfos, recentWorldMsgs, recentSysMsgs, recentGuildMsgs, updatePrivateMsgIsTop, delPrivateMsg } from '../../../services/chatService'; import { getSimpleRoleInfo } from '../../../services/roleService'; -import { checkActivityTask, checkTaskWithArgs } from '../../../services/task/taskService'; +import { checkTask } from '../../../services/task/taskService'; import { RoleModel } from '../../../db/Role'; @@ -99,10 +99,7 @@ export class ChatHandler { await pushGroupMsgToRoom(msgData); // 任务 - await checkTaskWithArgs(roleId, sid, TASK_TYPE.CHAT, [getChannelType(channel)]); - - //活动任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.CHAT, 1, { chatType: getChannelType(channel) }) + await checkTask(serverId, roleId, sid, TASK_TYPE.CHAT, { chatType: getChannelType(channel) }); return resResult(STATUS.SUCCESS, msgData); } @@ -125,10 +122,7 @@ export class ChatHandler { if (!msgData) return resResult(STATUS.WRONG_PARMS); // 任务 - await checkTaskWithArgs(roleId, sid, TASK_TYPE.CHAT, [getChannelType('private')]); - //活动任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.CHAT, 1, { chatType: getChannelType('private') }) - + await checkTask(serverId, roleId, sid, TASK_TYPE.CHAT, { chatType: getChannelType('private') }); return resResult(STATUS.SUCCESS, msgData); } diff --git a/game-server/app/servers/gm/handler/gmRoleHandler.ts b/game-server/app/servers/gm/handler/gmRoleHandler.ts index 73367dbd3..f1d783bef 100644 --- a/game-server/app/servers/gm/handler/gmRoleHandler.ts +++ b/game-server/app/servers/gm/handler/gmRoleHandler.ts @@ -2,7 +2,7 @@ import { Application, BackendSession, pinus } from 'pinus'; import { resResult } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; import { getRoleOnlineInfo, updateUserInfo } from '../../../services/redisService'; -import { addItems, createHeroes } from '../../../services/role/rewardService'; +import { addItems } from '../../../services/role/rewardService'; import { RewardInter } from '../../../pubUtils/interface'; import { gameData, getExpByLv, getHeroExpByLv, getHeroLvByExp, getLvByExp } from '../../../pubUtils/data'; import { RoleModel, RoleType } from '../../../db/Role'; @@ -22,6 +22,7 @@ import { calAllHeroCe, calPlayerCeAndSave } from '../../../services/playerCeServ import { SkinModel } from '../../../db/Skin'; import { PvpDefenseModel } from '../../../db/PvpDefense'; import { calculatetopLineup } from '../../../pubUtils/playerCe'; +import { createHeroes } from '../../../services/role/createHero'; let timer: NodeJS.Timer; export default function (app: Application) { diff --git a/game-server/app/servers/guild/handler/auctionHandler.ts b/game-server/app/servers/guild/handler/auctionHandler.ts index 2c62ca259..2acbe9c87 100644 --- a/game-server/app/servers/guild/handler/auctionHandler.ts +++ b/game-server/app/servers/guild/handler/auctionHandler.ts @@ -5,7 +5,7 @@ import { LotModel } from "../../../db/Lot"; import { ItemReward } from "../../../domain/dbGeneral"; import { genCode, resResult } from "../../../pubUtils/util"; import { auctionStage, calculateDividend, genAuction, sendUngotDividend, startGuildAuction, startWorldAuction, stopAuction, todayGuildBegin, getBasePrice, debugAuctionLots, officialAuctionLots, auctionBidStatus, getMaxPrice, guildBidStatus, getAuction, pushAuctionOver, treatSingleLotTime, treatLotsTime } from "../../../services/auctionService"; -import { addItems, handleCost } from '../../../services/role/rewardService'; +import { addItems, getGoldObject, handleCost } from '../../../services/role/rewardService'; import { getSimpleRoleInfo } from '../../../services/roleService'; import { getRoleOnlineInfo } from '../../../services/redisService'; import { lockData } from '../../../services/redLockService'; @@ -20,7 +20,6 @@ import { gameData, getAuctionRewardByPoolId } from '../../../pubUtils/data'; import { addRoleToGuildAuctionChannel, addRoleToWorldAuctionChannel, channelServer, groupRoomId, leaveGuildAuctionChannel } from '../../../services/chatService'; import { RewardInter } from '../../../pubUtils/interface'; import { sendMailByContent } from '../../../services/mailService'; -import { getGoldObject } from '../../../pubUtils/itemUtils'; import { reportTAEvent } from '../../../services/sdkService'; export default function (app: Application) { diff --git a/game-server/app/servers/guild/handler/cityActivityHandler.ts b/game-server/app/servers/guild/handler/cityActivityHandler.ts index b325effcf..60d60c135 100644 --- a/game-server/app/servers/guild/handler/cityActivityHandler.ts +++ b/game-server/app/servers/guild/handler/cityActivityHandler.ts @@ -9,12 +9,11 @@ import { leaveCityChannel, addRoleToCityChannel, getCityChannelSid } from "../.. import { UserGuildModel } from "../../../db/UserGuild"; import { GuildActivityRecordModel } from "../../../db/GuildActivityRec"; import { nowSeconds, getTimeFun } from "../../../pubUtils/timeUtil"; -import { getGoldObject } from "../../../pubUtils/itemUtils"; import { GUILDACTIVITY, SERVER_DEBUG_MODE } from "../../../pubUtils/dicParam"; -import { handleCost } from "../../../services/role/rewardService"; +import { getGoldObject, handleCost } from "../../../services/role/rewardService"; import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; -import { checkActivityTask, checkTask } from "../../../services/task/taskService"; +import { checkTask } from "../../../services/task/taskService"; import { guildInter } from "../../../pubUtils/interface"; import { dispatch } from "../../../pubUtils/dispatcher"; import { ServerRecordModel } from "../../../db/ServerRecords"; @@ -191,9 +190,7 @@ export class CityActivityHandler { await ServerRecordModel.addActiveGuild(serverId, guildCode); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); - //成长任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid }) + await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_ACTIVITY, { aid: this.aid }); // 前一天中位数战力 let medianCe = await getPreDayActiveData(serverId); diff --git a/game-server/app/servers/guild/handler/donateHandler.ts b/game-server/app/servers/guild/handler/donateHandler.ts index bfc6db323..48c8c67a8 100644 --- a/game-server/app/servers/guild/handler/donateHandler.ts +++ b/game-server/app/servers/guild/handler/donateHandler.ts @@ -12,7 +12,7 @@ import { addFund, getDonation } from '../../../services/donateService'; import { getUserGuildWithRefActive, refreshUserGuild } from '../../../services/guildService'; import { ARMY } from '../../../pubUtils/dicParam'; import { addActive } from '../../../services/guildService' -import { checkActivityTask, checkTask } from '../../../services/task/taskService'; +import { checkTask } from '../../../services/task/taskService'; import { guildInter } from '../../../pubUtils/interface'; import { lockData } from '../../../services/redLockService'; import { getVipDonateConsume } from '../../../services/activity/monthlyTicketService'; @@ -102,10 +102,7 @@ export class DonationHandler { await addActive(roleId, serverId, GUILD_POINT_WAYS.DONATE, id); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_DONATE, 1, true, {}); - //活动任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GUILD_DONATE, 1); - + await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_DONATE); res.releaseCallback(); return resResult(STATUS.SUCCESS, { donateFund, reports, donateCnt, simpleGoods: goods }); } catch (e) { diff --git a/game-server/app/servers/guild/handler/gateActivityHandler.ts b/game-server/app/servers/guild/handler/gateActivityHandler.ts index 40f466667..7b32922fb 100644 --- a/game-server/app/servers/guild/handler/gateActivityHandler.ts +++ b/game-server/app/servers/guild/handler/gateActivityHandler.ts @@ -14,7 +14,7 @@ import { UserGuildModel } from "../../../db/UserGuild"; import { GuildActivityCityModel } from "../../../db/GuildActivityCity"; import { Rank } from "../../../services/rankService"; import { getTimeFun, getZeroPointD } from "../../../pubUtils/timeUtil"; -import { checkActivityTask, checkTask } from "../../../services/task/taskService"; +import { checkTask } from "../../../services/task/taskService"; import { guildInter } from "../../../pubUtils/interface"; import { ServerRecordModel } from "../../../db/ServerRecords"; @@ -97,10 +97,7 @@ export class GateActivityHandler { await ServerRecordModel.addActiveGuild(serverId, guildCode); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); - //成长任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid }) - + await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_ACTIVITY, { aid: this.aid }); return resResult(STATUS.SUCCESS, { code, ...statusResult, diff --git a/game-server/app/servers/guild/handler/guildBossHandler.ts b/game-server/app/servers/guild/handler/guildBossHandler.ts index 77b94bf5b..f01124b71 100644 --- a/game-server/app/servers/guild/handler/guildBossHandler.ts +++ b/game-server/app/servers/guild/handler/guildBossHandler.ts @@ -16,9 +16,8 @@ import { lockData } from '../../../services/redLockService'; import { pushGuildBossSucMsg, getGuildChannelSid } from '../../../services/chatService'; import { checkTask } from '../../../services/task/taskService'; import { guildInter } from '../../../pubUtils/interface'; -import { addItems, handleCost } from '../../../services/role/rewardService'; +import { addItems, getGoldObject, handleCost } from '../../../services/role/rewardService'; import * as dicParam from '../../../pubUtils/dicParam'; -import { getGoldObject } from '../../../pubUtils/itemUtils'; import { RoleModel } from '../../../db/Role'; import { sendMailToGuildByContent } from '../../../services/mailService'; import { genAuction } from '../../../services/auctionService'; @@ -128,7 +127,7 @@ export class GuildHandler { } let { myChallengeCnt: newMyChallengeCnt } = await refreshUserGuildOfBoss(userGuild, 0, 1); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_BOSS, 1, true, {}); + await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_BOSS); return resResult(STATUS.SUCCESS, { battleCode, bossCode: bossInstance.code, myChallengeCnt: newMyChallengeCnt }); } diff --git a/game-server/app/servers/guild/handler/guildHandler.ts b/game-server/app/servers/guild/handler/guildHandler.ts index f998c9767..e4caa5da6 100644 --- a/game-server/app/servers/guild/handler/guildHandler.ts +++ b/game-server/app/servers/guild/handler/guildHandler.ts @@ -6,8 +6,7 @@ import { checkAuth, joinGuild, getGuildWithRefActive, getUserGuildWithRefActive, import { GuildModel, GuildType, GuildUpdateParam } from '../../../db/Guild'; import { RoleModel, RoleType } from '../../../db/Role'; import { ARMY } from '../../../pubUtils/dicParam'; -import { handleCost, addItems } from '../../../services/role/rewardService'; -import { getGoldObject } from '../../../pubUtils/itemUtils'; +import { handleCost, addItems, getGoldObject } from '../../../services/role/rewardService'; import { nowSeconds, getTimeFun, getSeconds } from '../../../pubUtils/timeUtil'; import { GuildListInfo, GuildMemberParam } from '../../../domain/battleField/guild'; import { GuildLeader } from '../../../domain/rank'; @@ -23,7 +22,7 @@ import { removeBossRank } from '../../../services/guildBossService'; import { removeTrainRank } from '../../../services/guildTrainService'; import { pushGuildNoticeUpdateMsg, pushGuildUpStructureMsg, addRoleToGuildChannel, getGuildChannelSid, createGroupMsg, pushGroupMsgToRoom } from '../../../services/chatService'; import { Rank } from '../../../services/rankService'; -import { checkActivityTask, checkTask } from '../../../services/task/taskService'; +import { checkTask } from '../../../services/task/taskService'; import { guildInter } from '../../../pubUtils/interface'; import * as dicParam from '../../../pubUtils/dicParam'; import { reportTAEvent } from '../../../services/sdkService'; @@ -99,8 +98,7 @@ export class GuildHandler { // 返回 const result = { ...guild, rank, myInfo: { ...userGuild, isOnline: true } }; - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GUILD_JOIN, 1); - await checkTask(roleId, sid, TASK_TYPE.GUILD_JOIN, 1, true, {}); + await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_JOIN); return resResult(STATUS.SUCCESS, result); } @@ -877,9 +875,7 @@ export class GuildHandler { userGuild = await UserGuildModel.updateInfo(roleId, { receivedActive: userGuild.receivedActive }, {}, 'receivedActive'); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_RECEIVE_BOX, 1, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GUILD_RECEIVE_BOX, 1); - + await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_RECEIVE_BOX); return resResult(STATUS.SUCCESS, { goods, receivedActive: userGuild.receivedActive }); } diff --git a/game-server/app/servers/guild/handler/guildRefineHandler.ts b/game-server/app/servers/guild/handler/guildRefineHandler.ts index 826bc6de0..c08f9c16f 100644 --- a/game-server/app/servers/guild/handler/guildRefineHandler.ts +++ b/game-server/app/servers/guild/handler/guildRefineHandler.ts @@ -51,6 +51,7 @@ export class GuildRefineHandler { const roleId: string = session.get('roleId'); const sid: string = session.get('sid'); const roleName: string = session.get('roleName'); + const serverId: number = session.get('serverId'); let dicGoods = gameData.goods.get(id); if(!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND); @@ -92,7 +93,7 @@ export class GuildRefineHandler { let goods = await addItems(roleId, roleName, sid, [{ id, count }], ITEM_CHANGE_REASON.REFINE_EQUIP); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_REFINE, 1, true, { quality: dicGoods.quality }); + await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_REFINE, { quality: dicGoods.quality, count }); return resResult(STATUS.SUCCESS, { goods, refineCnt }); } /** @@ -193,7 +194,7 @@ export class GuildRefineHandler { res.releaseCallback(); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_ASSIST_REFINE, 1, true, {}); + await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_ASSIST_REFINE); return resResult(STATUS.SUCCESS, { scienceTrees }); } diff --git a/game-server/app/servers/guild/handler/guildTrainHandler.ts b/game-server/app/servers/guild/handler/guildTrainHandler.ts index 2427f2641..2e69fe19c 100644 --- a/game-server/app/servers/guild/handler/guildTrainHandler.ts +++ b/game-server/app/servers/guild/handler/guildTrainHandler.ts @@ -18,7 +18,7 @@ import { addActive } from '../../../services/guildService'; import { GuildTrainReportModel } from '../../../db/GuildTrainReport'; import { DATA_NAME } from '../../../consts/dataName'; import { pushGuildTrainSucMsg } from '../../../services/chatService'; -import { checkActivityTask, checkTask } from '../../../services/task/taskService'; +import { checkTaskInGuildTrain } from '../../../services/task/taskService'; import { sendPopUpActivityData } from '../../../services/guildActivity/guildActivityService'; import { guildInter, RewardInter } from '../../../pubUtils/interface'; import { getGuildTrainGkInfo } from '../../../pubUtils/data'; @@ -243,10 +243,6 @@ export class GuildTrainHandler { // guildTrain = await GuildTrainModel.updateGuildTrain(code, trainId, { ranks }); res.releaseCallback();//解锁 } - if (isComplete) {//解锁下一关,弹出礼包 // 1 true true 6Sjkgp(trainId, isComplete, needLockNext, code) - let pushMessage = await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GUILD_TRAIN_COUNT, 1, { trainId, code }) - await sendPopUpActivityData(code, serverId, pushMessage); - } await GuildTrainReportModel.pushGuildTrainReports(code, trainId, reports);//增加战报 let { trainCount, trainRewards } = userGuild; @@ -256,12 +252,7 @@ export class GuildTrainHandler { await addActive(roleId, serverId, GUILD_POINT_WAYS.TRAIN); // 任务 - if (isSuccess) { - await checkTask(roleId, sid, TASK_TYPE.GUILD_TRAIN_SUCESS, 1, true, {}); - } - await checkTask(roleId, sid, TASK_TYPE.GUILD_TRAIN, 1, true, {}); - //成长任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GUILD_TRAIN, 1) + await checkTaskInGuildTrain(serverId, roleId, sid, battleRecord.battleId, isSuccess, isComplete); return resResult(STATUS.SUCCESS, result); diff --git a/game-server/app/servers/guild/handler/raceActivityHandler.ts b/game-server/app/servers/guild/handler/raceActivityHandler.ts index 44414322c..0aa4f9983 100644 --- a/game-server/app/servers/guild/handler/raceActivityHandler.ts +++ b/game-server/app/servers/guild/handler/raceActivityHandler.ts @@ -7,7 +7,7 @@ import { GuildActivityRecordModel } from "../../../db/GuildActivityRec"; import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec"; import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; -import { checkActivityTask, checkTask } from "../../../services/task/taskService"; +import { checkTask } from "../../../services/task/taskService"; import { guildInter } from "../../../pubUtils/interface"; import { getGuildChannelSid } from "../../../services/chatService"; import { ServerRecordModel } from "../../../db/ServerRecords"; @@ -93,10 +93,7 @@ export class RaceActivityHandler { // 全服活跃统计 await ServerRecordModel.addActiveGuild(serverId, guildCode); // 任务 - await checkTask(roleId, sid, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); - //成长任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid }) - + await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_ACTIVITY, { aid: this.aid }); return resResult(STATUS.SUCCESS, { code: myGuildActivityRec.code, diff --git a/game-server/app/servers/guild/handler/wishPoolHandler.ts b/game-server/app/servers/guild/handler/wishPoolHandler.ts index 165421b1d..08db311ef 100644 --- a/game-server/app/servers/guild/handler/wishPoolHandler.ts +++ b/game-server/app/servers/guild/handler/wishPoolHandler.ts @@ -5,7 +5,7 @@ import { WishPoolReportModel } from '../../../db/WishPoolReport'; import { resResult, genCode } from '../../../pubUtils/util'; import { ITEM_CHANGE_REASON, STATUS } from '../../../consts'; import { getArmyWishPoolBaseByLv, getGoodById, getWishPoolReward } from '../../../pubUtils/data'; -import { addItems, checkGoods, checkHeroEquips, checkHeroes } from '../../../services/role/rewardService'; +import { addItems, checkGoods, checkHeroEquips, checkHeroes, getHonourObject } from '../../../services/role/rewardService'; import { ITID, CONSUME_TYPE } from '../../../consts/constModules/itemConst'; import { GUILD_STRUCTURE } from '../../../consts/constModules/guildConst'; import { refreshUserGuild, getWishPool, getUserGuildWithRefActive } from '../../../services/guildService'; @@ -15,7 +15,6 @@ import { getRoleOnlineInfo } from '../../../services/redisService'; import { ARMY } from '../../../pubUtils/dicParam'; import { guildInter } from '../../../pubUtils/interface'; import { getSeconds, getZeroPoint, nowSeconds } from '../../../pubUtils/timeUtil'; -import { getHonourObject } from '../../../pubUtils/itemUtils'; export default function(app: Application) { return new WishPoolHandler(app); } diff --git a/game-server/app/servers/order/handler/orderHandler.ts b/game-server/app/servers/order/handler/orderHandler.ts index d00dcd2c7..ae817341e 100644 --- a/game-server/app/servers/order/handler/orderHandler.ts +++ b/game-server/app/servers/order/handler/orderHandler.ts @@ -10,7 +10,6 @@ import { applyOrder37 } from '../../../services/pay/37Pay'; import { settleOrder, settleOrderAli, settleOrderWx } from '../../../services/orderService'; import { addRechargeMoney } from '../../../services/activity/rechargeMoneyService'; import { addVipRechargeMoney } from '../../../services/activity/vipRechargeMoneyService'; -import { checkActivityTask } from '../../../services/task/taskService'; import { getActivityById } from '../../../services/activity/activityService'; import { reportTAEvent } from '../../../services/sdkService'; diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index 4bf608703..a9265758c 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -3,19 +3,20 @@ import { STATUS, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON, TASK_TYPE } from "../../. import { ItemInter, RewardInter } from "../../../pubUtils/interface"; import { resResult, parseGoodStr } from "../../../pubUtils/util"; -import { addItems, handleCost, combineItems, CheckMeterial } from "../../../services/role/rewardService"; +import { addItems, getJewelRandSe, handleCost } from "../../../services/role/rewardService"; import { HeroModel, EPlace } from "../../../db/Hero"; import { calPlayerCeAndSave } from "../../../services/playerCeService"; import { gameData, getEquipByJobClassAndEPlace, getNextEquipQuality, getEquipStarIdByEquipId, getNextEquipStar } from "../../../pubUtils/data"; import { BAG, EQUIP } from "../../../pubUtils/dicParam"; -import { getRandSeResult, updateEplace, updateEplaces, checkJewelCanPutOnEquip, updateStone, checkStoneCanPutOnEquip, checkTaskInComposeEquip, checkTaskInEquipLvUp, checkTaskInComposeStone, checkTaskInEquipReset, checkTaskInEquipQuench, isLocked } from "../../../services/equipService"; +import { getRandSeResult, updateEplace, updateEplaces, checkJewelCanPutOnEquip, updateStone, checkStoneCanPutOnEquip, isLocked } from "../../../services/equipService"; import { isNumber, pick } from 'underscore'; import { JewelModel, RandSe } from "../../../db/Jewel"; -import { getJewelRandSe } from "../../../pubUtils/itemUtils"; -import { checkTaskInEquipQualityUp, checkTaskInEquipStarUp, checkTaskInPutJewel, checkTaskInPutStone } from '../../../services/equipService'; +import { checkTaskInComposeEquip, checkTaskInEquipLvUp, checkTaskInComposeStone, checkTaskInEquipReset, checkTaskInEquipQuench, checkTaskInEquipQualityUp, checkTaskInEquipStarUp, checkTaskInPutJewel, checkTaskInPutStone } from '../../../services/task/taskService'; import { pushEquipQualityMax, pushEquipStarMax } from "../../../services/sysChatService"; import { addConsumeToHero } from "../../../services/roleService"; +import { CheckMeterial } from "../../../services/role/checkMaterial"; +import { combineItems } from "../../../services/role/util"; export default function (app: Application) { new HandlerService(app, {}); @@ -57,7 +58,7 @@ export class EquipHandler { consumes: addConsumeToHero(hero.consumes, dicEquip.composeMaterial), } hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.COMPOSE_EQUIP, sid, roleId, hero, update, [ePlaceId]); - await checkTaskInComposeEquip(serverId, roleId, sid, oldEplace, newEplace, ePlaceId); + await checkTaskInComposeEquip(serverId, roleId, sid, oldEplace, newEplace); return resResult(STATUS.SUCCESS, { curHero: { diff --git a/game-server/app/servers/role/handler/friendHandler.ts b/game-server/app/servers/role/handler/friendHandler.ts index c3429f0a5..95428dcdb 100644 --- a/game-server/app/servers/role/handler/friendHandler.ts +++ b/game-server/app/servers/role/handler/friendHandler.ts @@ -11,8 +11,7 @@ import { isRoleOnline, getServerName, getRoleOnlineInfo } from "../../../service import { increaseFrdCnt, getRecommendType, sortByBeSentHeart, getApplyList, getFriendList, getMyApplyParam, getMyParamAsFriend } from "../../../services/friendService"; import { FriendPointModel } from "../../../db/FriendPoint"; import { gameData, getDicFriendByLv } from "../../../pubUtils/data"; -import { addItems, handleCost } from "../../../services/role/rewardService"; -import { getFriendPointObject } from "../../../pubUtils/itemUtils"; +import { addItems, getFriendPointObject, handleCost } from "../../../services/role/rewardService"; import { RewardInter } from "../../../pubUtils/interface"; import { FriendPresentLogModel } from '../../../db/FriendPresentLog'; import { HeroModel, EPlace } from "../../../db/Hero"; @@ -21,7 +20,7 @@ import { FRIEND } from "../../../pubUtils/dicParam"; import { PlayerDetail, PlayerDetailHero } from "../../../domain/battleField/guild"; import { createPrivateMsg, pushMsgToRole, pushPresent } from "../../../services/chatService"; import { Rank } from "../../../services/rankService"; -import { checkTaskWithRoles, checkTask, checkActivityTask } from "../../../services/task/taskService"; +import { checkTaskWithRoles, checkTask } from "../../../services/task/taskService"; import { ComBattleTeamModel } from "../../../db/ComBattleTeam"; import { JewelModel } from "../../../db/Jewel"; @@ -256,13 +255,6 @@ export class FriendHandler { roles.push(role); // 任务 await checkTaskWithRoles(serverId, roleId, sid, TASK_TYPE.FRIEND_NUM, roles); - for(let curRole of roles) { - if(curRole.roleId == role.roleId) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.FRIEND_NUM, curRole.friendCnt); - } else { - await checkActivityTask(serverId, null, curRole.roleId, TASK_TYPE.FRIEND_NUM, curRole.friendCnt); - } - } // 特殊处理:如果他点一键同意,有很多人,这个单独的人就不做这个额外的提示,直接把他好友申请删掉就好 if (str == getResStr(STATUS.FRIEND_HAS_ADD) && resultApplyCodeList.length > 1) str = ''; @@ -435,9 +427,6 @@ export class FriendHandler { // 任务 await checkTaskWithRoles(serverId, roleId, sid, TASK_TYPE.FRIEND_NUM, [role, friend]); - await checkActivityTask(serverId, sid, role.roleId, TASK_TYPE.FRIEND_NUM, role.friendCnt); - if(friend) await checkActivityTask(serverId, null, friend.roleId, TASK_TYPE.FRIEND_NUM, friend.friendCnt); - return resResult(STATUS.SUCCESS, { frdRoleIds, blackRoleIds, isSuccess: str == '', @@ -507,11 +496,9 @@ export class FriendHandler { // 更新情谊值 frdPointRec = await FriendPointModel.updateSendCntToday(roleId, roleName, todaySendInc, max, FRIEND_DROP_TYPE.SEND_GIFT); - // 任务 - await checkTask(roleId, sid, TASK_TYPE.FRIEND_SEND_HEART, todaySendInc, true, {}); // 活动任务 if (todaySendInc > 0) { - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.FRIEND_SEND_HEART, todaySendInc); + await checkTask(serverId, roleId, sid, TASK_TYPE.FRIEND_SEND_HEART, { count: todaySendInc }); } return resResult(STATUS.SUCCESS, { diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index 51665d3f3..a65894537 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -1,5 +1,5 @@ import { Application, BackendSession, ChannelService, HandlerService, } from 'pinus'; -import { handleCost, addItems, unlockFigure, createHeroes, createHero, CheckMeterial } from '../../../services/role/rewardService'; +import { handleCost, addItems, unlockFigure, getCoinObject, getGoldObject } from '../../../services/role/rewardService'; import { calPlayerCeAndSave, calAllHeroCe } from '../../../services/playerCeService'; import { resResult, deepCopy, reduceCe } from '../../../pubUtils/util'; import { STATUS } from '../../../consts/statusCode'; @@ -17,10 +17,11 @@ import { checkTask, checkTaskInHeroQUalityUp, checkTaskInHeroStarUp, checkTaskIn import { isNumber, pick } from 'underscore'; import { updateEplaces } from '../../../services/equipService'; import { addConsumeToHero } from '../../../services/roleService'; -import { getCoinObject, getGoldObject } from '../../../pubUtils/itemUtils'; import { JewelModel, jewelUpdate } from '../../../db/Jewel'; import { CalHeroCe } from '../../../domain/roleField/calCe'; import { REBORN } from '../../../pubUtils/dicParam'; +import { createHero, createHeroes } from '../../../services/role/createHero'; +import { CheckMeterial } from '../../../services/role/checkMaterial'; export default function (app: Application) { new HandlerService(app, {}); diff --git a/game-server/app/servers/role/handler/itemHandler.ts b/game-server/app/servers/role/handler/itemHandler.ts index 194c77e71..40fe316dd 100644 --- a/game-server/app/servers/role/handler/itemHandler.ts +++ b/game-server/app/servers/role/handler/itemHandler.ts @@ -67,6 +67,7 @@ export class ItemHandler { const roleId = session.get('roleId'); const sid = session.get('sid'); const ip = session.get('ip'); + const serverId = session.get('serverId'); if (count > 0) { let dicGoods = gameData.goods.get(id); @@ -90,7 +91,7 @@ export class ItemHandler { let consumeResult = await handleCost(roleId, sid, [{ id: id, count: count }], ITEM_CHANGE_REASON.USE_MEAT); if (!consumeResult) return resResult(STATUS.BATTLE_CONSUMES_NOT_ENOUGH); - let apJson = await setAp(roleId, ip, role.lv, dicGoods.value * count, sid, ITEM_CHANGE_REASON.USE_MEAT); + let apJson = await setAp(serverId, roleId, ip, role.lv, dicGoods.value * count, sid, ITEM_CHANGE_REASON.USE_MEAT); return resResult(STATUS.SUCCESS, { apJson @@ -191,9 +192,10 @@ export class ItemHandler { const roleId = session.get('roleId'); const sid = session.get('sid'); const ip = session.get('ip'); + const serverId = session.get('serverId'); let role = await RoleModel.findByRoleId(roleId, 'lv'); - let apJson = await setAp(roleId, ip, role.lv, msg.ap, sid, ITEM_CHANGE_REASON.DEBUG); + let apJson = await setAp(serverId, roleId, ip, role.lv, msg.ap, sid, ITEM_CHANGE_REASON.DEBUG); if (!apJson) return resResult(STATUS.BATTLE_ACTION_POINT_LACK) return resResult(STATUS.SUCCESS, { apJson }); } diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 55c6979f5..ba0d7e60d 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -3,7 +3,7 @@ import { RoleModel, RoleUpdate } from './../../../db/Role'; import { HeroModel, HeroUpdate } from '../../../db/Hero'; import { resResult, decodeIdCntArrayStr, parseGoodStr, genCode } from '../../../pubUtils/util'; import { Application, BackendSession, pinus, HandlerService, } from 'pinus'; -import { handleCost, addItems } from '../../../services/role/rewardService'; +import { handleCost, addItems, getGoldObject, getCoinObject } from '../../../services/role/rewardService'; import { getTitle, getTeraph, gameData, getScollByStar, getFriendLvByExp, getHeroExpByLv, getExpByLv } from '../../../pubUtils/data'; import { SCHOOL, SCROLL, EXTERIOR, SCRIPT } from '../../../pubUtils/dicParam'; import { getAtrrNameById } from '../../../consts/constModules/abilityConst' @@ -16,8 +16,7 @@ import { HERO_SYSTEM_TYPE, LINEUP_NUM, ROLE_SELECT, REDIS_KEY, TASK_TYPE, DEFAUL import { checkBattleHeroesByHid, roleLevelup } from '../../../services/normalBattleService'; import { Rank } from '../../../services/rankService'; import { updateUserInfo } from '../../../services/redisService'; -import { checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/task/taskService'; -import { getGoldObject, getCoinObject } from '../../../pubUtils/itemUtils'; +import { checkTask, checkTaskInActiveScroll } from '../../../services/task/taskService'; import { RScriptRecordModel } from '../../../db/RScriptRecord'; import { SkinModel, SkinUpdate } from '../../../db/Skin'; import { Figure } from '../../../domain/dbGeneral'; @@ -111,10 +110,7 @@ export class RoleHandler { let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TITLE, sid, roleId, update); // 任务 - await checkTask(roleId, sid, TASK_TYPE.ROLE_TITLE, 1, false, { oldTitle: title, title: update.title }); - //成长任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.ROLE_TITLE, update.title) - + await checkTask(serverId, roleId, sid, TASK_TYPE.ROLE_TITLE, { oldTitle: title, title: update.title }); return resResult(STATUS.SUCCESS, { roleId: calResult.role, title: role.title }); } @@ -147,8 +143,7 @@ export class RoleHandler { let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH, sid, roleId, { teraphs }, [id]); // 任务 - await checkTask(roleId, sid, TASK_TYPE.ROLE_TERAPH_STRENGTHEN, count, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.ROLE_TERAPH_STRENGTHEN, count); + await checkTask(serverId, roleId, sid, TASK_TYPE.ROLE_TERAPH_STRENGTHEN, { count }); return resResult(STATUS.SUCCESS, { roleId, teraphs: calResult.role.teraphs, criAttr }); } @@ -192,7 +187,7 @@ export class RoleHandler { let calResult = await calAllHeroCe(HERO_SYSTEM_TYPE.TERAPH_UP, sid, roleId, { teraphs }, [id]); // 神像进阶,进阶一次就触发一次礼包弹框 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.ROLE_TERAPH_STAGE_UP, 1) + await checkTask(serverId, roleId, sid, TASK_TYPE.ROLE_TERAPH_STAGE_UP); return resResult(STATUS.SUCCESS, { roleId, teraphs: calResult.role.teraphs }); } @@ -249,11 +244,7 @@ export class RoleHandler { await calAllHeroCe(HERO_SYSTEM_TYPE.SCHOOL, sid, roleId, {}, [schoolId, hid, preHid]); // 任务 - await checkTaskWithArgs(roleId, sid, TASK_TYPE.ROLE_SCHOOL_UNLOCK, [hid, preHid]); - if (hid > 0) { - //成长任务 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.ROLE_SCHOOL_PUT_HERO, 1) - } + await checkTask(serverId, roleId, sid, TASK_TYPE.ROLE_SCHOOL_PUT_HERO, { hid, preHid }); return resResult(STATUS.SUCCESS, { schoolId, positionId, hid, preHid, isOpen @@ -291,8 +282,7 @@ export class RoleHandler { curSchool = await SchoolModel.updateBySclAndPos(roleId, schoolId, positionId, { isOpen: true }) // 任务 - await checkTask(roleId, sid, TASK_TYPE.ROLE_SCHOOL_UNLOCK, 1, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.ROLE_SCHOOL_UNLOCK, 1) + await checkTask(serverId, roleId, sid, TASK_TYPE.ROLE_SCHOOL_UNLOCK); return resResult(STATUS.SUCCESS, { schoolId, positionId, hid: curSchool.hid, isOpen: curSchool.isOpen @@ -324,7 +314,6 @@ export class RoleHandler { update.scrollStar = dicHero.initialStars; update.scrollQuality = dicHero.quality; update.scrollColorStar = 0; - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.HERO_UNLOCK, 1, { dicHeroes: [dicHero] }) } else { if (star > scrollStar) { // 可以升星 update.scrollStar++; @@ -346,10 +335,7 @@ export class RoleHandler { await calAllHeroCe(HERO_SYSTEM_TYPE.SCROLL, sid, roleId, {}, [hid]); // 全局增加战力 // 任务 - if (!scrollActive) { - await checkTask(roleId, sid, TASK_TYPE.ROLE_SCROLL_ACTIVE, 1, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.ROLE_SCROLL_ACTIVE, 1); - } + await checkTaskInActiveScroll(serverId, roleId, sid, scrollActive, hero); return resResult(STATUS.SUCCESS, { curHero: { diff --git a/game-server/app/servers/role/handler/shopHandler.ts b/game-server/app/servers/role/handler/shopHandler.ts index e06413960..29c31a687 100644 --- a/game-server/app/servers/role/handler/shopHandler.ts +++ b/game-server/app/servers/role/handler/shopHandler.ts @@ -7,7 +7,6 @@ import { UserShopModel } from "../../../db/UserShop"; import { handleCost, addItems } from "../../../services/role/rewardService"; import { GuildModel } from "../../../db/Guild"; import { SHOP } from "../../../pubUtils/dicParam"; -import { getHonourObject } from "../../../pubUtils/itemUtils"; import { HeroModel } from "../../../db/Hero"; import { getShopListById } from "../../../services/shopService"; import { RewardInter } from "../../../pubUtils/interface"; diff --git a/game-server/app/services/actionPointService.ts b/game-server/app/services/actionPointService.ts index 12cfba0ab..d59f40d19 100644 --- a/game-server/app/services/actionPointService.ts +++ b/game-server/app/services/actionPointService.ts @@ -4,7 +4,7 @@ import { ActionPointModel, ActionPointType } from '../db/ActionPoint'; import { TASK_TYPE, STATUS, TA_EVENT, ITEM_CHANGE_REASON } from '../consts'; -import { checkActivityTask, checkTask } from './task/taskService'; +import { checkTask } from './task/taskService'; import { getDicApByLv } from '../pubUtils/data'; import { pinus } from 'pinus'; import { resResult, shouldRefresh } from '../pubUtils/util'; @@ -68,7 +68,7 @@ function getApWithDataAp(roleId: string, ip: string, lv: number, dataAp: ActionP * @param changeAp 体力变化,正是加,负是减 * @param sid */ -export async function setAp(roleId: string, ip: string, lv: number, changeAp: number, sid: string, reason: ITEM_CHANGE_REASON) { +export async function setAp(serverId: number, roleId: string, ip: string, lv: number, changeAp: number, sid: string, reason: ITEM_CHANGE_REASON) { // console.log('***** setAp', roleId, ip, lv, changeAp) const now = Date.now(); const dicAp = getDicApByLv(lv); @@ -89,9 +89,7 @@ export async function setAp(roleId: string, ip: string, lv: number, changeAp: nu } if (changeAp < 0) { - await checkTask(roleId, sid, TASK_TYPE.BATTLE_COST_AP, -1 * changeAp, true, {}); - let { serverId } = await RoleModel.findByRoleId(roleId); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_COST_AP, -1 * changeAp,); + await checkTask(serverId, roleId, sid, TASK_TYPE.BATTLE_COST_AP, { count: -changeAp }); // reportTAEvent(roleId, TA_EVENT.AP_CONSUME, { change_count: -1 * changeAp, change_after: ap, change_reason: reason }, ip) } else { reportTAEvent(roleId, TA_EVENT.AP_GET, { change_count: changeAp, change_after: ap, change_reason: reason }, ip) diff --git a/game-server/app/services/activity/gachaService.ts b/game-server/app/services/activity/gachaService.ts index 5c1795df4..12982b75d 100644 --- a/game-server/app/services/activity/gachaService.ts +++ b/game-server/app/services/activity/gachaService.ts @@ -8,10 +8,10 @@ import { gameData, getDicGachaFloor } from "../../pubUtils/data"; import { RoleModel } from "../../db/Role"; import { RewardInter } from "../../pubUtils/interface"; import { CreateHeroParam } from "../../domain/roleField/hero"; -import { transPiece } from "../../pubUtils/itemUtils"; import { HeroType } from "../../db/Hero"; import { NewHeroGachaItem } from "../../domain/activityField/newHeroGachaField"; import { getActivityById } from "./activityService"; +import { transPiece } from "../role/util"; /** * 获取招募列表 diff --git a/game-server/app/services/activity/giftPackageService.ts b/game-server/app/services/activity/giftPackageService.ts index f69947c64..1231e47c9 100644 --- a/game-server/app/services/activity/giftPackageService.ts +++ b/game-server/app/services/activity/giftPackageService.ts @@ -1,11 +1,12 @@ import { GIFT_PACKAGE_TYPE, ACTIVITY_RESOURCES_TYPE, ITEM_CHANGE_REASON } from '../../consts'; import { gameData } from '../../pubUtils/data'; -import { addItems, createHeroes } from '../role/rewardService'; +import { addItems } from '../role/rewardService'; import { RewardParam } from '../../domain/activityField/rewardField'; import { CreateHeroParam } from '../../domain/roleField/hero'; import { DicGiftPackage } from '../../pubUtils/dictionary/DicGiftPackage'; import { ItemInter, RewardInter } from '../../pubUtils/interface'; import { decodeArrayListStr } from '../../pubUtils/util'; +import { createHeroes } from '../role/createHero'; diff --git a/game-server/app/services/activity/monthlyTicketService.ts b/game-server/app/services/activity/monthlyTicketService.ts index 2a15ab2d9..a4140ffb7 100644 --- a/game-server/app/services/activity/monthlyTicketService.ts +++ b/game-server/app/services/activity/monthlyTicketService.ts @@ -10,10 +10,10 @@ import { sendMailByContent } from './../mailService'; import { RoleModel, RoleType } from '../../db/Role'; import { getActivityById } from './activityService'; import { RewardInter } from '../../pubUtils/interface'; -import { getGoldId } from '../../pubUtils/itemUtils'; import { DUNGEON_CONST, PVP, VIP } from '../../pubUtils/dicParam'; import { cal } from '../../pubUtils/util'; import { pinus } from 'pinus'; +import { getGoldId } from '../role/rewardService'; /** * 获取活动数据 diff --git a/game-server/app/services/activity/popUpShopService.ts b/game-server/app/services/activity/popUpShopService.ts index efbf1684f..df28b3600 100644 --- a/game-server/app/services/activity/popUpShopService.ts +++ b/game-server/app/services/activity/popUpShopService.ts @@ -39,7 +39,7 @@ export async function getPopUpShopDataShow(activityId: number, serverId: number, return null } -export async function checkPopUpConditionInCreateHero(serverId, roleId, heroes: HeroType[]) { +export async function checkPopUpConditionInCreateHero(serverId: number, roleId: string, heroes: HeroType[]) { let conditions = heroes.map(hero => ({ conditionType: POP_UP_SHOP_CONDITION_TYPE.GET_HERO_BY_QUALITY, param: { quality: hero.quality } })); return await checkPopUpConditions(serverId, roleId, conditions); } diff --git a/game-server/app/services/battleService.ts b/game-server/app/services/battleService.ts index 28acc8da1..6ef094d18 100644 --- a/game-server/app/services/battleService.ts +++ b/game-server/app/services/battleService.ts @@ -9,7 +9,7 @@ import { STATUS } from '../consts/statusCode'; import { HangUpSpdUpRecModel } from '../db/HangUpSpdUpRec'; import { TaskHero, TowerTaskRecModel, TowerTaskRecType } from '../db/TowerTaskRec'; import { Rank } from './rankService'; -import { checkActivityTask, checkTask } from './task/taskService'; +import { checkTask } from './task/taskService'; import { getRandExpedition, gameData } from '../pubUtils/data'; import { ItemInter, RewardInter } from '../pubUtils/interface'; import { getTimeFunM } from '../pubUtils/timeUtil'; @@ -237,8 +237,7 @@ export async function towerBattleEnd(sid: string, roleId: string, serverId: numb if (reward) towerReward = reward; await checkAndStartHungUp(roleId, roleName, role.towerLv - 1); // 任务 - await checkTask(roleId, sid, TASK_TYPE.BATTLE_TOWER_LV, role.towerLv - 1, false, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.BATTLE_TOWER_LV, 1, { towerLv: role.towerLv - 1 }); + await checkTask(serverId, roleId, sid, TASK_TYPE.BATTLE_TOWER_LV, { towerLv: role.towerLv - 1 }); } return { status: 0, diff --git a/game-server/app/services/equipService.ts b/game-server/app/services/equipService.ts index 658891379..c094a1d9d 100644 --- a/game-server/app/services/equipService.ts +++ b/game-server/app/services/equipService.ts @@ -2,10 +2,8 @@ import { getRandEelm, } from '../pubUtils/util'; import { EPlace, Stone } from "../db/Hero"; import { gameData, getRandEffectByGroupAndLevel } from "../pubUtils/data"; import { JewelType, RandSe } from '../db/Jewel'; -import { getJewelRandSe } from '../pubUtils/itemUtils'; -import { checkActivityTask, checkTask, checkTaskWithEplaces, checkTaskWithEplace } from './task/taskService'; -import { TASK_TYPE } from '../consts'; import { DicRandomEffectPool } from '../pubUtils/dictionary/DicRandomEffectPool'; +import { getJewelRandSe } from './role/rewardService'; export function getRandSeResult(id: number, randSe: RandSe[], originSe: RandSe[] = [], originId?: number) { let { randomEffect, effectCount, lv } = gameData.jewel.get(id); @@ -129,98 +127,21 @@ export function checkStoneCanPutOnEquip(equip: EPlace, id: number, stone: number return true; } -export async function checkTaskInComposeEquip(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceId: number) { - await checkTask(roleId, sid, TASK_TYPE.EQUIP_COMPOSE, newEplace.length - oldEplace.length, true, {}); - await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_COMPOSE_CNT, oldEplace, newEplace, [ePlaceId]); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_COMPOSE, newEplace.length - oldEplace.length); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_COMPOSE_CNT, 1, { oldEplace, newEplace }); -} - -export async function checkTaskInEquipLvUp(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceIds: number[]) { - await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_LV_TO, oldEplace, newEplace, ePlaceIds); - await checkTask(roleId, sid, TASK_TYPE.EQUIP_LV_UP, ePlaceIds.length, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_LV_TO, 1, { oldEplace, newEplace, ePlaceIds }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_LV_UP, ePlaceIds.length, true); -} - -export async function checkTaskInPutJewel(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceId: number, originJewel: JewelType, curJewel: JewelType) { - let { oldEquip, newEquip } = getEquipById(oldEplace, newEplace, ePlaceId); - await checkTaskWithEplace(roleId, sid, TASK_TYPE.EQUIP_PUT_JEWEL, oldEquip, newEquip, { jewels: [originJewel, curJewel ] }); - await checkTaskWithEplace(roleId, sid, TASK_TYPE.EQUIP_PUT_JEWEL_CNT, oldEquip, newEquip); - await checkTaskWithEplace(roleId, sid, TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT, oldEquip, newEquip, { jewels: [originJewel, curJewel ] }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_PUT_JEWEL, 1, { oldEquip, newEquip, jewels: [originJewel, curJewel ] }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_PUT_JEWEL_CNT, 1, { oldEquip, newEquip }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT, 1, { oldEquip, newEquip, jewels: [originJewel, curJewel ] }); -} - -export async function checkTaskInPutStone(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceId: number, jewel: JewelType) { - let { oldEquip, newEquip } = getEquipById(oldEplace, newEplace, ePlaceId); - await checkTaskWithEplace(roleId, sid, TASK_TYPE.EQUIP_PUT_STONE, oldEquip, newEquip); - await checkTaskWithEplace(roleId, sid, TASK_TYPE.EQUIP_PUT_STONE_CNT, oldEquip, newEquip); - await checkTaskWithEplace(roleId, sid, TASK_TYPE.EQUIP_STONE_CNT, oldEquip, newEquip); - await checkTaskWithEplace(roleId, sid, TASK_TYPE.EQUIP_STONE_CNT_LV, oldEquip, newEquip); - await checkTaskWithEplace(roleId, sid, TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT, oldEquip, newEquip, { jewels: [ jewel ] }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_PUT_STONE, 1, { oldEquip, newEquip }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_PUT_STONE_CNT, 1, { oldEquip, newEquip }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_STONE_CNT, 1, { oldEquip, newEquip }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_STONE_CNT_LV, 1, { oldEquip, newEquip }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT, 1, { oldEquip, newEquip, jewels: [ jewel ] }); -} - -export async function checkTaskInEquipStarUp(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceId: number, hid: number, isUpStar: boolean) { - if(isUpStar) { - let { oldEquip, newEquip } = getEquipById(oldEplace, newEplace, ePlaceId); - await checkTaskWithEplace(roleId, sid, TASK_TYPE.EQUIP_STAR_UP_TO, oldEquip, newEquip); - await checkTaskWithEplaces(roleId, sid, TASK_TYPE.EQUIP_SUIT_SEID_NUM, oldEplace, newEplace, [ePlaceId], { hid }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_STAR_UP_TO, 1, { oldEquip, newEquip }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_SUIT_SEID_NUM, 1, { oldEplace, newEplace, ePlaceId, hid }); - } - await checkTask(roleId, sid, TASK_TYPE.EQUIP_STAR_UP_CNT, 1, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_STAR_UP_CNT, 1, {}); -} - -export async function checkTaskInEquipQualityUp(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceId: number, hid: number, isUpQuality: boolean) { - if(isUpQuality) { - let { oldEquip, newEquip } = getEquipById(oldEplace, newEplace, ePlaceId); - await checkTaskWithEplace(roleId, sid, TASK_TYPE.EQUIP_QUALITY_UP, oldEquip, newEquip, { hid }); - await checkTaskWithEplace(roleId, sid, TASK_TYPE.EQUIP_QUALITY_UP_TO, oldEquip, newEquip); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_QUALITY_UP, 1, { ePlaceId, hid }); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_QUALITY_UP_TO, 1, { oldEquip, newEquip, hid }); - } - await checkTask(roleId, sid, TASK_TYPE.EQUIP_QUALITY_UP_CNT, 1, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.EQUIP_QUALITY_UP_CNT, 1); -} - -export async function checkTaskInEquipReset(serverId: number, roleId: string, sid: string) { - await checkTask(roleId, sid, TASK_TYPE.JEWEL_RESET, 1, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.JEWEL_RESET, 1); -} - -export async function checkTaskInEquipQuench(serverId: number, roleId: string, sid: string, isSuccess: boolean) { - await checkTask(roleId, sid, TASK_TYPE.JEWEL_QUENCH, 1, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.JEWEL_QUENCH, 1); - if(isSuccess) { - await checkTask(roleId, sid, TASK_TYPE.JEWEL_QUENCH_SUCCESS, 1, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.JEWEL_QUENCH_SUCCESS, 1); - } -} - -export async function checkTaskInComposeStone(serverId: number, roleId: string, sid: string, count: number) { - await checkTask(roleId, sid, TASK_TYPE.STONE_COMPOSE, count, true, {}); - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.STONE_COMPOSE, count); -} - - -function getEquipById(oldEplace: EPlace[], newEplace: EPlace[], eplaceId: number) { - let oldEquip = oldEplace.find(cur => cur.id == eplaceId)||new EPlace(eplaceId, 0); - let newEquip = newEplace.find(cur => cur.id == eplaceId)||new EPlace(eplaceId, 0); - return { oldEquip, newEquip } -} - - export function isLocked(randSe: RandSe[]) { for(let { locked } of randSe) { if(locked) return true; } return false; +} + +export function getEquipById(oldEplace: EPlace[], newEplace: EPlace[], eplaceId: number) { + let oldEquip = oldEplace.find(cur => cur.id == eplaceId)||new EPlace(eplaceId, 0); + let newEquip = newEplace.find(cur => cur.id == eplaceId)||new EPlace(eplaceId, 0); + return { oldEquip, newEquip } +} + +export function getJewelByEquip(oldEquip: EPlace, newEquip: EPlace, jewels: JewelType[]) { + let oldJewel = jewels.find(cur => cur && cur.seqId == oldEquip.jewel); + let newJewel = jewels.find(cur => cur && cur.seqId == newEquip.jewel); + return { oldJewel, newJewel } } \ No newline at end of file diff --git a/game-server/app/services/guildActivity/guildActivityService.ts b/game-server/app/services/guildActivity/guildActivityService.ts index 36b87df18..a183d9e97 100644 --- a/game-server/app/services/guildActivity/guildActivityService.ts +++ b/game-server/app/services/guildActivity/guildActivityService.ts @@ -15,7 +15,6 @@ import { pinus } from "pinus"; import { GuildActivityRecordModel } from "../../db/GuildActivityRec"; import { genAuction } from "../auctionService"; import { sendMailByContent } from "../mailService"; -import { getHonourObject } from '../../pubUtils/itemUtils'; import { GuildActivityCityType, GuildActivityCityModel } from "../../db/GuildActivityCity"; import { DicCityActivity } from "../../pubUtils/dictionary/DicCityActivity"; import { CityActivityObject } from "./cityActivityObj"; @@ -26,9 +25,9 @@ import { BossInstanceModel } from "../../db/BossInstance"; import { UserGuildModel } from "../../db/UserGuild"; import { raceActivityEnd } from "../timeTaskService"; import { addActive } from "../guildService"; -import { checkTask, checkActivityTask } from "../task/taskService"; import { ActivePlayer, GuildRecord, ServerRecordModel } from "../../db/ServerRecords"; import { Attack } from "../../domain/battleField/pvp"; +import { getHonourObject } from "../role/rewardService"; let gateActivityObj: GateActivityObject; let cityActivityObj: CityActivityObject; diff --git a/game-server/app/services/guildService.ts b/game-server/app/services/guildService.ts index e796bb05d..e4e5cfbd1 100644 --- a/game-server/app/services/guildService.ts +++ b/game-server/app/services/guildService.ts @@ -16,7 +16,7 @@ import { ErrLogModel } from '../db/ErrLog'; import { DATA_NAME } from '../consts/dataName'; import { addRoleToGuildChannel } from "./chatService"; import { Rank } from "./rankService"; -import { checkActivityTask, checkTask } from "./task/taskService"; +import { checkTask } from "./task/taskService"; import { CounterModel } from "../db/Counter"; import { getAuction } from "./auctionService"; import { changeGuildActivity } from "./activity/guildPayService"; @@ -126,8 +126,7 @@ export async function joinGuild(code: string, guildName: string, lv: number, rol } //成长任务-加入军团 - await checkActivityTask(serverId, sid, roleId, TASK_TYPE.GUILD_JOIN, 1); - await checkTask(roleId, sid, TASK_TYPE.GUILD_JOIN, 1, true, {}); + await checkTask(serverId, roleId, sid, TASK_TYPE.GUILD_JOIN); return { status: 0, guild, userGuild, roleName: role.roleName, memberCnt: guild.memberCnt, guildCe: guild.guildCe } } @@ -316,7 +315,7 @@ export async function settleGuildWeekly() { }); await sendMailByContent(MAIL_TYPE.GUILD_ACTIVE_REWARD, roleId, { goods: reward }); // 任务 - await checkTask(roleId, null, TASK_TYPE.GUILD_JOB, 1, false, { job }); + await checkTask(serverId, roleId, null, TASK_TYPE.GUILD_JOB, { guildJob: job }); } await GuildModel.updateInfo(code, { activeWeekly: 0 }, {}); diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index 27ab6c8b3..e3936e72c 100644 --- a/game-server/app/services/normalBattleService.ts +++ b/game-server/app/services/normalBattleService.ts @@ -68,7 +68,7 @@ export async function roleLevelup(type: KING_EXP_RATIO_TYPE, roleId: string, kin }); if(i != lv) { // 升级加体力 let dicAp = getDicApByLv(i); - await setAp(roleId, ip, i, dicAp.restoreAp, sid, ITEM_CHANGE_REASON.LV_UP); + await setAp(serverId, roleId, ip, i, dicAp.restoreAp, sid, ITEM_CHANGE_REASON.LV_UP); } } // 推送 diff --git a/game-server/app/services/orderService.ts b/game-server/app/services/orderService.ts index eadab397e..dcd058d77 100644 --- a/game-server/app/services/orderService.ts +++ b/game-server/app/services/orderService.ts @@ -22,7 +22,7 @@ import { resResult } from '../pubUtils/util'; import { checkOrderWX } from './pay/weixinPay'; import { addRechargeMoney } from './activity/rechargeMoneyService'; import { addVipRechargeMoney } from './activity/vipRechargeMoneyService'; -import { checkActivityTask } from './task/taskService'; +import { checkTask } from './task/taskService'; import { checkOrderALI } from './pay/aliPay'; import { getRoleOnlineInfo } from './redisService'; import { PayCallback37Data } from '../domain/sdk'; @@ -183,7 +183,7 @@ export async function settleOrder(order: UserOrderModelType, serverId: number, s addVipRechargeMoney(order.roleId, serverId, order.price); addGuildPay(result.roleInfo, order.price) //成长任务 - await checkActivityTask(serverId, sid, order.roleId, TASK_TYPE.ACTIVITY_RMB, order.price, { activityId: order.activityId }); + await checkTask(serverId, order.roleId, sid, TASK_TYPE.ACTIVITY_RMB, { count: order.price }); if(order.payType != PAY_TYPE.TEST) { reportTAEvent(order.roleId, TA_EVENT.RECHARGE_SUCCESS, { pay_id: order.localOrderID, charge_id: order.productID, pay_name: order.message, pay_amount: order.price, pay_channel: order.payType }) reportTAUserSet(TA_USERSET_TYPE.SET_ONCE, order.roleId, { first_pay_time: new Date() }); diff --git a/game-server/app/services/pvpService.ts b/game-server/app/services/pvpService.ts index 9af308e39..b86abcd26 100644 --- a/game-server/app/services/pvpService.ts +++ b/game-server/app/services/pvpService.ts @@ -630,8 +630,8 @@ export async function savePvpSeasonResult(pvpDefense: PvpDefenseType, seasonNum: } // 更新任务 - await checkTask(pvpDefense.roleId, null, TASK_TYPE.PVP_HERO_SCORE, 0, false, { heroScores: pvpDefense.heroScores }); - await checkTask(pvpDefense.roleId, null, TASK_TYPE.PVP_RANK, 1, false, { rankLv }); + await checkTask(pvpDefense.serverId, pvpDefense.roleId, null, TASK_TYPE.PVP_HERO_SCORE, { heroScores: pvpDefense.heroScores }); + await checkTask(pvpDefense.serverId, pvpDefense.roleId, null, TASK_TYPE.PVP_RANK, { pvpRank: rankLv }); return pvpSeasonResult; } diff --git a/game-server/app/services/role/checkMaterial.ts b/game-server/app/services/role/checkMaterial.ts new file mode 100644 index 000000000..006c9201f --- /dev/null +++ b/game-server/app/services/role/checkMaterial.ts @@ -0,0 +1,136 @@ +import { CURRENCY_TYPE, HANDLE_REWARD_TYPE, CURRENCY_BY_TYPE } from '../../consts'; +import { RoleModel, RoleType } from '../../db/Role'; +import { ItemModel, ItemType } from '../../db/Item'; +import { ItemInter, RewardInter, } from '../../pubUtils/interface'; +import { gameData } from '../../pubUtils/data'; +import { sortItems } from './util'; + +export class CheckMeterial { + private roleId: string; + private itemsIndb: Map = new Map(); // 玩家已有的东西 + private notEnoughItems: Map = new Map(); // 缺少的数量 + private consumes: ItemInter[] = []; // 消耗,正向数 + + private goldId = CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD); + private coinId = CURRENCY_BY_TYPE.get(CURRENCY_TYPE.COIN); + + constructor(roleId: string, role?: RoleType, items?: ItemType[]) { + this.roleId = roleId; + if(role) { + this.itemsIndb.set(this.goldId, role.gold); + this.itemsIndb.set(this.coinId, role.coin); + } + if(items && items.length) { + for(let {id, count} of items) { + this.itemsIndb.set(id, count); + } + } + } + + private pushToNotEnoughItems(id: number, count: number) { + if(!this.notEnoughItems.has(id)) { + this.notEnoughItems.set(id, 0); + } + this.notEnoughItems.set(id, this.notEnoughItems.get(id) + count); + } + + private getNotEnoughItems() { + let map = new Map(); + for(let [ id, count ] of this.notEnoughItems) { + map.set(id, count); + } + return map; + } + + public async decrease(goods: {id: number, count: number}[]) { + this.notEnoughItems.clear(); + let { items, gold, coin } = sortItems(goods, HANDLE_REWARD_TYPE.COST); + let isEnough = true; + for(let { id, count} of items) { + if(!this.itemsIndb.has(id)) { + let item = await ItemModel.findbyRoleAndGid(this.roleId, id); + if(!item) { + this.pushToNotEnoughItems(id, count); + isEnough = false; break; + } + this.itemsIndb.set(id, item.count); + } + if(this.itemsIndb.get(id) < count) { + this.pushToNotEnoughItems(id, count - this.itemsIndb.get(id)); + isEnough = false; break; + } + this.itemsIndb.set(id, this.itemsIndb.get(id) - count); + } + + if(gold.length > 0) { + if(!this.itemsIndb.has(this.goldId)) { + let role = await RoleModel.findByRoleId(this.roleId, 'gold coin'); + this.itemsIndb.set(this.goldId, role.gold); + this.itemsIndb.set(this.coinId, role.coin); + } + let goldCost = gold.reduce((pre, cur) => { return pre + cur.count }, 0); + if(this.itemsIndb.get(this.goldId) < goldCost) { + this.pushToNotEnoughItems(this.goldId, goldCost - this.itemsIndb.get(this.goldId)); + isEnough = false; + } + this.itemsIndb.set(this.goldId, this.itemsIndb.get(this.goldId) - goldCost); + } + if(isEnough && coin.length > 0) { + if(!this.itemsIndb.has(this.coinId)) { + let role = await RoleModel.findByRoleId(this.roleId, 'gold coin'); + this.itemsIndb.set(this.goldId, role.gold); + this.itemsIndb.set(this.coinId, role.coin); + } + let coinCost = coin.reduce((pre, cur) => pre + cur, 0); + if(this.itemsIndb.get(this.coinId) < coinCost) { + this.pushToNotEnoughItems(this.coinId, coinCost - this.itemsIndb.get(this.coinId)); + isEnough = false; + } + this.itemsIndb.set(this.coinId, this.itemsIndb.get(this.coinId) - coinCost); + } + + if(isEnough) this.consumes.push(...goods); + return isEnough; + } + + private getMaterialEnough(materials: RewardInter[], notEnoughItems: Map) { + let newMaterials: RewardInter[] = []; + for(let {id, count} of materials) { + if(notEnoughItems.has(id)) { + newMaterials.push({ id, count: count - notEnoughItems.get(id) }); + } else { + newMaterials.push({ id, count }); + } + } + return newMaterials; + } + + // 检查地玉石是否可以合成 + public async composeStone(id: number, count: number) { + let dicStone = gameData.stone.get(id); + if(!dicStone || dicStone.composeMaterial.length <= 0) return false; // 1阶石头不能再从下合成返回不行 + let materials = dicStone.composeMaterial.map(cur => ({...cur, count: cur.count * count })); + let isEnough = await this.decrease(materials); + if(!isEnough) { + let notEnoughItems = this.getNotEnoughItems(); + let newMaterials = this.getMaterialEnough(materials, notEnoughItems); + let isEnough = await this.decrease(newMaterials); // 消耗掉除了不足的部分以外的其他部分 + if(!isEnough) return false; + + let isAllOK = true; // 如果有石头不足,向下补充,isAllOK标识不足的都能补充上 + for(let [id, count] of notEnoughItems) { + let isEnough = await this.composeStone(id, count); + if(!isEnough) { + isAllOK = false; break; + } + } + return isAllOK; + } else { + return true; + } + } + + public getConsume() { + return this.consumes; + } +} \ No newline at end of file diff --git a/game-server/app/services/role/createHero.ts b/game-server/app/services/role/createHero.ts index 750866b68..ad52d5689 100644 --- a/game-server/app/services/role/createHero.ts +++ b/game-server/app/services/role/createHero.ts @@ -4,7 +4,6 @@ import { HeroModel, HeroSkin, HeroType, HeroUpdate } from "../../db/Hero"; import { RoleModel, RoleType, RoleUpdate } from "../../db/Role"; import { SkinUpdate } from "../../db/Skin"; import { Figure, TopHero } from "../../domain/dbGeneral"; -import { combineFigureInfo, unlockFigureWithoutSave } from '../../pubUtils/itemUtils'; import { TaskListReturn } from "../../domain/roleField/task"; import { GuildModel, GuildType } from "../../db/Guild"; import { PvpDefenseModel } from "../../db/PvpDefense"; @@ -12,12 +11,16 @@ import { pick } from "underscore"; import { calculatetopLineup } from "../../pubUtils/playerCe"; import { nowSeconds } from "../../pubUtils/timeUtil"; import { saveCeChangeLog } from "../../pubUtils/logUtil"; -import { reduceCe, resResult } from "../../pubUtils/util"; +import { getRandSingleEelm, reduceCe, resResult } from "../../pubUtils/util"; import { AttributeCal } from "../../domain/roleField/attribute"; -import { HeroShowParam } from "../../domain/roleField/hero"; +import { CreateHeroParam, HeroShowParam } from "../../domain/roleField/hero"; import { pinus } from "pinus"; import { Rank } from "../rankService"; import { checkTaskInCreateHero } from "../task/taskService"; +import { ItemInter, RewardInter } from "../../pubUtils/interface"; +import { transPiece } from "./util"; +import { getInitHeroById } from "../roleService"; +import { addItems, combineFigureInfo, unlockFigureWithoutSave } from "./rewardService"; export class UpdateHeroes { roleId: string; @@ -210,4 +213,65 @@ export class CreateHeroes extends UpdateHeroes { return { ...hero, ce: reduceCe(cur.ce)} }); } +} + + +/** + * 创建多个武将 + * @param roleId + * @param sid + * @param serverId + * @param heroInfo + */ + export async function createHeroes(roleId: string, roleName: string, sid: string, serverId: number, heroInfo: CreateHeroParam[]) { + let hids = heroInfo.map(cur => cur.hid); + let userHeroesMap = await HeroModel.findMapByHidRange(hids, roleId); + + let infos: Map = new Map(), pieces: ItemInter[] = []; + for (let h of heroInfo) { + let heroCount = h.count || 1; + if (userHeroesMap.has(h.hid)) { + let { pieceId, count } = transPiece(h.hid); + pieces.push({ id: pieceId, count: count * heroCount }); + } else { + let initInfo: { heroInfo: HeroUpdate, skinInfo: SkinUpdate }; + if(pinus.app.getServerType() == 'role') { + initInfo = getInitHeroById(h.hid); + } else { + let roleServers = pinus.app.getServersByType('role'); + let server = getRandSingleEelm(roleServers); + initInfo = await pinus.app.rpc.role.roleRemote.getInitHeroById.toServer(server.id, h.hid); + } + + initInfo.heroInfo = { ...initInfo.heroInfo, ...h }; + + infos.set(h.hid, initInfo); + userHeroesMap.set(h.hid, null); + if (heroCount > 1) { + let { pieceId, count } = transPiece(h.hid); + pieces.push({ id: pieceId, count: count * (heroCount - 1) }); + } + } + } + + let resultHeroes: HeroType[] = [], resultItems: RewardInter[] = [], heroes: HeroShowParam[] = []; + if (infos.size > 0) { + let createHero = new CreateHeroes(roleId, roleName, serverId); + await createHero.createWithHeroInfo(infos); + await createHero.pushMessage(sid); + await createHero.updateRedisRank(); + heroes = createHero.getShowHeroes(); + resultHeroes = createHero.getResultHeroes(); + } + + if (pieces.length > 0) { + let goods = await addItems(roleId, roleName, sid, pieces, ITEM_CHANGE_REASON.HERO_TRANSFER_PIECE); + resultItems = goods; + } + return { heroes, resultHeroes, goods: resultItems } +} + +export async function createHero(roleId: string, roleName: string, sid: string, serverId: number, heroInfo: CreateHeroParam) { + let result = await createHeroes(roleId, roleName, sid, serverId, [heroInfo]); + return result; } \ No newline at end of file diff --git a/game-server/app/services/role/initRoleService.ts b/game-server/app/services/role/initRoleService.ts index 39593c6f4..218990f28 100644 --- a/game-server/app/services/role/initRoleService.ts +++ b/game-server/app/services/role/initRoleService.ts @@ -5,7 +5,7 @@ import { SkinModel, SkinUpdate } from "../../db/Skin"; import { TopHero } from "../../domain/dbGeneral"; import { CalHeroCe, CalRoleCe } from "../../domain/roleField/calCe"; import { gameData, getHeroExpByLv } from "../../pubUtils/data"; -import { unlockFigureWithoutSave } from "../../pubUtils/itemUtils"; +import { unlockFigureWithoutSave } from "./rewardService"; // 储存在内存中的初始数据 export function getInitRoleInfo() { diff --git a/game-server/app/services/role/rewardService.ts b/game-server/app/services/role/rewardService.ts index 0c42bcee2..545df6c7a 100644 --- a/game-server/app/services/role/rewardService.ts +++ b/game-server/app/services/role/rewardService.ts @@ -1,163 +1,33 @@ -import { ITID, CONSUME_TYPE, ITEM_TABLE, CURRENCY, CURRENCY_TYPE, MAIL_TYPE, HANDLE_REWARD_TYPE, HERO_SYSTEM_TYPE, CURRENCY_BY_TYPE, ITEM_CHANGE_REASON, TA_USERSET_TYPE, TA_EVENT, POP_UP_SHOP_CONDITION_TYPE } from '../../consts'; -import { getRandSingleEelm, resResult } from '../../pubUtils/util'; +import { ITID, CONSUME_TYPE, ITEM_TABLE, CURRENCY, CURRENCY_TYPE, MAIL_TYPE, HANDLE_REWARD_TYPE, HERO_SYSTEM_TYPE, CURRENCY_BY_TYPE, ITEM_CHANGE_REASON, TA_USERSET_TYPE, TA_EVENT, POP_UP_SHOP_CONDITION_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION } from '../../consts'; +import { getDecimalCnt, getRandEelm, getRandEelmWithWeight, getRandSingleEelm, getRandValueByMinMax, resResult } from '../../pubUtils/util'; import { RoleModel, RoleType } from '../../db/Role'; import { setAp } from '../actionPointService'; -import { pushCalAllHeroCe, calPlayerCeAndSave } from '../playerCeService'; +import { pushCalAllHeroCe, calPlayerCeAndSave, calAllHeroCe } from '../playerCeService'; import { ItemModel, ItemType } from '../../db/Item'; import { STATUS } from '../../consts/statusCode'; import { pinus } from 'pinus'; -import { addJewels, addBags, addSkin, addFigure, unlockFigure as pubUnlockFigure, transPiece, getGoldObject, getCoinObject, getApObject } from '../../pubUtils/itemUtils'; import { ItemInter, RewardInter, } from '../../pubUtils/interface'; import { gameData } from '../../pubUtils/data'; import { uniq } from 'underscore'; import { EPlace, HeroModel, HeroType, HeroUpdate } from '../../db/Hero'; import { Figure } from '../../domain/dbGeneral'; -import { Rank } from '../rankService'; -import { pushTaskUpdate } from '../task/taskService'; import { CreateHeroParam, HeroShowParam } from '../../domain/roleField/hero'; import { HeroSkin } from '../../db/Hero'; import { errlogger } from '../../util/logger'; import { BAG } from '../../pubUtils/dicParam'; import { sendMailByContent } from '../mailService'; -import { SkinUpdate } from '../../db/Skin'; +import { SkinModel, SkinUpdate } from '../../db/Skin'; import { getInitHeroById } from '../roleService'; import { getActivities } from '../activity/activityService'; import { reportTAEvent, reportTAUserSet } from '../sdkService'; import { saveCoinChangeLog, saveFigureInfoLog, saveGoldChangeLog, saveItemChangeLog } from '../../pubUtils/logUtil'; -import { JewelModel, JewelType } from '../../db/Jewel'; +import { JewelModel, JewelType, jewelUpdate, RandSe } from '../../db/Jewel'; import { updateEplaces } from '../equipService'; import { checkPopUpConditionInCreateHero } from '../activity/popUpShopService'; import { CreateHeroes } from './createHero'; +import { combineItems, getCoinEventProperties, getGoldEventProperties, sortItems } from './util'; +import { nowSeconds } from '../../pubUtils/timeUtil'; -export class CheckMeterial { - private roleId: string; - private itemsIndb: Map = new Map(); // 玩家已有的东西 - private notEnoughItems: Map = new Map(); // 缺少的数量 - private consumes: ItemInter[] = []; // 消耗,正向数 - - private goldId = CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD); - private coinId = CURRENCY_BY_TYPE.get(CURRENCY_TYPE.COIN); - - constructor(roleId: string, role?: RoleType, items?: ItemType[]) { - this.roleId = roleId; - if(role) { - this.itemsIndb.set(this.goldId, role.gold); - this.itemsIndb.set(this.coinId, role.coin); - } - if(items && items.length) { - for(let {id, count} of items) { - this.itemsIndb.set(id, count); - } - } - } - - private pushToNotEnoughItems(id: number, count: number) { - if(!this.notEnoughItems.has(id)) { - this.notEnoughItems.set(id, 0); - } - this.notEnoughItems.set(id, this.notEnoughItems.get(id) + count); - } - - private getNotEnoughItems() { - let map = new Map(); - for(let [ id, count ] of this.notEnoughItems) { - map.set(id, count); - } - return map; - } - - public async decrease(goods: {id: number, count: number}[]) { - this.notEnoughItems.clear(); - let { items, gold, coin } = sortItems(goods, HANDLE_REWARD_TYPE.COST); - let isEnough = true; - for(let { id, count} of items) { - if(!this.itemsIndb.has(id)) { - let item = await ItemModel.findbyRoleAndGid(this.roleId, id); - if(!item) { - this.pushToNotEnoughItems(id, count); - isEnough = false; break; - } - this.itemsIndb.set(id, item.count); - } - if(this.itemsIndb.get(id) < count) { - this.pushToNotEnoughItems(id, count - this.itemsIndb.get(id)); - isEnough = false; break; - } - this.itemsIndb.set(id, this.itemsIndb.get(id) - count); - } - - if(gold.length > 0) { - if(!this.itemsIndb.has(this.goldId)) { - let role = await RoleModel.findByRoleId(this.roleId, 'gold coin'); - this.itemsIndb.set(this.goldId, role.gold); - this.itemsIndb.set(this.coinId, role.coin); - } - let goldCost = gold.reduce((pre, cur) => { return pre + cur.count }, 0); - if(this.itemsIndb.get(this.goldId) < goldCost) { - this.pushToNotEnoughItems(this.goldId, goldCost - this.itemsIndb.get(this.goldId)); - isEnough = false; - } - this.itemsIndb.set(this.goldId, this.itemsIndb.get(this.goldId) - goldCost); - } - if(isEnough && coin.length > 0) { - if(!this.itemsIndb.has(this.coinId)) { - let role = await RoleModel.findByRoleId(this.roleId, 'gold coin'); - this.itemsIndb.set(this.goldId, role.gold); - this.itemsIndb.set(this.coinId, role.coin); - } - let coinCost = coin.reduce((pre, cur) => pre + cur, 0); - if(this.itemsIndb.get(this.coinId) < coinCost) { - this.pushToNotEnoughItems(this.coinId, coinCost - this.itemsIndb.get(this.coinId)); - isEnough = false; - } - this.itemsIndb.set(this.coinId, this.itemsIndb.get(this.coinId) - coinCost); - } - - if(isEnough) this.consumes.push(...goods); - return isEnough; - } - - private getMaterialEnough(materials: RewardInter[], notEnoughItems: Map) { - let newMaterials: RewardInter[] = []; - for(let {id, count} of materials) { - if(notEnoughItems.has(id)) { - newMaterials.push({ id, count: count - notEnoughItems.get(id) }); - } else { - newMaterials.push({ id, count }); - } - } - return newMaterials; - } - - // 检查地玉石是否可以合成 - public async composeStone(id: number, count: number) { - let dicStone = gameData.stone.get(id); - if(!dicStone || dicStone.composeMaterial.length <= 0) return false; // 1阶石头不能再从下合成返回不行 - let materials = dicStone.composeMaterial.map(cur => ({...cur, count: cur.count * count })); - let isEnough = await this.decrease(materials); - if(!isEnough) { - let notEnoughItems = this.getNotEnoughItems(); - let newMaterials = this.getMaterialEnough(materials, notEnoughItems); - let isEnough = await this.decrease(newMaterials); // 消耗掉除了不足的部分以外的其他部分 - if(!isEnough) return false; - - let isAllOK = true; // 如果有石头不足,向下补充,isAllOK标识不足的都能补充上 - for(let [id, count] of notEnoughItems) { - let isEnough = await this.composeStone(id, count); - if(!isEnough) { - isAllOK = false; break; - } - } - return isAllOK; - } else { - return true; - } - } - - public getConsume() { - return this.consumes; - } -} export async function handleCost(roleId: string, sid: string, goods: Array, reason: ITEM_CHANGE_REASON) { @@ -264,7 +134,7 @@ export async function addItems(roleId: string, roleName: string, sid: string, go } // 直接加的 - let { jewels: jewelInfos, pushMessages } = await addJewels(roleId, roleName, <{id: number, hid?: number}[]>incJewels, reason); + let { jewels: jewelInfos } = await addJewels(roleId, roleName, <{id: number, hid?: number}[]>incJewels, reason); for (let jewel of jewelInfos) { showItems.push({ seqId: jewel.seqId, id: jewel.id, count: 1, isBag: true }); } @@ -274,7 +144,6 @@ export async function addItems(roleId: string, roleName: string, sid: string, go //装备推送 if (!!jewelInfos.length) pinus.app.get('channelService').pushMessageByUids('onJewelAdd', resResult(STATUS.SUCCESS, { jewelInfos }), uids); - pushTaskUpdate(roleId, sid, pushMessages); //统计装备 if (jewelInfos.length > 0) { saveItemChangeLog(roleId, jewelInfos, reason); @@ -301,7 +170,7 @@ export async function addItems(roleId: string, roleName: string, sid: string, go // 3. 货币推送 if(gold.length > 0 || coin.length > 0 || ap > 0) { - await setAp(roleId, null, role.lv, ap, sid, reason); + await setAp(role.serverId, roleId, null, role.lv, ap, sid, reason); let incCoin = coin.reduce((pre, cur) => pre + cur, 0); let incGold = gold.reduce((pre, cur) => pre + cur.count, 0); role = await RoleModel.increaseGoldAndCoin(roleId, gold, incCoin); @@ -337,15 +206,10 @@ export async function addItems(roleId: string, roleName: string, sid: string, go let calAllHeroResult = undefined; // 全局战力变化推送 for (let skinId of skins) {//皮肤推送 - let result = await addSkin(roleId, roleName, skinId, false); - if (!!result) { + let hero = await addSkin(roleId, roleName, sid, skinId, false); + if (!!hero) { showItems.push({ id: skinId, count: 1 }); - figureInfos.push(result.figureInfo); - if(result.hero) { - heroskins.push({ skins: result.hero.skins, hid: result.hero.hid }); - if(result.calAllHeroResult) calAllHeroResult = result.calAllHeroResult; - } - skinInfos.push({ id: skinId, hid: result.hero?.hid||0, count: 1, inc: 1, reason }) + skinInfos.push({ id: skinId, hid: hero?.hid||0, count: 1, inc: 1, reason }) } } if (!!skinInfos.length) { @@ -376,127 +240,6 @@ export async function addItems(roleId: string, roleName: string, sid: string, go return showItems; } -function getGoldEventProperties(inc: number, count: number, reason: ITEM_CHANGE_REASON) { - let id = CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD); - let dicGoods = gameData.goods.get(id); - return { item_id: id, item_name: dicGoods.name, item_itid: dicGoods.itid, change_count: inc, change_after: count, change_reason: reason } -} - -function getCoinEventProperties(inc: number, count: number, reason: ITEM_CHANGE_REASON) { - let id = CURRENCY_BY_TYPE.get(CURRENCY_TYPE.COIN); - let dicGoods = gameData.goods.get(id); - return { item_id: id, item_name: dicGoods.name, item_itid: dicGoods.itid, change_count: inc, change_after: count, change_reason: reason } -} - -export function combineItems(items: { id?: number, count?: number }[]) { - let result: { id: number, count: number }[] = []; - for(let { id, count = 1 } of items) { - let index = result.findIndex(cur => cur.id == id); - if(index == -1) { - result.push({ id, count }); - } else { - result[index].count += count; - } - } - return result; -} - -export function combineItemAndJewels(items: { id?: number, count?: number }[]) { - let result: { id: number, count: number }[] = []; - for(let { id, count = 1 } of items) { - let dicGoods = gameData.goods.get(id); - let dicItid = ITID.get(dicGoods.itid); - if(dicItid.table != 'jewel') { - let index = result.findIndex(cur => cur.id == id); - if(index == -1) { - result.push({ id, count }); - } else { - result[index].count += count; - } - } else { - result.push({ id, count }); - } - } - return result; -} - -function sortItems(goods: ItemInter[], handleType: HANDLE_REWARD_TYPE) { - let items: { id: number, count: number }[] = []; // 可叠加道具 - let jewels: { seqId?: number, id?: number, hid?: number }[] = []; // 不可叠加装备 - let gold: { count: number, isPay: boolean }[] = []; // 金币 - let coin: number[] = []; - let ap: number = 0; - let skins: number[] = []; - let figures: number[] = []; - - for(let good of goods) { - if(good.count == 0) continue; - let dicGood = gameData.goods.get(good.id); - if(!dicGood) { - errlogger.error(`物品 ${good.id} 未配置`); - continue; - } - let dicItid = ITID.get(dicGood.itid); - if(!dicItid) { - errlogger.error(`itid ${dicGood.itid} 未配置`); - continue; - } - let { type, table, isCurrency } = dicItid; - if(table == ITEM_TABLE.JEWEL) { // 装备 - if(handleType == HANDLE_REWARD_TYPE.RECEIVE) { - for(let i = 0; i < good.count; i++) { - jewels.push({ id: good.id, hid: good.hid }) - } - } else { - if(!!good.seqId) { - jewels.push({ seqId: good.seqId }); - } - } - } else if (table == ITEM_TABLE.ITEM) { // 可叠加道具 - let index = items.findIndex(cur => cur.id == good.id); - if(index > 0) { - items[index].count += good.count; - } else { - items.push({ id: good.id, count: good.count }); - } - } else if (table == ITEM_TABLE.SKIN) { // 皮肤,不可重复获得,不可删 - if(handleType == HANDLE_REWARD_TYPE.RECEIVE) { - let index = skins.indexOf(good.id); - if (index == -1) { - skins.push(good.id); - } - } - } else if (table == ITEM_TABLE.ROLE) { - if(isCurrency) { // 3种货币 - let dicCurrency = CURRENCY.get(good.id); - if(dicCurrency) { - if(dicCurrency.type == CURRENCY_TYPE.GOLD) { // 金币,区分付费和免费,默认免费 - let index = gold.findIndex(cur => cur.isPay == !!good.isPay); - if(index > 0) { - gold[index].count += good.count; - } else { - gold.push({ count: good.count, isPay: !!good.isPay }); - } - } else if (dicCurrency.type == CURRENCY_TYPE.COIN) { // 铜钱 - coin.push(good.count); - } else if (dicCurrency.type == CURRENCY_TYPE.ACTION_POINT) { // 体力 - ap += good.count; - } - } - } else { - if (type == CONSUME_TYPE.HEAD || type == CONSUME_TYPE.FRAME || type == CONSUME_TYPE.SPINE) { // 头像等,不可重复获得,不可删 - let index = figures.indexOf(good.id); - if (index == -1) { - figures.push(good.id); - } - } - } - } - - } - - return { items, jewels, gold, coin, ap, skins, figures } -} export async function checkGoods(roleId: string, goodIds: Array) { let jewelSeqIds: Array = []; @@ -546,79 +289,24 @@ export async function checkHeroEquips(roleId: string, quality: number) { return await HeroModel.checkEquipByQuality(roleId, quality); } +/** + * 解锁头像/相框 + * @param roleId 玩家id + * @param conditions 解锁条件 + * @param role 如果已查询过role表就直接可以使用 + */ export async function unlockFigure(sid: string, roleId: string, conditions: { type: number, paramHid?: number, paramFavourLv?: number, paramSkinId?: number, paramWinStreakNum?: number }[], role?: RoleType) { - let figureInfo = await pubUnlockFigure(roleId, conditions, role); - await pushFigureUpdate(roleId, sid, figureInfo); -} - -export async function pushFigureUpdate(roleId: string, sid: string, figureInfo: { heads: Figure[], frames: Figure[], spines: Figure[] }) { + if (!role || !role.heads || !role.frames) { + role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS); + } + let { figureInfo, heads, frames, spines } = unlockFigureWithoutSave(conditions, role); + role = await RoleModel.updateRoleInfo(roleId, { heads, frames, spines }); if (!!figureInfo && (figureInfo.heads.length > 0 || figureInfo.frames.length > 0 || figureInfo.spines.length > 0)) { let uids = [{ uid: roleId, sid }]; pinus.app.get('channelService').pushMessageByUids('onHeadChange', resResult(STATUS.SUCCESS, { ...figureInfo }), uids); } } -/** - * 创建多个武将 - * @param roleId - * @param sid - * @param serverId - * @param heroInfo - */ -export async function createHeroes(roleId: string, roleName: string, sid: string, serverId: number, heroInfo: CreateHeroParam[]) { - let hids = heroInfo.map(cur => cur.hid); - let userHeroesMap = await HeroModel.findMapByHidRange(hids, roleId); - - let infos: Map = new Map(), pieces: ItemInter[] = []; - for (let h of heroInfo) { - let heroCount = h.count || 1; - if (userHeroesMap.has(h.hid)) { - let { pieceId, count } = transPiece(h.hid); - pieces.push({ id: pieceId, count: count * heroCount }); - } else { - let initInfo: { heroInfo: HeroUpdate, skinInfo: SkinUpdate }; - if(pinus.app.getServerType() == 'role') { - initInfo = getInitHeroById(h.hid); - } else { - let roleServers = pinus.app.getServersByType('role'); - let server = getRandSingleEelm(roleServers); - initInfo = await pinus.app.rpc.role.roleRemote.getInitHeroById.toServer(server.id, h.hid); - } - - initInfo.heroInfo = { ...initInfo.heroInfo, ...h }; - - infos.set(h.hid, initInfo); - userHeroesMap.set(h.hid, null); - if (heroCount > 1) { - let { pieceId, count } = transPiece(h.hid); - pieces.push({ id: pieceId, count: count * (heroCount - 1) }); - } - } - } - - let resultHeroes: HeroType[] = [], resultItems: RewardInter[] = [], heroes: HeroShowParam[] = []; - if (infos.size > 0) { - let createHero = new CreateHeroes(roleId, roleName, serverId); - await createHero.createWithHeroInfo(infos); - await createHero.pushMessage(sid); - await createHero.updateRedisRank(); - heroes = createHero.getShowHeroes(); - resultHeroes = createHero.getResultHeroes(); - - await checkPopUpConditionInCreateHero(serverId, roleId, resultHeroes); - } - - if (pieces.length > 0) { - let goods = await addItems(roleId, roleName, sid, pieces, ITEM_CHANGE_REASON.HERO_TRANSFER_PIECE); - resultItems = goods; - } - return { heroes, resultHeroes, goods: resultItems } -} - -export async function createHero(roleId: string, roleName: string, sid: string, serverId: number, heroInfo: CreateHeroParam) { - let result = await createHeroes(roleId, roleName, sid, serverId, [heroInfo]); - return result; -} /** * 皮肤数据变化去重、推送 @@ -640,4 +328,335 @@ function pushHeroSkinMsg(heroskins: {skins: HeroSkin[], hid: number}[], skinInf if(pushSkinInfos.length > 0 || skinInfos.length > 0) { pinus.app.get('channelService').pushMessageByUids('onHeroSkinChange', resResult(STATUS.SUCCESS, { heros: heroskins, skins: skinInfos }), uids); } -} \ No newline at end of file +} + + +/** + * 只插入皮肤,不管那么多的 + * @param roleId + * @param roleName + * @param skinId + * @returns + */ + export async function increaseSkin(roleId:string, roleName: string, skinId: number) { + let dicSkin = gameData.fashion.get(skinId); + if (!dicSkin) return false; + + let skin = await SkinModel.increaseSkin(roleId, skinId, { roleId, roleName, id: skinId, skinName: dicSkin.name, hid: dicSkin.actorId, skinId: dicSkin.heroId }); + if(!skin) return false; // 插入失败 + return skin +} + +/** + * 添加皮肤 + * @param roleId 玩家id + * @param roleName 玩家名 + * @param id 皮肤id + * @param hero 武将,如果已经查询过这个武将就不用再查询一次,主意要select skins字段 + * @returns {{ hero, figureInfo, calAllHeroResult }} hero:添加皮肤后的武将 figureInfo: 触发头像添加信息 calAllHeroResult:全局战力加成后结果 + */ +export async function addSkin(roleId: string, roleName: string, sid: string, skinId: number, enable: boolean, hero?: HeroType) { + let skin = await increaseSkin(roleId, roleName, skinId); + if(!skin) return false; + + if(skin.hid && !hero) hero = await HeroModel.findByHidAndRole(skin.hid, roleId); + let condition = { type: FIGURE_UNLOCK_CONDITION.GET_SKIN, paramSkinId: skinId }; + await unlockFigure(sid, roleId, [condition]); // 解锁头像 + await calAllHeroCe(HERO_SYSTEM_TYPE.ADD_SKIN, sid, roleId, {}, [skinId]); // 全局加成 + + if (hero) { // 有武将的,将皮肤链接到武将上 + let curSkin = hero.skins.find(cur => cur.id == skinId); + if (!curSkin) { + hero.skins.push({ id: skinId, skin: skin._id, enable, skinId: skin.skinId }); + await HeroModel.updateHeroInfo(roleId, hero.hid, hero); + } + return hero; + } else { + return null + } +} + +export async function addBags(roleId: string, roleName: string, datas: { id: number, count: number }[], reason: number) { + let items: { id: number, count: number, inc: number }[] = []; + for(let data of datas) { + let item = await addBag(roleId, roleName, data, reason); + items.push(item) + } + return { items } +} + +export async function addBag(roleId: string, roleName: string, data: { id: number, count: number }, reason: number) { + let { id, count } = data; + let { name: itemName, itid, hid } = gameData.goods.get(id); + let { type } = ITID.get(itid); + + let item = await ItemModel.increaseItem(roleId, id, count, { roleId, roleName, itemName, id, type, hid }); + return { id: item.id, count: item.count, inc: count, reason }; +} + + +export async function addJewels(roleId: string, roleName: string, jewels: { id: number, }[], reason: number) { + let jewelInfo: jewelUpdate[] = []; + for(let jewel of jewels) { + let info = await getAddJewelInfo(roleId, roleName, jewel); + jewelInfo.push(info); + } + + const jewelResult = await JewelModel.createJewels(roleId, jewelInfo); + return { jewels: jewelResult.map(jewel => { + return { ...jewel, count: 1, inc: 1, reason } + })} +} + +export async function getAddJewelInfo(roleId: string, roleName: string, jewel: { id: number, }) { + let { id, } = jewel; + let { name, randomEffect, effectCount } = gameData.jewel.get(id); + + // 随机属性 + let randomResult: number[] = getRandEelm(randomEffect, effectCount); + + let randSe: Array = randomResult.map((id: number, index: number) => { + return getJewelRandSe(index + 1, id); + }); + + return { roleId, roleName, id, name, randSe }; +} + +/** + * 天晶石已知词条随机值 + * @param id 词条位置,第几条 + * @param seid 词条id + * @returns + */ +export function getJewelRandSe(id: number, seid: number) { + let dicRandom = gameData.randomEffectPool.get(seid) + let rand = 0; + if (dicRandom.id > 0) { + let randRange = getRandEelmWithWeight(dicRandom.rate); + let randResult = getRandValueByMinMax(randRange.dic.min, randRange.dic.max, getDecimalCnt(dicRandom.gap)); + let n = Math.floor((randResult - dicRandom.Min)/dicRandom.gap); + rand = dicRandom.Min + n * dicRandom.gap; + } + return new RandSe(id, dicRandom.id, rand); +} + +export function getGoldId() { + return CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD); +} + +/** + * @description 获取元宝物品 { id, count } + * @param count 元宝数量 + */ +export function getGoldObject(count: number) { + return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD), count }; +} + +/** + * @description 获取金币物品 { id, count } + * @param count 元宝数量 + */ +export function getCoinObject(count: number) { + return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.COIN), count }; +} + +/** + * @description 获取体力物品 { id, count } + * @param count 体力数量 + */ + export function getApObject(count: number) { + return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.ACTION_POINT), count }; +} +/** + * @description 获取友情点物品 { id, count } + * @param count 友情点数量 + */ +export function getFriendPointObject(count: number) { + return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.FRIEND_POINT), count }; +} + +/** + * @description 获取功勋物品 { id, count } + * @param count 功勋数量 + */ +export function getHonourObject(count: number) { + return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.HONOUR), count }; +} + +/** + * 返回 解锁头像/相框 + * @param conditions 解锁条件 + * @param role 如果已查询过role表就直接可以使用 + */ + export function unlockFigureWithoutSave(conditions: { type: number, paramHid?: number, paramFavourLv?: number, paramSkinId?: number, paramWinStreakNum?: number }[], role: RoleType) { + + let { heads, frames, spines } = role; + let figureInfo = { heads: new Array
(), frames: new Array
(), spines: new Array
() }; + for (let { type, paramHid, paramFavourLv, paramSkinId, paramWinStreakNum } of conditions) { + let canUnLockList = gameData.figureCondition.get(type); + if (canUnLockList) { + let reason = 0; + + for (let { id, params, gid } of canUnLockList) { + let flag = false; // 是否达成条件 + if (type == FIGURE_UNLOCK_CONDITION.GET_HERO) { + let [hid] = params; + if (paramHid == hid) flag = true; + reason = ITEM_CHANGE_REASON.GET_HERO_UNLOCK_FIGURE; + } else if (type == FIGURE_UNLOCK_CONDITION.HERO_FAVOR) { + let [hid, favourLv] = params; + if (paramHid == hid && paramFavourLv >= favourLv) flag = true; + reason = ITEM_CHANGE_REASON.HERO_FAVOR_UNLOCK_FIGURE; + } else if (type == FIGURE_UNLOCK_CONDITION.GET_SKIN) { + let [id] = params; + if (paramSkinId == id) flag = true; + reason = ITEM_CHANGE_REASON.ADD_SKIN_UNLOCK_FIGURE; + } else if (type == FIGURE_UNLOCK_CONDITION.PVP_WIN_SERIES) { + let [winStreakNum] = params; + if (paramWinStreakNum >= winStreakNum) flag = true; + reason = ITEM_CHANGE_REASON.PVP_SERIES_UNLOCK_FIGURE; + } + if (!flag) continue; + let dicGood = gameData.goods.get(gid); + if (!dicGood) continue; + let dicItid = ITID.get(dicGood.itid); + if (!dicItid) continue; + + if (dicItid.type == CONSUME_TYPE.HEAD) { + let figure = unlockSingleFigure(heads, gid, reason, false, id); + if (figure && figure.unlocked) figureInfo.heads.push(figure); + } else if (dicItid.type == CONSUME_TYPE.FRAME) { + let figure = unlockSingleFigure(frames, gid, reason, false, id); + if (figure && figure.unlocked) figureInfo.frames.push(figure); + } else if (dicItid.type == CONSUME_TYPE.SPINE) { + let figure = unlockSingleFigure(spines, gid, reason, false, id); + if (figure && figure.unlocked) figureInfo.spines.push(figure); + } else { + continue; + } + + } + + } + } + return { figureInfo, heads, frames, spines }; +} + + + +// 直接获得形象/相框 +export async function addFigure(roleId: string, ids: number[], reason: number) { + let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS); + + if (!role) return false; + let { heads, frames, spines } = role; + + let figureInfo = { heads: [], frames: [], spines: [] }; + for (let gid of ids) { + let dicGoods = gameData.goods.get(gid); + if (!dicGoods) continue; + let dicItid = ITID.get(dicGoods.itid); + if (!dicItid) continue; + + if (dicItid.type == CONSUME_TYPE.HEAD) { + let figure = unlockSingleFigure(heads, gid, reason, true); + if (figure && figure.unlocked) figureInfo.heads.push(figure); + } else if (dicItid.type == CONSUME_TYPE.FRAME) { + let figure = unlockSingleFigure(frames, gid, reason, true); + if (figure && figure.unlocked) figureInfo.frames.push(figure); + } else if (dicItid.type == CONSUME_TYPE.SPINE) { + let figure = unlockSingleFigure(spines, gid, reason, true); + if (figure && figure.unlocked) figureInfo.spines.push(figure); + } else { + continue; + } + } + + role = await RoleModel.updateRoleInfo(roleId, { heads, frames, spines }); + return figureInfo; +} + +/** + * 根据物品id解锁/获得玩家数据 + * @param dbFigures 数据库内字段 + * @param id 物品id + * @param unlockDirect 是否不计算解锁条件直接解锁 + * @param conditionId 条件id + */ +function unlockSingleFigure(dbFigures: Figure[], id: number, reason: number, unlockDirect = false, conditionId?: number) { + let index = dbFigures.findIndex(cur => cur.id == id); + let figure = dbFigures[index]; + if (index == -1) { + figure = new Figure(id, false); + dbFigures.push(figure); + index = dbFigures.length - 1; + } + if (figure.unlocked) return; // 已解锁过 + if (!figure.unlockedId) figure.unlockedId = new Array(); + + let dicGoods = gameData.goods.get(id); + + let hasUnlockedAll = true; + if (!unlockDirect) { // 不能直接获得,需要通过type解锁 + if (figure.unlockedId.includes(conditionId)) return; + + figure.unlockedId.push(conditionId); + + for (let { id: cid } of dicGoods.condition) { + if (!figure.unlockedId.includes(cid)) { + hasUnlockedAll = false; break; + } + } + } + if (hasUnlockedAll) { + figure.unlocked = true; + delete figure.unlockedId; + + if (dicGoods.timeLimit) { + figure.time = nowSeconds() + dicGoods.timeLimit * 86400 + } + } + + figure.inc = 1; + figure.reason = reason; + dbFigures[index] = figure; + return figure +} + +// async function getSkinsOfThisHero(roleId: string, roleName: string, hid: number, initialSkin: number, allSkins?: SkinType[]) { +// if(!allSkins) allSkins = await SkinModel.findbyRoleAndHid(roleId, hid); +// let skin = await increaseSkin(roleId, roleName, initialSkin); +// if(skin) allSkins.push(skin); +// let skins: { id: number, skin: string, enable: boolean }[] = []; +// for(let skin of allSkins) { +// skins.push({ id: skin.id, skin: skin._id, enable: skin.id == initialSkin }); +// } + +// return skins +// } + +export function combineFigureInfo(figureInfos: { heads: Figure[], frames: Figure[], spines: Figure[] }[]) { + let figureInfo = { heads: new Array
(), frames: new Array
(), spines: new Array
() }; + for(let {heads, frames, spines} of figureInfos) { + for(let head of heads) { + figureInfo.heads.push(head); + } + for(let frame of frames) { + figureInfo.frames.push(frame); + } + for(let spine of spines) { + figureInfo.spines.push(spine); + } + } + return figureInfo; +} + +// export class CreateHero { +// roleId: string; +// roleName: string; +// serverId: number; + +// constructor(roleId: string, roleName: string, serverId: number) { + +// } +// } \ No newline at end of file diff --git a/game-server/app/services/role/util.ts b/game-server/app/services/role/util.ts new file mode 100644 index 000000000..c94fb6e3a --- /dev/null +++ b/game-server/app/services/role/util.ts @@ -0,0 +1,133 @@ +import { ITID, CONSUME_TYPE, ITEM_TABLE, CURRENCY, CURRENCY_TYPE, HANDLE_REWARD_TYPE, ITEM_CHANGE_REASON, CURRENCY_BY_TYPE } from '../../consts'; +import { ItemInter, RewardInter, } from '../../pubUtils/interface'; +import { gameData } from '../../pubUtils/data'; +import { errlogger } from '../../util/logger'; + +export function sortItems(goods: ItemInter[], handleType: HANDLE_REWARD_TYPE) { + let items: { id: number, count: number }[] = []; // 可叠加道具 + let jewels: { seqId?: number, id?: number, hid?: number }[] = []; // 不可叠加装备 + let gold: { count: number, isPay: boolean }[] = []; // 金币 + let coin: number[] = []; + let ap: number = 0; + let skins: number[] = []; + let figures: number[] = []; + + for(let good of goods) { + if(good.count == 0) continue; + let dicGood = gameData.goods.get(good.id); + if(!dicGood) { + errlogger.error(`物品 ${good.id} 未配置`); + continue; + } + let dicItid = ITID.get(dicGood.itid); + if(!dicItid) { + errlogger.error(`itid ${dicGood.itid} 未配置`); + continue; + } + let { type, table, isCurrency } = dicItid; + if(table == ITEM_TABLE.JEWEL) { // 装备 + if(handleType == HANDLE_REWARD_TYPE.RECEIVE) { + for(let i = 0; i < good.count; i++) { + jewels.push({ id: good.id, hid: good.hid }) + } + } else { + if(!!good.seqId) { + jewels.push({ seqId: good.seqId }); + } + } + } else if (table == ITEM_TABLE.ITEM) { // 可叠加道具 + let index = items.findIndex(cur => cur.id == good.id); + if(index > 0) { + items[index].count += good.count; + } else { + items.push({ id: good.id, count: good.count }); + } + } else if (table == ITEM_TABLE.SKIN) { // 皮肤,不可重复获得,不可删 + if(handleType == HANDLE_REWARD_TYPE.RECEIVE) { + let index = skins.indexOf(good.id); + if (index == -1) { + skins.push(good.id); + } + } + } else if (table == ITEM_TABLE.ROLE) { + if(isCurrency) { // 3种货币 + let dicCurrency = CURRENCY.get(good.id); + if(dicCurrency) { + if(dicCurrency.type == CURRENCY_TYPE.GOLD) { // 金币,区分付费和免费,默认免费 + let index = gold.findIndex(cur => cur.isPay == !!good.isPay); + if(index > 0) { + gold[index].count += good.count; + } else { + gold.push({ count: good.count, isPay: !!good.isPay }); + } + } else if (dicCurrency.type == CURRENCY_TYPE.COIN) { // 铜钱 + coin.push(good.count); + } else if (dicCurrency.type == CURRENCY_TYPE.ACTION_POINT) { // 体力 + ap += good.count; + } + } + } else { + if (type == CONSUME_TYPE.HEAD || type == CONSUME_TYPE.FRAME || type == CONSUME_TYPE.SPINE) { // 头像等,不可重复获得,不可删 + let index = figures.indexOf(good.id); + if (index == -1) { + figures.push(good.id); + } + } + } + } + + } + + return { items, jewels, gold, coin, ap, skins, figures } +} + +export function getGoldEventProperties(inc: number, count: number, reason: ITEM_CHANGE_REASON) { + let id = CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD); + let dicGoods = gameData.goods.get(id); + return { item_id: id, item_name: dicGoods.name, item_itid: dicGoods.itid, change_count: inc, change_after: count, change_reason: reason } +} + +export function getCoinEventProperties(inc: number, count: number, reason: ITEM_CHANGE_REASON) { + let id = CURRENCY_BY_TYPE.get(CURRENCY_TYPE.COIN); + let dicGoods = gameData.goods.get(id); + return { item_id: id, item_name: dicGoods.name, item_itid: dicGoods.itid, change_count: inc, change_after: count, change_reason: reason } +} + +export function combineItems(items: { id?: number, count?: number }[]) { + let result: { id: number, count: number }[] = []; + for(let { id, count = 1 } of items) { + let index = result.findIndex(cur => cur.id == id); + if(index == -1) { + result.push({ id, count }); + } else { + result[index].count += count; + } + } + return result; +} + +export function combineItemAndJewels(items: { id?: number, count?: number }[]) { + let result: { id: number, count: number }[] = []; + for(let { id, count = 1 } of items) { + let dicGoods = gameData.goods.get(id); + let dicItid = ITID.get(dicGoods.itid); + if(dicItid.table != 'jewel') { + let index = result.findIndex(cur => cur.id == id); + if(index == -1) { + result.push({ id, count }); + } else { + result[index].count += count; + } + } else { + result.push({ id, count }); + } + } + return result; +} + + +export function transPiece(hid: number) { + let dicHero = gameData.hero.get(hid); + let count = gameData.heroTransPiece.get(dicHero.quality); + return { pieceId: dicHero.pieceId, count } +} \ No newline at end of file diff --git a/game-server/app/services/roleService.ts b/game-server/app/services/roleService.ts index 7a4985a63..f4cf2c2cc 100644 --- a/game-server/app/services/roleService.ts +++ b/game-server/app/services/roleService.ts @@ -8,12 +8,12 @@ import { SCHOOL } from '../pubUtils/dicParam'; import { gameData } from '../pubUtils/data'; import { SchoolModel } from '../db/School'; import { SclResultInter, SclPosInter, RewardInter, ItemInter } from '../pubUtils/interface'; -import { CheckMeterial } from './role/rewardService'; import { HeroUpdate } from '../db/Hero'; import { SkinUpdate } from '../db/Skin'; import { Figure } from '../domain/dbGeneral'; import { pick } from 'underscore'; import { Reward } from '../domain/battleField/pvp'; +import { CheckMeterial } from './role/checkMaterial'; export async function getTeraphStrengthenResult(role: RoleType, count: number, dicTeraph: DicTeraph, teraph: Teraph) { let criAttr: number[] = [], times = 0; diff --git a/game-server/app/services/sdkService.ts b/game-server/app/services/sdkService.ts index dcd617c30..3716c4440 100644 --- a/game-server/app/services/sdkService.ts +++ b/game-server/app/services/sdkService.ts @@ -3,7 +3,6 @@ import { RoleModel, RoleType } from "../db/Role"; import { Chat37Params, CheckGuild37Params, CheckName37Params, GetWordParam } from "../domain/sdk"; import { sendMailByContent, sendMailToGuildByContent } from './mailService'; -import { getGoldObject } from '../pubUtils/itemUtils'; import { NAMEPLATE } from '../pubUtils/dicParam'; import { CHANNEL_PREFIX, FILENAME, getSdkChannelId, MAIL_TYPE, REDIS_KEY, SDK_37_ADDR, SDK_37_CONST, SDK_TA_CONST, STATUS, TA_USERSET_TYPE, THINKING_DATA_MODE, THINKING_DATA_MODE_LIST } from "../consts"; import { UserModel } from "../db/User"; @@ -16,6 +15,7 @@ import { getRandSingleEelm, readWordTxt, resResult, writeWordTxt } from "../pubU const ThinkingAnalytics = require("thinkingdata-node"); import Trie from '../pubUtils/trie'; import _ = require("underscore"); +import { getGoldObject } from "./role/rewardService"; // 检查私聊是否合法 diff --git a/game-server/app/services/task/taskObj.ts b/game-server/app/services/task/taskObj.ts index 3341c941e..1f3d3a64e 100644 --- a/game-server/app/services/task/taskObj.ts +++ b/game-server/app/services/task/taskObj.ts @@ -17,11 +17,13 @@ import { SevenDaysData } from "../../domain/activityField/sevenDaysField"; import { ThirtyDaysData } from "../../domain/activityField/thirtyDaysField"; import { TreasureHuntData } from "../../domain/activityField/treasureHuntField"; import { TaskListReturn, TaskParam, TaskParamInter, UpdateTaskParam } from "../../domain/roleField/task"; -import { gameData } from "../../pubUtils/data"; +import { gameData, getDicBlueprtById, getEquipSuitByHero } from "../../pubUtils/data"; import { getZeroPoint } from "../../pubUtils/timeUtil"; import { resResult } from "../../pubUtils/util"; import { getActivities, getActivitiesByType, getActivityByServerId } from "../activity/activityService"; import { getRoleCreateTime, getRoleOnlineInfo, getServerCreateTime } from "../redisService"; +import { getEquipById, getJewelByEquip } from "../equipService"; +import { isRandSeUnLock } from "../../pubUtils/playerCe"; export class CheckTask { serverId: number; // 区id @@ -167,18 +169,28 @@ export class CheckSingleTask { // 检查一般任务 let dicTasks = gameData.taskType.get(taskType); - for (let dicTask of dicTasks) { + let groups = new Map(); // 以group做区分 + for (let { id, type, group, taskParam } of dicTasks) { + if (!groups.has(`${type}_${group}`)) { + groups.set(`${type}_${group}`, { type, group, taskParam, taskIds: [] }); + } + groups.get(`${type}_${group}`).taskIds.push(id); + } + for (let [_typeAndGroup, { type, group, taskParam, taskIds }] of groups) { - let taskUpdateParam = await this.checkIsMatch(dicTask.taskParam, async () => { - let data = await UserTaskRecModel.findByRoleAndGroup(roleId, dicTask.type, taskType, dicTask.group); + let taskUpdateParam = await this.checkIsMatch(taskParam, async () => { + let data = await UserTaskRecModel.findByRoleAndGroup(roleId, type, taskType, group); return data? data.records: [] }); if (taskUpdateParam) { - let rec = await UserTaskRecModel.setOrIncTask(roleId, dicTask.type, taskType, dicTask.group, taskUpdateParam); + let rec = await UserTaskRecModel.setOrIncTask(roleId, type, taskType, group, taskUpdateParam); if (!rec) continue; - if (rec.received && rec.received.includes(dicTask.id)) continue; // 已领取,不再推送 - let received = rec.received || []; - this.addTaskPushMessage({ type: dicTask.type, id: dicTask.id, count: rec.count, received: received.includes(dicTask.id) }); + + for (let id of taskIds) { + if (rec.received && rec.received.includes(id)) continue; // 已领取,不再推送 + let received = rec.received || []; + this.addTaskPushMessage({ type, id: id, count: rec.count, received: received.includes(id) }); + } } } @@ -354,7 +366,7 @@ export class CheckSingleTask { case TASK_TYPE.ROLE_LV: // 3. 主公达x级 { let { lv, oldLv } = param; - if(oldLv < dicTaskParam[0] && lv >= dicTaskParam[0]) { + if(lv > oldLv) { result = { set: lv } } break; @@ -384,11 +396,14 @@ export class CheckSingleTask { break; } } - if(count + 1 >= dicTaskParam[1]) { + if(index == -1) { + records.push(`${hero.hid}_${count + 1}`); + } else { records[index] = `${hero.hid}_${count + 1}`; + } + if(count + 1 >= dicTaskParam[1]) { result = { inc: 1, records } } else { - records.push(`${hero.hid}_${count + 1}`); result = { records } } break; @@ -457,11 +472,14 @@ export class CheckSingleTask { break; } } - if( count < dicTaskParam[1] && count + trainCount >= dicTaskParam[1]) { + if(index == -1) { records[index] = `${hero.hid}_${count + trainCount}`; - result = { inc: 1, records } } else { records.push(`${hero.hid}_${count + trainCount}`); + } + if( count < dicTaskParam[1] && count + trainCount >= dicTaskParam[1]) { + result = { inc: 1, records } + } else { result = { records } } break; @@ -503,11 +521,14 @@ export class CheckSingleTask { break; } } - if( count < dicTaskParam[1] && count + stageUpCnt >= dicTaskParam[1]) { + if(index == -1) { records[index] = `${hero.hid}_${count + stageUpCnt}`; - result = { inc: 1, records } } else { records.push(`${hero.hid}_${count + stageUpCnt}`); + } + if( count < dicTaskParam[1] && count + stageUpCnt >= dicTaskParam[1]) { + result = { inc: 1, records } + } else { result = { records } } break; @@ -528,19 +549,73 @@ export class CheckSingleTask { } break; } - case TASK_TYPE.CHAT: + case TASK_TYPE.ROLE_SCHOOL_UNLOCK: // 17. 百家学宫解锁x个安置位 { - if (dicTaskParam[0] == 0 || dicTaskParam[0] == param.chatType) { - result = { inc: param.count }; + result = { inc: 1 }; + break; + } + case TASK_TYPE.ROLE_SCHOOL_PUT_HERO: // 18. 百家学宫放置x个武将 + { + let { hid, preHid } = param; + if (hid > 0 && preHid <= 0) { // 放置 + result = { inc: 1 }; + } else if (hid <= 0 && preHid > 0) { // 卸下 + result = { inc: -1 }; } break; } - case TASK_TYPE.FRIEND_NUM: + case TASK_TYPE.ROLE_TITLE: // 19. 爵位升至x + { + let { title, oldTitle } = param; + if(title > oldTitle) { + result = { set: title }; + } + break; + } + case TASK_TYPE.ROLE_TERAPH_STRENGTHEN: // 20. 神像强化x次 + { + let { count } = param; + result = { inc: count }; + break; + } + case TASK_TYPE.ROLE_SCROLL_ACTIVE: // 21. 名将谱激活x武将 + { + let { scrollActive } = param; + if(scrollActive) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.FRIEND_NUM: // 34. 拥有x名好友 { let role = this.getRole(); result = { set: role.friendCnt }; break; } + case TASK_TYPE.FRIEND_SEND_HEART: // 35. 赠送x次友情点 + { + let { count } = param; + if(count > 0) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.CHAT: // 36. 聊天频道发言x次 + { + let { chatType, count = 1 } = param; + if (dicTaskParam[0] == 0 || dicTaskParam[0] == chatType) { + result = { inc: count }; + } + break; + } + case TASK_TYPE.BATTLE_COST_AP: // 37. 消耗体力 + { + let { count } = param; + if(count > 0) { + result = { inc: count }; + } + break; + } case TASK_TYPE.BATTLE_WITH_HERO: // 38. 使用hId武将挑战x关卡x次 { let { warId, battleHeroes } = param; @@ -553,7 +628,7 @@ export class CheckSingleTask { { let { warId, count } = param; let dicWar = gameData.war.get(warId); - if (dicWar.warType == WAR_TYPE.NORMAL) { + if (dicWar.warType == WAR_TYPE.NORMAL && this.checkIdList(dicTaskParam, 0, warId)) { result = { inc: count }; } break; @@ -567,6 +642,14 @@ export class CheckSingleTask { } break; } + case TASK_TYPE.BATTLE_EVENT: // 41. 奇遇(答题/解救百姓/劫匪) x 次 + { + let { eventType } = param; + if(dicTaskParam[0] == 0|| dicTaskParam[0] == eventType) { + result = { inc: 1 }; + } + break; + } case TASK_TYPE.BATTLE_DAILY_STAR: // 42. 每日x星通关 x 次 { let { warId, battleStar } = param; @@ -603,6 +686,12 @@ export class CheckSingleTask { } break; } + case TASK_TYPE.BATTLE_TOWER_LV: // 46. 通关镇念塔x层 + { + let { towerLv } = param; + result = { set: towerLv }; + break; + } case TASK_TYPE.BATTLE_TOWER: // 47. 通关镇念塔x次 { let { warId, count } = param; @@ -630,11 +719,20 @@ export class CheckSingleTask { } break; } + case TASK_TYPE.BATTLE_EXPEDITION_BOX: // 50. 领取x次远征 x宝箱 + { + let { point } = param; + if(dicTaskParam[0] == 0 || dicTaskParam[0] == point) { + result = { inc: 1 }; + } + break; + } case TASK_TYPE.COM_BATTLE_CREATE_TEAM: // 51. 寻宝招募队友x次 { result = { inc: 1 }; break; } + case TASK_TYPE.COM_BATTLE_ASSIST_TEAM: // 53. 协助寻宝x次 { result = { inc: 1 }; @@ -645,11 +743,6 @@ export class CheckSingleTask { result = { inc: 1 }; break; } - case TASK_TYPE.PVP_RECEIVE_BOX: // 59. 领取x次pvp巅峰之路宝箱 - { - result = { inc: 1 }; - break; - } case TASK_TYPE.PVP: // 57. pvp挑战 x 次 { result = { inc: 1 }; @@ -663,6 +756,11 @@ export class CheckSingleTask { } break; } + case TASK_TYPE.PVP_RECEIVE_BOX: // 59. 领取x次pvp巅峰之路宝箱 + { + result = { inc: 1 }; + break; + } case TASK_TYPE.PVP_WIN_SERIES: // 60. pvp连胜x次 { let { isSuccess } = param; @@ -688,6 +786,87 @@ export class CheckSingleTask { break; } + case TASK_TYPE.PVP_RANK: // 62. pvp赛季排名达到 x 名 + { + let { pvpRank } = param; + + let records = await getRecord(); + let oldPvpRank = parseInt(records[0]); + if(isNaN(oldPvpRank)) oldPvpRank = 0; + if(pvpRank > oldPvpRank) { + records[0] = `${pvpRank}`; + result = { set: pvpRank, records } + } + break; + } + case TASK_TYPE.GUILD_JOB: // 63. 军团官职晋升为x + { + let { guildJob } = param; + + let records = await getRecord(); + let oldGuildJob = parseInt(records[0]); + if(isNaN(oldGuildJob)) oldGuildJob = 0; + if(guildJob > oldGuildJob) { + records[0] = `${guildJob}`; + result = { set: guildJob, records } + } + break; + } + case TASK_TYPE.GUILD_DONATE: // 64. 军团捐献x次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.GUILD_RECEIVE_BOX: //65. 领取x次军团活跃宝箱 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.GUILD_ASSIST_REFINE: // 67. 助力炼器堂研发加速x次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.GUILD_TRAIN_SUCESS: // 68. 练兵场军团成功压制x次 + { + let { isSuccess } = param; + if(isSuccess) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.GUILD_BOSS: // 69. 演武台军团挑战x次boss + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.GUILD_TRAIN: // 70. 挑战练兵场X次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.GUILD_ACTIVITY: // 71. 参与 xxx 军团活动 x 次 + { + let { aid } = param; + if (dicTaskParam[0] == 0 || aid == dicTaskParam[0]) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.GUILD_JOIN: // 72. 加入军团 + { + result = { set: 1 }; + break; + } + case TASK_TYPE.BATTLE_MAIN_ELITE: // 73. 精英通关第x关 + { + let { warId, count } = param; + let dicWar = gameData.war.get(warId); + if (dicWar.warType == WAR_TYPE.MAIN_ELITE && this.checkIdList(dicTaskParam, 0, warId)) { + result = { inc: count }; + } + break; + } case TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT: // 74. x名初始x品质武将升至X品质 { let { hero } = param; @@ -714,6 +893,23 @@ export class CheckSingleTask { } break; } + case TASK_TYPE.GUILD_TRAIN_COUNT: // 79. 练兵场通关x关x次 + { + let { warId, isComplete } = param; + if(isComplete && this.checkIdList(dicTaskParam, 0, warId)) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.HERO_UNLOCK: // 80. 名将谱x阵营全部激活 + { + let { hero } = param; + let dicHero = gameData.hero.get(hero.hid); + if(dicHero && dicHero.camp == dicTaskParam[1]) { + result = { inc: 1 }; + } + break; + } case TASK_TYPE.GACHA_QUALITY_COUNT: // 81. 抽到*次品质*武将 { let { heroes } = param; @@ -727,6 +923,11 @@ export class CheckSingleTask { } break; } + case TASK_TYPE.ROLE_TERAPH_STAGE_UP: // 82. 神像进阶 + { + result = { inc: 1 }; + break; + } case TASK_TYPE.HERO_WAKE_UP_COUNT: // 84. x名武将觉醒 { let { hero, oldColorStar } = param; @@ -735,6 +936,271 @@ export class CheckSingleTask { } break; } + case TASK_TYPE.ACTIVITY_RMB: // 86. 某个活动充值*元 + { + let { count } = param; + result = { inc: count }; + break; + } + case TASK_TYPE.EQUIP_LV_TO: // 87. x件装备强化至x级 + { + let { oldEplace, newEplace, ePlaceIds } = param; + let addCount = 0; + for(let eplaceId of ePlaceIds) { + let { oldEquip, newEquip } = getEquipById(oldEplace, newEplace, eplaceId); + if(oldEquip.lv < param[1] && newEquip.lv >= param[1]) { + addCount += 1; + } else if (oldEquip.lv >= param[1] && newEquip.lv < param[1]) { + addCount -= 1; + } + } + if(addCount != 0) { + result = { inc: addCount }; + } + break; + } + case TASK_TYPE.EQUIP_PUT_JEWEL: // 88. x件装备镶嵌X阶天晶石 + { + let { oldEquip, newEquip, jewels } = param; + let { oldJewel, newJewel } = getJewelByEquip(oldEquip, newEquip, jewels); + let oldLv = gameData.jewel.get(oldJewel?.id)?.lv || 0; + let lv = gameData.jewel.get(newJewel?.id)?.lv || 0; + if(lv >= dicTaskParam[1] && oldLv < dicTaskParam[1]) { + result = { inc: 1 }; + } else if (lv < dicTaskParam[1] && oldLv >= dicTaskParam[1]) { + result = { inc: -1 }; + } + break; + } + case TASK_TYPE.EQUIP_PUT_STONE: // 89. x件装备镶嵌X个地玉石 + { + let { oldEquip, newEquip } = param; + let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; + let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; + + if(oldStoneCnt < param[1] && newStoneCnt >= param[1]) { + result = { inc: 1 }; + } else if (oldStoneCnt >= param[1] && newStoneCnt < param[1]) { + result = { inc: -1 }; + } + break; + } + case TASK_TYPE.EQUIP_STAR_UP_TO: // 90. x件装备升至X星 + { + let { oldEquip, newEquip } = param; + let oldStar = oldEquip?.star||0; + let star = newEquip?.star||0 + if(oldStar < param[1] && star >= param[1]) { + result = { inc: 1 }; + }; + break; + } + case TASK_TYPE.EQUIP_STAR_UP_CNT: // 91. x件装备升星X次 + { + let { hid, ePlaceId } = param; + let records = await getRecord(); + let count = 0, index = -1; + for(let i = 0; i < records.length; i++) { + let arr = records[i].split('|'); + if(parseInt(arr[0]) == hid && parseInt(arr[1]) == ePlaceId) { + count = parseInt(arr[2]); + index = i; + break; + } + } + + if(index == -1) { + records.push(`${hid}_${ePlaceId}_${count + 1}`); + } else { + records[index] = `${hid}_${ePlaceId}_${count + 1}`; + } + if(count + 1 >= dicTaskParam[1]) { + result = { inc: 1, records } + } else { + result = { records } + } + break; + } + case TASK_TYPE.EQUIP_SUIT_SEID_NUM: // 92. x名武将激活X条套装属性 + { + let { oldEplace, newEplace, hid } = param; + let dicEquipSuit = getEquipSuitByHero(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++; + } + if(oldCount < param[1] && count >= param[1]) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.EQUIP_QUALITY_UP: // 93. x件装备进行升品 + { + let { hid, ePlaceId } = param; + let records = await getRecord(); + if(records.indexOf(`${hid}_${ePlaceId}`) == -1) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.EQUIP_QUALITY_UP_CNT: // 94. 装备升品X次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.EQUIP_QUALITY_UP_TO: // 95. X件装备升品至Y品质 + { + let { oldEquip, newEquip } = param; + let oldQuality = oldEquip?.quality||0; + let quality = newEquip?.quality||0; + if(oldQuality < param[1] && quality >= param[1]) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.EQUIP_COMPOSE: // 96. 装备X件装备 + { + let { count } = param; + result = { inc: count }; + break; + } + case TASK_TYPE.EQUIP_COMPOSE_CNT: // 97. x名武将各装备x件装备 + { + let { oldEplace, newEplace } = param; + if(oldEplace.length < dicTaskParam[1] && newEplace.length >= dicTaskParam[1]) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.EQUIP_LV_UP: // 98. 装备强化X次 + { + let { count } = param; + result = { inc: count }; + break; + } + case TASK_TYPE.EQUIP_PUT_JEWEL_CNT: // 99. X件装备镶嵌天晶 + { + let { oldEquip, newEquip } = param; + if(oldEquip.jewel && !newEquip.jewel) { + result = { inc: -1 }; + } else if (!oldEquip.jewel && newEquip.jewel) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.EQUIP_PUT_STONE_CNT: // 100. X件装备镶嵌地玉 + { + let { oldEquip, newEquip } = param; + 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) { + result = { inc: -1 }; + } else if (oldStoneCnt == 0 && newStoneCnt > 0) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.EQUIP_STONE_CNT: // 101. 镶嵌X个地玉 + { + let { oldEquip, newEquip } = param; + let oldStoneCnt = oldEquip.stones.filter(cur => cur.stone != 0).length; + let newStoneCnt = newEquip.stones.filter(cur => cur.stone != 0).length; + result = { inc: newStoneCnt - oldStoneCnt }; + break; + } + case TASK_TYPE.EQUIP_STONE_CNT_LV: // 102. X件装备镶嵌X个大于等于X阶地玉 + { + let { oldEquip, newEquip } = param; + 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; + }); + let oldCount = oldStoneLvs.filter(lv => lv >= param[2]).length; + let newCount = newStoneLvs.filter(lv => lv >= param[2]).length; + if(oldCount < param[1] && newCount >= param[1]) { + result = { inc: 1 }; + } else if (oldCount >= param[1] && newCount < param[1]) { + result = { inc: -1 } + } + break; + } + case TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT: // 103.X个天晶的Y条特性词条被激活 + { + let { oldEquip, newEquip, jewels } = param; + let { oldJewel, newJewel } = getJewelByEquip(oldEquip, newEquip, jewels); + + let oldRandSe = oldJewel?.randSe||[]; + let oldUnlockSeCnt = oldRandSe.filter(se => { + return isRandSeUnLock(oldJewel.id, se.id, oldEquip.stones); + }).length; + + let newRandSe = newJewel?.randSe||[]; + let newUnlockSeCnt = newRandSe.filter(se => { + return isRandSeUnLock(newJewel.id, se.id, newEquip.stones); + }).length; + + if(oldUnlockSeCnt < param[1] && newUnlockSeCnt >= param[1]) { + result = { inc: -1 }; + } else if (oldUnlockSeCnt >= param[1] && newUnlockSeCnt < param[1]) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.STONE_COMPOSE: // 104. 地玉合成X次 + { + let { count } = param; + result = { inc: count }; + break; + } + case TASK_TYPE.JEWEL_RESET: // 105. 天晶洗炼X次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.JEWEL_QUENCH: // 106. 天晶淬炼X次 + { + result = { inc: 1 }; + break; + } + case TASK_TYPE.JEWEL_QUENCH_SUCCESS: // 107. 天晶成功淬炼X次 + { + let { isSuccess } = param; + if(isSuccess) { + result = { inc: 1 }; + } + break; + } + case TASK_TYPE.COM_BATTLE_LV: // 108. 寻宝x品阶x次 + { + let { gid } = param; + let dicJewel = getDicBlueprtById(gid); + if(dicTaskParam[0] == dicJewel.lv) { + result = { inc: 1 }; + } + break + } + case TASK_TYPE.GUILD_REFINE: // 109. 炼器堂兑换X品阶天晶X次 + { + let { quality, count } = param; + if(dicTaskParam[0] == quality) { + result = { inc: count }; + } + break; + } } return result } diff --git a/game-server/app/services/task/taskService.ts b/game-server/app/services/task/taskService.ts index b4a71115b..f620fcf06 100644 --- a/game-server/app/services/task/taskService.ts +++ b/game-server/app/services/task/taskService.ts @@ -4,7 +4,6 @@ import { resResult, shouldRefresh } from '../../pubUtils/util'; import { STATUS, TASK_TYPE, TASK_FUN_TYPE, SHOP_REFRESH_TYPE, WAR_TYPE } from '../../consts'; import { TaskParamInter, TaskListReturn } from '../../domain/roleField/task'; import { EPlace, HeroType } from '../../db/Hero'; -import { getRoleOnlineInfo } from '../redisService'; import { HeroScores } from '../../db/PvpHistoryOpp'; import { ItemInter } from '../../pubUtils/interface'; import { UserTaskModel, UserTaskType } from '../../db/UserTask'; @@ -15,6 +14,9 @@ import { getSeconds, getZeroPointD } from '../../pubUtils/timeUtil'; import { RoleStatus } from '../../db/ComBattleTeam'; import { getActivities } from '../activity/activityService'; import { CheckTask } from './taskObj'; +import { getEquipById } from '../equipService'; +import { JewelType } from '../../db/Jewel'; +import { checkPopUpConditionInCreateHero } from '../activity/popUpShopService'; export async function checkTaskWithRoles(serverId: number, roleId: string, sid: string, taskType: TASK_TYPE, roles: RoleType[]) { for (let role of roles) { @@ -52,6 +54,7 @@ export async function checkTaskInCreateHero(serverId: number, roleId: string, si task.setParam(TASK_TYPE.HERO_QUALITY_STAR_UP, { heroes }); task.setParam(TASK_TYPE.HERO_LV, { heroes }); await task.saveAndPush(sid); + await checkPopUpConditionInCreateHero(serverId, roleId, heroes); } export async function checkTaskInHeroStarUp(serverId: number, roleId: string, sid: string, hero: HeroType, oldStar: number) { @@ -72,11 +75,10 @@ export async function checkTaskInHeroWakeUp(serverId: number, roleId: string, si } export async function checkTaskInHeroQUalityUp(serverId: number, roleId: string, sid: string, hero: HeroType) { - // 任务 - await checkTask(serverId, roleId, sid, TASK_TYPE.HERO_QUALITY_UP, { hero }); - // 任务 - await checkTask(serverId, sid, roleId, TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT, { hero }); - + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.HERO_QUALITY_UP, { hero }); + task.setParam(TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT, { hero }); + await task.saveAndPush(sid); } export async function checkTaskInHeroTrain(serverId: number, roleId: string, sid: string, hero: HeroType, trainCount: number) { @@ -86,6 +88,23 @@ export async function checkTaskInHeroTrain(serverId: number, roleId: string, sid await task.saveAndPush(sid); } +export async function checkTaskInActiveScroll(serverId: number, roleId: string, sid: string, scrollActive: boolean, hero: HeroType) { + if (!scrollActive) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.HERO_UNLOCK, { hero }); + task.setParam(TASK_TYPE.ROLE_SCROLL_ACTIVE, { scrollActive }); + await task.saveAndPush(sid); + } +} + +export async function checkTaskInGuildTrain(serverId: number, roleId: string, sid: string, warId: number, isSuccess: boolean, isComplete: boolean) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.GUILD_TRAIN_SUCESS, { isSuccess }); + task.setParam(TASK_TYPE.GUILD_TRAIN, {}); + task.setParam(TASK_TYPE.GUILD_TRAIN_COUNT, { isComplete, warId }); + await task.saveAndPush(sid); +} + /** * battle.normalBattleHandler.battleEnd 中会触发的任务,因为有点多提出来了 */ @@ -100,6 +119,7 @@ export async function checkTaskInHeroTrain(serverId: number, roleId: string, sid task.setParam(TASK_TYPE.BATTLE_TOWER, { warId, count: 1 }); task.setParam(TASK_TYPE.BATTLE_VESTIGE, { warId, count: 1 }); task.setParam(TASK_TYPE.BATTLE_EXPEDITION, { warId, count: 1 }); + task.setParam(TASK_TYPE.BATTLE_MAIN_ELITE, { warId, count: 1 }); await task.saveAndPush(sid); } @@ -118,33 +138,114 @@ export async function checkTaskInBattleSweep(serverId: number, roleId: string, s } -export async function checkTaskInComBattleStart(roleStatus: RoleStatus[], capId: string) { +export async function checkTaskInComBattleStart(roleStatus: RoleStatus[], capId: string, blueprtId: number) { // console.log('********', JSON.stringify(roleStatus), capId, quality) for (let { roleId, isRobot } of roleStatus) { if (!isRobot) { let role = await RoleModel.findByRoleId(roleId); - + let task = new CheckTask(role.serverId, roleId); + task.setRole(role); if (roleId == capId && roleStatus.length > 1) { // 招募队友 - await checkTaskWithRole(role.serverId, roleId, null, TASK_TYPE.COM_BATTLE_CREATE_TEAM, role); + task.setParam(TASK_TYPE.COM_BATTLE_CREATE_TEAM, {}); } else if (roleId !== capId) { // 协助寻宝 - await checkTaskWithRole(role.serverId, roleId, null, TASK_TYPE.COM_BATTLE_ASSIST_TEAM, role); + task.setParam(TASK_TYPE.COM_BATTLE_ASSIST_TEAM, {}); } - await checkTaskWithRole(role.serverId, roleId, null, TASK_TYPE.COM_BATTLE, role); + task.setParam(TASK_TYPE.COM_BATTLE, {}); + task.setParam(TASK_TYPE.COM_BATTLE_LV, { gid: blueprtId }); } } } export async function checkTaskInPvpEnd(serverId: number, roleId: string, sid: string, isSuccess: boolean, heroScores: HeroScores[]) { - await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_WIN, { isSuccess }) - await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_WIN_SERIES, { isSuccess }); - await checkTask(serverId, roleId, sid, TASK_TYPE.PVP_HERO_SCORE, { heroScores }); + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.PVP_WIN, { isSuccess }); + task.setParam(TASK_TYPE.PVP_WIN_SERIES, { isSuccess }); + task.setParam(TASK_TYPE.PVP_HERO_SCORE, { heroScores }); + await task.saveAndPush(sid); } export async function checkTaskInGacha(serverId: number, roleId: string, sid: string, count: number, heroes: HeroType[]) { - await checkTask(serverId, roleId, sid, TASK_TYPE.GACHA, { count }); - await checkTask(serverId, roleId, sid, TASK_TYPE.GACHA_QUALITY_COUNT, { heroes }); + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.GACHA, { count }); + task.setParam(TASK_TYPE.GACHA_QUALITY_COUNT, { heroes }); + await task.saveAndPush(sid); } + +export async function checkTaskInComposeEquip(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[]) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.EQUIP_COMPOSE, { count: newEplace.length - oldEplace.length }); + task.setParam(TASK_TYPE.EQUIP_COMPOSE_CNT, { oldEplace, newEplace }); + await task.saveAndPush(sid); +} + +export async function checkTaskInEquipLvUp(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceIds: number[]) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.EQUIP_LV_TO, { oldEplace, newEplace, ePlaceIds }); + task.setParam(TASK_TYPE.EQUIP_LV_UP, { count: ePlaceIds.length }); + await task.saveAndPush(sid); +} + +export async function checkTaskInPutJewel(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceId: number, originJewel: JewelType, curJewel: JewelType) { + let { oldEquip, newEquip } = getEquipById(oldEplace, newEplace, ePlaceId); + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.EQUIP_PUT_JEWEL, { oldEquip, newEplace, jewels: [originJewel, curJewel ] }); + task.setParam(TASK_TYPE.EQUIP_PUT_JEWEL_CNT, { oldEquip, newEquip }); + task.setParam(TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT, { oldEquip, newEplace, jewels: [originJewel, curJewel ] }); + await task.saveAndPush(sid); +} + +export async function checkTaskInPutStone(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceId: number, jewel: JewelType) { + let { oldEquip, newEquip } = getEquipById(oldEplace, newEplace, ePlaceId); + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.EQUIP_PUT_STONE, { oldEquip, newEquip }); + task.setParam(TASK_TYPE.EQUIP_PUT_STONE_CNT, { oldEquip, newEquip }); + task.setParam(TASK_TYPE.EQUIP_STONE_CNT, { oldEquip, newEquip }); + task.setParam(TASK_TYPE.EQUIP_STONE_CNT_LV, { oldEquip, newEquip }); + task.setParam(TASK_TYPE.EQUIP_JEWEL_RANDSE_CNT, { oldEquip, newEplace, jewels: [jewel ] }); + await task.saveAndPush(sid); +} + +export async function checkTaskInEquipStarUp(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceId: number, hid: number, isUpStar: boolean) { + let task = new CheckTask(serverId, roleId); + if(isUpStar) { + let { oldEquip, newEquip } = getEquipById(oldEplace, newEplace, ePlaceId); + task.setParam(TASK_TYPE.EQUIP_STAR_UP_TO, { oldEquip, newEquip }); + task.setParam(TASK_TYPE.EQUIP_SUIT_SEID_NUM, { oldEplace, newEplace, ePlaceId, hid }); + } + task.setParam(TASK_TYPE.EQUIP_STAR_UP_CNT, { hid, ePlaceId }); + await task.saveAndPush(sid); +} + +export async function checkTaskInEquipQualityUp(serverId: number, roleId: string, sid: string, oldEplace: EPlace[], newEplace: EPlace[], ePlaceId: number, hid: number, isUpQuality: boolean) { + let task = new CheckTask(serverId, roleId); + if(isUpQuality) { + let { oldEquip, newEquip } = getEquipById(oldEplace, newEplace, ePlaceId); + task.setParam(TASK_TYPE.EQUIP_QUALITY_UP, { hid, ePlaceId }); + task.setParam(TASK_TYPE.EQUIP_QUALITY_UP_TO, { oldEquip, newEquip }) + } + task.setParam(TASK_TYPE.EQUIP_QUALITY_UP_CNT, {}); + await task.saveAndPush(sid); +} + +export async function checkTaskInEquipReset(serverId: number, roleId: string, sid: string) { + await checkTask(serverId, roleId, sid, TASK_TYPE.JEWEL_RESET); +} + +export async function checkTaskInEquipQuench(serverId: number, roleId: string, sid: string, isSuccess: boolean) { + let task = new CheckTask(serverId, roleId); + task.setParam(TASK_TYPE.JEWEL_QUENCH, {}); + if(isSuccess) { + task.setParam(TASK_TYPE.JEWEL_QUENCH_SUCCESS, { isSuccess }); + } + await task.saveAndPush(sid); +} + +export async function checkTaskInComposeStone(serverId: number, roleId: string, sid: string, count: number) { + await checkTask(serverId, roleId, sid, TASK_TYPE.STONE_COMPOSE, { count }); +} + + // 获取task状态 export async function getCurTask(roleId: string, session: FrontendOrBackendSession) { let userTask = await UserTaskModel.findByRole(roleId); diff --git a/game-server/app/services/warRewardService.ts b/game-server/app/services/warRewardService.ts index a6677524e..a100038b0 100644 --- a/game-server/app/services/warRewardService.ts +++ b/game-server/app/services/warRewardService.ts @@ -6,12 +6,13 @@ import { BattleDropModel } from '../db/BattleDrop'; import { getRandEelmWithWeight, getRandSingleEelm, getReasonByWarType } from '../pubUtils/util'; import { BATTLE_REWARD_TYPE, BLUEPRT_CONST } from '../consts'; -import { addItems, combineItemAndJewels } from './role/rewardService'; +import { addItems } from './role/rewardService'; import { RoleModel } from '../db/Role'; import { gameData } from '../pubUtils/data'; import { DicWar } from '../pubUtils/dictionary/DicWar'; import { RewardInter } from '../pubUtils/interface'; import { getZeroPointD } from '../pubUtils/timeUtil'; +import { combineItemAndJewels } from './role/util'; export class WarReward { private roleId: string; diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 2d05d9f84..c698a7ac0 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -686,7 +686,7 @@ export enum TASK_TYPE { COM_BATTLE_ASSIST_TEAM = 53, // 队友协助寻宝 COM_BATTLE = 54, // 寻宝 // COM_BATTLE_QUALITY = 55, // 按品质寻宝 - COM_BATTLE_DROP = 56, // 寻宝掉落碎片 + // COM_BATTLE_DROP = 56, // 寻宝掉落碎片 PVP = 57, // PVP挑战 PVP_WIN = 58, // PVP胜利 PVP_RECEIVE_BOX = 59, // 领取宝箱 @@ -696,7 +696,7 @@ export enum TASK_TYPE { GUILD_JOB = 63, // 军团官职 GUILD_DONATE = 64, // 军团捐献 GUILD_RECEIVE_BOX = 65, // 领取活跃宝箱 - GUILD_REFINE = 66, // 军团炼器 + // GUILD_REFINE = 66, // 军团炼器 GUILD_ASSIST_REFINE = 67, // 军团助力加速 GUILD_TRAIN_SUCESS = 68, // 军团练兵场成功压制 GUILD_BOSS = 69, // 军团演武台挑战 @@ -715,7 +715,7 @@ export enum TASK_TYPE { ROLE_TERAPH_STAGE_UP = 82, // 神像进阶 // EQUIP_QUALITY_COUNT = 83, // 获得*件品质的*装备 HERO_WAKE_UP_COUNT = 84, // *名武将觉醒 - GUILD_JOIN_ACTIVITY_END = 85, // 参与*军团活动到结束 + // GUILD_JOIN_ACTIVITY_END = 85, // 参与*军团活动到结束 ACTIVITY_RMB = 86, // 累计充值*元 EQUIP_LV_TO = 87, // x件装备强化至x级 EQUIP_PUT_JEWEL = 88, // 多少件装备多少阶天晶石 @@ -738,6 +738,8 @@ export enum TASK_TYPE { JEWEL_RESET = 105, // 天晶洗练 JEWEL_QUENCH = 106, // 天晶淬炼 JEWEL_QUENCH_SUCCESS = 107, // 天晶淬炼成功 + COM_BATTLE_LV = 108, // 军团寻宝 + GUILD_REFINE = 109, // 军团兑换 } // 任务累积类型 diff --git a/shared/db/PvpDefense.ts b/shared/db/PvpDefense.ts index dea82034d..f76a85014 100644 --- a/shared/db/PvpDefense.ts +++ b/shared/db/PvpDefense.ts @@ -8,6 +8,8 @@ import { PVP } from '../pubUtils/dicParam'; @index({ roleId: 1 }) export default class PvpDefense extends BaseModel { + @prop({ required: true }) + serverId: number; // 区 id @prop({ required: true }) roleId: string; // 角色 id @prop({ required: true }) diff --git a/shared/domain/roleField/task.ts b/shared/domain/roleField/task.ts index 8b01c93de..1f32954a7 100644 --- a/shared/domain/roleField/task.ts +++ b/shared/domain/roleField/task.ts @@ -1,10 +1,11 @@ -import { HeroType } from "../../db/Hero"; +import { EPlace, HeroType } from "../../db/Hero"; +import { JewelType } from "../../db/Jewel"; import { HeroScore } from "../battleField/pvp"; export class TaskParamInter { hero?: HeroType; // 武将数据 heroes?: HeroType[]; // 很多武将数据 - count?: number; // 抽卡的次数 + count?: number; // 次数 warId?: number; // 当前关卡id towerLv?: number; // 镇念塔层数 @@ -18,6 +19,12 @@ export class TaskParamInter { connectLv?: number; // 羁绊等级 isSuccess?: boolean; // pvp是否胜利 heroScores?: HeroScore[]; // pvp各武将积分 + eventType?: number; // 奇遇类型 + + point?: number; // 远征宝箱点数 + pvpRank?: number; // pvp等级 + guildJob?: number; // 军团职位 + isComplete?: boolean; // 练兵场是否压制 oldLv?: number; // 原武将等级,原玩家等级 oldStar?: number; // 原武将星级 @@ -25,11 +32,30 @@ export class TaskParamInter { oldJob?: number; // 原武将职业 oldJobStage?: number; // 原武将职业阶 oldFavourLv?: number; // 原好感度等级 + + quality?: number; // 图纸品质 + aid?: number; // 军团活动id + + gid?: number; // 物品id + hid?: number; // 百家学宫当前武将 + preHid?: number; // 百家学宫前一个武将位置 + title?: number; // 当前爵位 + oldTitle?: number; // 之前的爵位 + scrollActive?: boolean; // 是否是激活 + + oldEplace?: EPlace[]; // 原装备栏 + newEplace?: EPlace[]; // 新装备栏 + ePlaceId?: number; // 装备栏上更新的装备(一个) + ePlaceIds?: number[]; // 装备栏上更新的装备 + oldEquip?: EPlace; // 原装备栏(一个) + newEquip?: EPlace; // 新装备栏(一个) + jewels?: JewelType[]; // 天晶石 + }; export class TaskParam extends TaskParamInter { - public setParam(params: TaskParamInter) { + public setParam(params: TaskParamInter = {}) { for(let key in params) { this[key] = params[key]; } diff --git a/shared/pubUtils/itemUtils.ts b/shared/pubUtils/itemUtils.ts deleted file mode 100644 index 41fcb5983..000000000 --- a/shared/pubUtils/itemUtils.ts +++ /dev/null @@ -1,377 +0,0 @@ - - -import { HeroModel, HeroType, } from '../db/Hero'; -import { ItemModel } from '../db/Item'; -import { gameData } from './data'; -import { ITID, CURRENCY_BY_TYPE, CURRENCY_TYPE, ROLE_SELECT, FIGURE_UNLOCK_CONDITION, CONSUME_TYPE, HERO_SYSTEM_TYPE, ITEM_CHANGE_REASON } from '../consts'; -import { getRandValueByMinMax, getRandEelm, getRandEelmWithWeight, getDecimalCnt } from './util'; - -import { findWhere } from 'underscore'; -import { RoleModel, RoleType, } from '../db/Role'; -import { Figure } from '../domain/dbGeneral'; -import { getTimeFun } from './timeUtil'; -import { reCalAllHeroCe } from './playerCe'; -// import { checkTask, checkTaskWithHeroes, checkTaskWithEquip, accomplishTask } from './taskUtil'; -import { SkinModel, } from '../db/Skin'; -import { TaskListReturn } from '../domain/roleField/task'; -import { JewelModel, jewelUpdate, RandSe, } from '../db/Jewel'; - -/** - * 只插入皮肤,不管那么多的 - * @param roleId - * @param roleName - * @param skinId - * @returns - */ -export async function increaseSkin(roleId:string, roleName: string, skinId: number) { - let dicSkin = gameData.fashion.get(skinId); - if (!dicSkin) return false; - - let skin = await SkinModel.increaseSkin(roleId, skinId, { roleId, roleName, id: skinId, skinName: dicSkin.name, hid: dicSkin.actorId, skinId: dicSkin.heroId }); - if(!skin) return false; // 插入失败 - return skin -} - -/** - * 添加皮肤 - * @param roleId 玩家id - * @param roleName 玩家名 - * @param id 皮肤id - * @param hero 武将,如果已经查询过这个武将就不用再查询一次,主意要select skins字段 - * @returns {{ hero, figureInfo, calAllHeroResult }} hero:添加皮肤后的武将 figureInfo: 触发头像添加信息 calAllHeroResult:全局战力加成后结果 - */ -export async function addSkin(roleId: string, roleName: string, skinId: number, enable: boolean, hero?: HeroType) { - let skin = await increaseSkin(roleId, roleName, skinId); - if(!skin) return false; - - if(skin.hid && !hero) hero = await HeroModel.findByHidAndRole(skin.hid, roleId); - let condition = { type: FIGURE_UNLOCK_CONDITION.GET_SKIN, paramSkinId: skinId }; - let figureInfo = await unlockFigure(roleId, [condition]); // 解锁头像 - let calAllHeroResult = await reCalAllHeroCe(HERO_SYSTEM_TYPE.ADD_SKIN, roleId, {}, [skinId]); // 全局加成 - - if (hero) { // 有武将的,将皮肤链接到武将上 - if (!findWhere(hero.skins, { id: skinId })) { - hero.skins.push({ id: skinId, skin: skin._id, enable, skinId: skin.skinId }); - await HeroModel.updateHeroInfo(roleId, hero.hid, hero); - } - return { hero, figureInfo, calAllHeroResult }; - } else { - return { hero: null, figureInfo, calAllHeroResult } - } -} - -export async function addBags(roleId: string, roleName: string, datas: { id: number, count: number }[], reason: number) { - let items: { id: number, count: number, inc: number }[] = []; - for(let data of datas) { - let item = await addBag(roleId, roleName, data, reason); - items.push(item) - } - return { items } -} - -export async function addBag(roleId: string, roleName: string, data: { id: number, count: number }, reason: number) { - let { id, count } = data; - let { name: itemName, itid, hid } = gameData.goods.get(id); - let { type } = ITID.get(itid); - - let item = await ItemModel.increaseItem(roleId, id, count, { roleId, roleName, itemName, id, type, hid }); - return { id: item.id, count: item.count, inc: count, reason }; -} - - -export async function addJewels(roleId: string, roleName: string, jewels: { id: number, }[], reason: number) { - let jewelInfo: jewelUpdate[] = []; - for(let jewel of jewels) { - let info = await getAddJewelInfo(roleId, roleName, jewel); - jewelInfo.push(info); - } - - const jewelResult = await JewelModel.createJewels(roleId, jewelInfo); - let pushMessages: TaskListReturn[] = []; - // TODO 修改任务 - // for(let equip of jewelResult) { - // let pushMessage = await checkTaskWithEquip(roleId, TASK_TYPE.EQUIP_SUIT, equip); - // if(reason == ITEM_CHANGE_REASON.EQUIP_COMPOSE) { - // let pm = await checkTaskWithEquip(roleId, TASK_TYPE.EQUIP_COMPOSE_SUIT, equip); - // pushMessages.push(...pm); - // } - // pushMessages.push(...pushMessage); - // } - - return { jewels: jewelResult.map(jewel => { - return { ...jewel, count: 1, inc: 1, reason } - }), pushMessages } -} - -export async function getAddJewelInfo(roleId: string, roleName: string, jewel: { id: number, }) { - let { id, } = jewel; - let { name, randomEffect, effectCount } = gameData.jewel.get(id); - - // 随机属性 - let randomResult: number[] = getRandEelm(randomEffect, effectCount); - - let randSe: Array = randomResult.map((id: number, index: number) => { - return getJewelRandSe(index + 1, id); - }); - - return { roleId, roleName, id, name, randSe }; -} - -/** - * 天晶石已知词条随机值 - * @param id 词条位置,第几条 - * @param seid 词条id - * @returns - */ -export function getJewelRandSe(id: number, seid: number) { - let dicRandom = gameData.randomEffectPool.get(seid) - let rand = 0; - if (dicRandom.id > 0) { - let randRange = getRandEelmWithWeight(dicRandom.rate); - let randResult = getRandValueByMinMax(randRange.dic.min, randRange.dic.max, getDecimalCnt(dicRandom.gap)); - let n = Math.floor((randResult - dicRandom.Min)/dicRandom.gap); - rand = dicRandom.Min + n * dicRandom.gap; - } - return new RandSe(id, dicRandom.id, rand); -} - -export function getGoldId() { - return CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD); -} - -/** - * @description 获取元宝物品 { id, count } - * @param count 元宝数量 - */ -export function getGoldObject(count: number) { - return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.GOLD), count }; -} - -/** - * @description 获取金币物品 { id, count } - * @param count 元宝数量 - */ -export function getCoinObject(count: number) { - return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.COIN), count }; -} - -/** - * @description 获取体力物品 { id, count } - * @param count 体力数量 - */ - export function getApObject(count: number) { - return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.ACTION_POINT), count }; -} -/** - * @description 获取友情点物品 { id, count } - * @param count 友情点数量 - */ -export function getFriendPointObject(count: number) { - return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.FRIEND_POINT), count }; -} - -/** - * @description 获取功勋物品 { id, count } - * @param count 功勋数量 - */ -export function getHonourObject(count: number) { - return { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.HONOUR), count }; -} - -/** - * 返回 解锁头像/相框 - * @param conditions 解锁条件 - * @param role 如果已查询过role表就直接可以使用 - */ - export function unlockFigureWithoutSave(conditions: { type: number, paramHid?: number, paramFavourLv?: number, paramSkinId?: number, paramWinStreakNum?: number }[], role: RoleType) { - - let { heads, frames, spines } = role; - let figureInfo = { heads: new Array
(), frames: new Array
(), spines: new Array
() }; - for (let { type, paramHid, paramFavourLv, paramSkinId, paramWinStreakNum } of conditions) { - let canUnLockList = gameData.figureCondition.get(type); - if (canUnLockList) { - let reason = 0; - - for (let { id, params, gid } of canUnLockList) { - let flag = false; // 是否达成条件 - if (type == FIGURE_UNLOCK_CONDITION.GET_HERO) { - let [hid] = params; - if (paramHid == hid) flag = true; - reason = ITEM_CHANGE_REASON.GET_HERO_UNLOCK_FIGURE; - } else if (type == FIGURE_UNLOCK_CONDITION.HERO_FAVOR) { - let [hid, favourLv] = params; - if (paramHid == hid && paramFavourLv >= favourLv) flag = true; - reason = ITEM_CHANGE_REASON.HERO_FAVOR_UNLOCK_FIGURE; - } else if (type == FIGURE_UNLOCK_CONDITION.GET_SKIN) { - let [id] = params; - if (paramSkinId == id) flag = true; - reason = ITEM_CHANGE_REASON.ADD_SKIN_UNLOCK_FIGURE; - } else if (type == FIGURE_UNLOCK_CONDITION.PVP_WIN_SERIES) { - let [winStreakNum] = params; - if (paramWinStreakNum >= winStreakNum) flag = true; - reason = ITEM_CHANGE_REASON.PVP_SERIES_UNLOCK_FIGURE; - } - if (!flag) continue; - let dicGood = gameData.goods.get(gid); - if (!dicGood) continue; - let dicItid = ITID.get(dicGood.itid); - if (!dicItid) continue; - - if (dicItid.type == CONSUME_TYPE.HEAD) { - let figure = unlockSingleFigure(heads, gid, reason, false, id); - if (figure && figure.unlocked) figureInfo.heads.push(figure); - } else if (dicItid.type == CONSUME_TYPE.FRAME) { - let figure = unlockSingleFigure(frames, gid, reason, false, id); - if (figure && figure.unlocked) figureInfo.frames.push(figure); - } else if (dicItid.type == CONSUME_TYPE.SPINE) { - let figure = unlockSingleFigure(spines, gid, reason, false, id); - if (figure && figure.unlocked) figureInfo.spines.push(figure); - } else { - continue; - } - - } - - } - } - return { figureInfo, heads, frames, spines }; -} - -/** - * 解锁头像/相框 - * @param roleId 玩家id - * @param conditions 解锁条件 - * @param role 如果已查询过role表就直接可以使用 - */ -export async function unlockFigure(roleId: string, conditions: { type: number, paramHid?: number, paramFavourLv?: number, paramSkinId?: number, paramWinStreakNum?: number }[], role?: RoleType) { - if (!role || !role.heads || !role.frames) { - role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS); - } - let { figureInfo, heads, frames, spines } = unlockFigureWithoutSave(conditions, role); - role = await RoleModel.updateRoleInfo(roleId, { heads, frames, spines }); - return figureInfo; -} - - -// 直接获得形象/相框 -export async function addFigure(roleId: string, ids: number[], reason: number) { - let role = await RoleModel.findByRoleId(roleId, ROLE_SELECT.GET_HEADS); - - if (!role) return false; - let { heads, frames, spines } = role; - - let figureInfo = { heads: [], frames: [], spines: [] }; - for (let gid of ids) { - let dicGoods = gameData.goods.get(gid); - if (!dicGoods) continue; - let dicItid = ITID.get(dicGoods.itid); - if (!dicItid) continue; - - if (dicItid.type == CONSUME_TYPE.HEAD) { - let figure = unlockSingleFigure(heads, gid, reason, true); - if (figure && figure.unlocked) figureInfo.heads.push(figure); - } else if (dicItid.type == CONSUME_TYPE.FRAME) { - let figure = unlockSingleFigure(frames, gid, reason, true); - if (figure && figure.unlocked) figureInfo.frames.push(figure); - } else if (dicItid.type == CONSUME_TYPE.SPINE) { - let figure = unlockSingleFigure(spines, gid, reason, true); - if (figure && figure.unlocked) figureInfo.spines.push(figure); - } else { - continue; - } - } - - role = await RoleModel.updateRoleInfo(roleId, { heads, frames, spines }); - return figureInfo; -} - -/** - * 根据物品id解锁/获得玩家数据 - * @param dbFigures 数据库内字段 - * @param id 物品id - * @param unlockDirect 是否不计算解锁条件直接解锁 - * @param conditionId 条件id - */ -function unlockSingleFigure(dbFigures: Figure[], id: number, reason: number, unlockDirect = false, conditionId?: number) { - let index = dbFigures.findIndex(cur => cur.id == id); - let figure = dbFigures[index]; - if (index == -1) { - figure = new Figure(id, false); - dbFigures.push(figure); - index = dbFigures.length - 1; - } - if (figure.unlocked) return; // 已解锁过 - if (!figure.unlockedId) figure.unlockedId = new Array(); - - let dicGoods = gameData.goods.get(id); - - let hasUnlockedAll = true; - if (!unlockDirect) { // 不能直接获得,需要通过type解锁 - if (figure.unlockedId.includes(conditionId)) return; - - figure.unlockedId.push(conditionId); - - for (let { id: cid } of dicGoods.condition) { - if (!figure.unlockedId.includes(cid)) { - hasUnlockedAll = false; break; - } - } - } - if (hasUnlockedAll) { - figure.unlocked = true; - delete figure.unlockedId; - - if (dicGoods.timeLimit) { - figure.time = getTimeFun().getAfterDay(dicGoods.timeLimit); // timeLimit天以后 - } - } - - figure.inc = 1; - figure.reason = reason; - dbFigures[index] = figure; - return figure -} - -// async function getSkinsOfThisHero(roleId: string, roleName: string, hid: number, initialSkin: number, allSkins?: SkinType[]) { -// if(!allSkins) allSkins = await SkinModel.findbyRoleAndHid(roleId, hid); -// let skin = await increaseSkin(roleId, roleName, initialSkin); -// if(skin) allSkins.push(skin); -// let skins: { id: number, skin: string, enable: boolean }[] = []; -// for(let skin of allSkins) { -// skins.push({ id: skin.id, skin: skin._id, enable: skin.id == initialSkin }); -// } - -// return skins -// } - -export function combineFigureInfo(figureInfos: { heads: Figure[], frames: Figure[], spines: Figure[] }[]) { - let figureInfo = { heads: new Array
(), frames: new Array
(), spines: new Array
() }; - for(let {heads, frames, spines} of figureInfos) { - for(let head of heads) { - figureInfo.heads.push(head); - } - for(let frame of frames) { - figureInfo.frames.push(frame); - } - for(let spine of spines) { - figureInfo.spines.push(spine); - } - } - return figureInfo; -} - -export function transPiece(hid: number) { - let dicHero = gameData.hero.get(hid); - let count = gameData.heroTransPiece.get(dicHero.quality); - return { pieceId: dicHero.pieceId, count } -} - -// export class CreateHero { -// roleId: string; -// roleName: string; -// serverId: number; - -// constructor(roleId: string, roleName: string, serverId: number) { - -// } -// } \ No newline at end of file diff --git a/web-server/app/service/Utils.ts b/web-server/app/service/Utils.ts index 49f131377..90af1d5c9 100644 --- a/web-server/app/service/Utils.ts +++ b/web-server/app/service/Utils.ts @@ -1,7 +1,5 @@ import { Service } from 'egg'; import { resResult as pubResult } from '../pubUtils/util'; -import { unlockFigure } from 'app/pubUtils/itemUtils'; -import { RoleType } from '@db/Role'; import { gameData } from 'app/pubUtils/data'; import { RedisClient } from 'redis'; import { REDIS_KEY } from '@consts'; @@ -45,10 +43,6 @@ export default class Utils extends Service { return pubResult(status, data, customMsg); } - public unlockFigure(roleId: string, conditions: {type: number, paramHid?: number, paramFavourLv?: number, paramSkinId?: number}[], role?: RoleType) { - return unlockFigure(roleId, conditions, role); - } - public log(level: 'DEBUG'|'INFO'|'WARN'| 'ERROR', message: string) { const log = this.app.loggers.get('linkLogger'); From 4f924eae4d86a82ab6777e5958bec1c0588be6c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E8=8E=B9?= Date: Tue, 22 Mar 2022 11:47:30 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=B4=BB=E5=8A=A8=EF=BC=9A=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../handler/dailyChallengesHandler.ts | 2 +- .../servers/activity/handler/growthHandler.ts | 2 +- .../activity/handler/refreshTaskHandler.ts | 2 +- .../activity/handler/sevenDaysHandler.ts | 4 +-- game-server/app/services/task/taskObj.ts | 12 ++++---- shared/db/ActivityDailyChallenges.ts | 20 ++++++------- shared/db/ActivityGrowth.ts | 20 ++++++------- shared/db/ActivityRefreshTask.ts | 27 +++++++---------- shared/db/ActivityThirtyDays.ts | 30 +++++-------------- shared/db/ActivityTreasureHuntTask.ts | 14 ++++----- .../domain/activityField/refreshTaskField.ts | 9 ++++-- shared/domain/activityField/sevenDaysField.ts | 2 +- .../domain/activityField/thirtyDaysField.ts | 2 +- 13 files changed, 64 insertions(+), 82 deletions(-) diff --git a/game-server/app/servers/activity/handler/dailyChallengesHandler.ts b/game-server/app/servers/activity/handler/dailyChallengesHandler.ts index 00eaa226f..6e3c77f37 100644 --- a/game-server/app/servers/activity/handler/dailyChallengesHandler.ts +++ b/game-server/app/servers/activity/handler/dailyChallengesHandler.ts @@ -65,7 +65,7 @@ export class DailyChallengesHandler { return resResult(STATUS.ACTIVITY_REWARDED); } - await ActivityDailyChallengesModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, type, 1); + await ActivityDailyChallengesModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, 1); let rewardParamArr: Array = stringToRewardParam(dailyItemData.reward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.DAILY_CHALLENGE_REWARD) diff --git a/game-server/app/servers/activity/handler/growthHandler.ts b/game-server/app/servers/activity/handler/growthHandler.ts index d659262bc..1037bbdff 100644 --- a/game-server/app/servers/activity/handler/growthHandler.ts +++ b/game-server/app/servers/activity/handler/growthHandler.ts @@ -66,7 +66,7 @@ export class GrowthHandler { return resResult(STATUS.ACTIVITY_REWARDED); } - await ActivityGrowthModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, type, 1); + await ActivityGrowthModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, 1); let rewardParamArr: Array = stringToRewardParam(growthItemData.reward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.GROWTH_REWARD) diff --git a/game-server/app/servers/activity/handler/refreshTaskHandler.ts b/game-server/app/servers/activity/handler/refreshTaskHandler.ts index 024b0617e..305ce0e31 100644 --- a/game-server/app/servers/activity/handler/refreshTaskHandler.ts +++ b/game-server/app/servers/activity/handler/refreshTaskHandler.ts @@ -68,7 +68,7 @@ export class RefreshTaskHandler { return resResult(STATUS.ACTIVITY_REWARDED); } - await ActivityRefreshTaskModel.addReceiveRecord(serverId, activityId, roleId, roundIndex, pageIndex, id, type, 1); + await ActivityRefreshTaskModel.addReceiveRecord(serverId, activityId, roleId, roundIndex, pageIndex, id, 1); let rewardParamArr: Array = stringToRewardParam(dailyItemData.reward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.REFRESH_TASK_REWARD) diff --git a/game-server/app/servers/activity/handler/sevenDaysHandler.ts b/game-server/app/servers/activity/handler/sevenDaysHandler.ts index 13bea4ce5..8d000cd9c 100644 --- a/game-server/app/servers/activity/handler/sevenDaysHandler.ts +++ b/game-server/app/servers/activity/handler/sevenDaysHandler.ts @@ -70,7 +70,7 @@ export class SevenDaysHandler { return resResult(STATUS.ACTIVITY_REWARDED); } - await ActivityGrowthModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, type, 1); + await ActivityGrowthModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, 1); let rewardParamArr: Array = stringToRewardParam(growthItemData.reward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.GROWTH_REWARD) @@ -152,7 +152,7 @@ export class SevenDaysHandler { return resResult(STATUS.ACTIVITY_REWARDED); } - await ActivityDailyChallengesModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, type, 1); + await ActivityDailyChallengesModel.addCellRecord(serverId, activityId, roleId, dayIndex, cellIndex, 1); let rewardParamArr: Array = stringToRewardParam(dailyItemData.reward); let result = await addReward(roleId, roleName, sid, serverId, rewardParamArr, ITEM_CHANGE_REASON.DAILY_CHALLENGE_REWARD) diff --git a/game-server/app/services/task/taskObj.ts b/game-server/app/services/task/taskObj.ts index 1f3d3a64e..4790e89d9 100644 --- a/game-server/app/services/task/taskObj.ts +++ b/game-server/app/services/task/taskObj.ts @@ -168,7 +168,7 @@ export class CheckSingleTask { let dicTaskTypeDesc = gameData.taskDescByType.get(taskType); // 检查一般任务 - let dicTasks = gameData.taskType.get(taskType); + let dicTasks = gameData.taskType.get(taskType)||[]; let groups = new Map(); // 以group做区分 for (let { id, type, group, taskParam } of dicTasks) { if (!groups.has(`${type}_${group}`)) { @@ -213,7 +213,7 @@ export class CheckSingleTask { return data? data.records: [] }); if(taskUpdateParam) { - let rec = await ActivityGrowthModel.setOrIncTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); + let rec = await ActivityGrowthModel.setOrIncTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskType, taskUpdateParam); if(!rec) continue; this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "growth" }); } @@ -229,7 +229,7 @@ export class CheckSingleTask { return data? data.records: [] }); if(taskUpdateParam) { - let rec = await ActivityDailyChallengesModel.setOrIncTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskUpdateParam); + let rec = await ActivityDailyChallengesModel.setOrIncTask(serverId, activityId, roleId, task.dayIndex, task.cellIndex, taskType, taskUpdateParam); if(!rec) continue; this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId, activityType: "daily" }); } @@ -247,7 +247,7 @@ export class CheckSingleTask { return data? data.records: [] }); if(taskUpdateParam) { - let rec = await ActivityRefreshTaskModel.setOrIncTask(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, taskUpdateParam); + let rec = await ActivityRefreshTaskModel.setOrIncTask(serverId, activityId, roleId, taskActivity.roundIndex, task.pageIndex, task.id, taskType, taskUpdateParam); if(!rec) continue; this.addActivityTaskPushMessage({...task, totalCount: rec.totalCount, receiveRewardCount: rec.receiveRewardCount||0, activityId }); } @@ -267,7 +267,7 @@ export class CheckSingleTask { return data? data.records: []; }); if(taskUpdateParam) { - let rec = await ActivityTreasureHuntTaskModel.setOrIncTask(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex, taskUpdateParam); + let rec = await ActivityTreasureHuntTaskModel.setOrIncTask(serverId, activityId, roleId, tempData.huntRoundIndex, task.cellIndex, taskType, taskUpdateParam); if(!rec) continue; this.addActivityTaskPushMessage({ ...task, totalCount: rec.totalCount, activityId }); } @@ -286,7 +286,7 @@ export class CheckSingleTask { return data? data.records: []; }); if(taskUpdateParam) { - let rec = await ActivityThirtyDaysModel.setOrIncTask(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, taskUpdateParam); + let rec = await ActivityThirtyDaysModel.setOrIncTask(serverId, thirtyDaysActivity.activityId, roleId, task.pageIndex, task.cellIndex, task.tab, taskType, taskUpdateParam); if(!rec) continue; this.addActivityTaskPushMessage({ ...task, totalCount: rec.totalCount, activityId }); } diff --git a/shared/db/ActivityDailyChallenges.ts b/shared/db/ActivityDailyChallenges.ts index ba3aaeda8..724ba77be 100644 --- a/shared/db/ActivityDailyChallenges.ts +++ b/shared/db/ActivityDailyChallenges.ts @@ -19,7 +19,7 @@ export default class Activity_Daily_Challenges extends BaseModel { @prop({ required: true }) cellIndex: number; // 第几天的第几个奖励 @prop({ required: true }) - type: number; // 任务类型 + taskType: number; // 任务类型 @prop({ required: true }) totalCount: number; // 累计达成次数 @prop({ required: true }) @@ -30,32 +30,32 @@ export default class Activity_Daily_Challenges extends BaseModel { records: string[]; // 数据信息 //任务领取记录 - public static async addCellRecord(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number, count: number, lean = true) { - let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex, type }, + public static async addCellRecord(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, lean = true) { + let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, { $inc: { receiveRewardCount: count } }, { upsert: true, new: true }).lean(lean); return result; } // 更新任务 - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { + public static async setOrIncTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, taskType: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.records); + return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, taskType, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.records); + return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, taskType, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, records?: string[]) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, taskType: number, count: number, records?: string[]) { let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $set: { totalCount: count, records } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records, taskType } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, records?: string[]) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, taskType: number, addCount: number, records?: string[]) { let result: ActivityDailyChallengesModelType = await ActivityDailyChallengesModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $inc: { totalCount: addCount }, $set: { records: records||[]} }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: addCount }, $set: { records: records||[], taskType } }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/db/ActivityGrowth.ts b/shared/db/ActivityGrowth.ts index 965688494..525566297 100644 --- a/shared/db/ActivityGrowth.ts +++ b/shared/db/ActivityGrowth.ts @@ -19,7 +19,7 @@ export default class Activity_Growth extends BaseModel { @prop({ required: true }) cellIndex: number; // 第几天的第几个奖励 @prop({ required: true }) - type: number; // 任务类型 + taskType: number; // 任务类型 @prop({ required: true }) totalCount: number; // 累计达成次数 @prop({ required: true }) @@ -30,31 +30,31 @@ export default class Activity_Growth extends BaseModel { records: string[]; // 数据信息 //任务领取记录 - public static async addCellRecord(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, type: number, count: number,) { - let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex, type }, + public static async addCellRecord(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number,) { + let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, { $inc: { receiveRewardCount: count } }, { upsert: true, new: true }).lean(true); return result; } - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, param: UpdateTaskParam) { + public static async setOrIncTask(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, taskType: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.set, param.records); + return await this.setTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, taskType, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, param.inc, param.records); + return await this.addTaskCount(serverId, activityId, roleId, dayIndex, cellIndex, taskType, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, count: number, records?: string[]) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, taskType: number, count: number, records?: string[]) { let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $set: { totalCount: count, records: records||[] } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[], taskType } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, addCount: number, records?: string[]) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, dayIndex: number, cellIndex: number, taskType: number, addCount: number, records?: string[]) { let result: ActivityGrowthModelType = await ActivityGrowthModel.findOneAndUpdate({ serverId, roleId, activityId, dayIndex, cellIndex }, - { $inc: { totalCount: addCount }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: addCount }, $set: { records: records||[], taskType } }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/db/ActivityRefreshTask.ts b/shared/db/ActivityRefreshTask.ts index e611e75fa..86ba372fd 100644 --- a/shared/db/ActivityRefreshTask.ts +++ b/shared/db/ActivityRefreshTask.ts @@ -21,7 +21,7 @@ export default class Activity_Refresh_Task extends BaseModel { @prop({ required: true }) id: number; // id @prop({ required: true }) - type: number; // 任务类型 + taskType: number; // 任务类型 @prop({ required: true }) totalCount: number; // 累计达成次数 @prop({ required: true }) @@ -32,41 +32,34 @@ export default class Activity_Refresh_Task extends BaseModel { records: string[]; // 数据信息 //任务领取记录 - public static async addReceiveRecord(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, type: number, count: number) { - let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id, type }, + public static async addReceiveRecord(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number) { + let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id }, { $inc: { receiveRewardCount: count } }, { upsert: true, new: true }).lean(true); return result; } // 更新任务 - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, param: UpdateTaskParam) { + public static async setOrIncTask(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, taskType: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.set, param.records); + return await this.setTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, taskType, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, param.inc, param.records); + return await this.addTaskCount(serverId, activityId, roleId, roundIndex, pageIndex, id, taskType, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, records?: string[]) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, taskType: number, count: number, records?: string[]) { let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id }, - { $set: { totalCount: count, records: records||[] }}, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[], taskType }}, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, count: number, records?: string[]) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, taskType: number, count: number, records?: string[]) { let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id }, - { $inc: { totalCount: count }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); - return result; - } - - //根据活动记录统计数据 - public static async addTaskRecord(serverId: number, activityId: number, roleId: string, roundIndex: number, pageIndex: number, id: number, type: number, data: string,) { - let result: ActivityRefreshTaskModelType = await ActivityRefreshTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, pageIndex, id, type }, - { $set: { data: data } }, { upsert: true, new: true }).lean(true); + { $inc: { totalCount: count }, $set: { records: records||[], taskType } }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/db/ActivityThirtyDays.ts b/shared/db/ActivityThirtyDays.ts index f6d393ed2..9d84f988a 100644 --- a/shared/db/ActivityThirtyDays.ts +++ b/shared/db/ActivityThirtyDays.ts @@ -21,7 +21,7 @@ export default class Activity_Thirty_Days extends BaseModel { @prop({ required: true }) tab: number; // 具体任务id @prop({ required: true }) - type: number; // 任务类型 + taskType: number; // 任务类型 @prop({ required: true }) totalCount: number; // 累计达成次数 @prop({ required: true }) @@ -38,20 +38,6 @@ export default class Activity_Thirty_Days extends BaseModel { return result; } - //根据活动记录统计数据 - public static async addTaskRecord(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, type: number, data: string,) { - let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab, type }, - { $set: { data: data } }, { upsert: true, new: true }).lean(true); - return result; - } - - //推送标记 - public static async pushMessage(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, type: number) { - let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab, type }, - { $set: { isPush: true, } }, { upsert: true, new: true }).lean(true); - return result; - } - //根据活动id查询活动数据 public static async findData(serverId: number, activityId: number, roleId: string, lean = true) { let result: ActivityThirtyDaysModelType[] = await ActivityThirtyDaysModel.find({ serverId, roleId, activityId }).lean(lean); @@ -66,11 +52,11 @@ export default class Activity_Thirty_Days extends BaseModel { // 更新任务 - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, param: UpdateTaskParam) { + public static async setOrIncTask(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, taskType: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.set, param.records); + return await this.setTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, taskType, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, param.inc, param.records); + return await this.addTaskCount(serverId, activityId, roleId, pageIndex, cellIndex, tab, taskType, param.inc, param.records); } } @@ -83,16 +69,16 @@ export default class Activity_Thirty_Days extends BaseModel { } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, records?: string[]) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, taskType: number, count: number, records?: string[]) { let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab }, - { $inc: { totalCount: count }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: count }, $set: { records: records||[], taskType } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, count: number, records?: string[]) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, pageIndex: number, cellIndex: number, tab: number, taskType: number, count: number, records?: string[]) { let result: ActivityThirtyDaysModelType = await ActivityThirtyDaysModel.findOneAndUpdate({ serverId, roleId, activityId, pageIndex, cellIndex, tab }, - { $set: { totalCount: count, records: records||[] } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[], taskType } }, { upsert: true, new: true }).lean(); return result; } } diff --git a/shared/db/ActivityTreasureHuntTask.ts b/shared/db/ActivityTreasureHuntTask.ts index 34a93df95..59288b091 100644 --- a/shared/db/ActivityTreasureHuntTask.ts +++ b/shared/db/ActivityTreasureHuntTask.ts @@ -29,25 +29,25 @@ export default class Activity_Treasure_Hunt_Task extends ActivityGrowth { } // 更新任务 - public static async setOrIncTask(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, param: UpdateTaskParam) { + public static async setOrIncTask(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, taskType: number, param: UpdateTaskParam) { if(param.set) { - return await this.setTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.set, param.records); + return await this.setTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, taskType, param.set, param.records); } else if (param.inc) { - return await this.addTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, param.inc, param.records); + return await this.addTaskCount(serverId, activityId, roleId, roundIndex, cellIndex, taskType, param.inc, param.records); } } //根据活动统计完成任务次数 - public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, records?: string[]) { + public static async setTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, taskType: number, count: number, records?: string[]) { let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, cellIndex }, - { $set: { totalCount: count, records: records||[] } }, { upsert: true, new: true }).lean(); + { $set: { totalCount: count, records: records||[], taskType } }, { upsert: true, new: true }).lean(); return result; } //根据活动统计完成任务次数 - public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, count: number, records?: string[]) { + public static async addTaskCount(serverId: number, activityId: number, roleId: string, roundIndex: number, cellIndex: number, taskType: number, count: number, records?: string[]) { let result: ActivityTreasureHuntTaskModelType = await ActivityTreasureHuntTaskModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex, cellIndex }, - { $inc: { totalCount: count }, $set: { records: records||[] } }, { upsert: true, new: true }).lean(); + { $inc: { totalCount: count }, $set: { records: records||[], taskType } }, { upsert: true, new: true }).lean(); return result; } diff --git a/shared/domain/activityField/refreshTaskField.ts b/shared/domain/activityField/refreshTaskField.ts index 5a4f59d6e..acca05e00 100644 --- a/shared/domain/activityField/refreshTaskField.ts +++ b/shared/domain/activityField/refreshTaskField.ts @@ -2,6 +2,7 @@ import { TASK_TYPE } from '../../consts'; import { ActivityModelType } from '../../db/Activity'; import { ActivityRefreshTaskModelType } from '../../db/ActivityRefreshTask'; import { ActivityRefreshTaskPointModelType } from '../../db/ActivityRefreshTaskPoint'; +import { parseNumberList } from '../../pubUtils/util'; import { ActivityBase } from './activityField'; @@ -17,6 +18,7 @@ export class RefreshTaskItem { skip: number; //跳转客户端用 point: number; //奖励的点数 + taskParamArray: number[] = []; totalCount: number = 0; //完成任务累计次数 receiveRewardCount: number = 0; //领取奖励次数 @@ -32,6 +34,7 @@ export class RefreshTaskItem { this.point = data.point; this.totalCount = 0; this.receiveRewardCount = 0; + this.taskParamArray = parseNumberList(data.taskParam); } } @@ -78,10 +81,10 @@ export class RefreshTaskData extends ActivityBase { } public findTaskByType(type: TASK_TYPE) { - let arr = []; + let arr: RefreshTaskItem[] = []; for (let pageData of this.list) { let items = pageData.items.filter(item => { return item.taskType == type }); - arr = arr.concat(items) + arr.push(...items); } return arr; } @@ -90,7 +93,7 @@ export class RefreshTaskData extends ActivityBase { public setPlayerRecords(data: ActivityRefreshTaskModelType[], pointRecordData: ActivityRefreshTaskPointModelType) { for (let pageData of this.list) { for (let item of pageData.items) { - let index = data.findIndex(record => { return item.id == record.id && item.pageIndex == record.pageIndex && item.taskType == record.type }) + let index = data.findIndex(record => { return item.id == record.id && item.pageIndex == record.pageIndex && item.taskType == record.taskType }) if (index != -1) { item.totalCount = data[index].totalCount ? data[index].totalCount : 0; item.receiveRewardCount = data[index].receiveRewardCount ? data[index].receiveRewardCount : 0; diff --git a/shared/domain/activityField/sevenDaysField.ts b/shared/domain/activityField/sevenDaysField.ts index 5bd5b25e6..3b7d529b5 100644 --- a/shared/domain/activityField/sevenDaysField.ts +++ b/shared/domain/activityField/sevenDaysField.ts @@ -18,7 +18,7 @@ export class SevenDaysDailyItem { name: string; // 任务名称 taskType: number; // 任务类型 dic_zyz_taskType.json taskParam: string; //任务数据 dic_zyz_taskType.json - taskParamArray: number[]; + taskParamArray: number[] = []; condition: number; //任务数据条件 dic_zyz_taskType.jsonT reward: string; // 任务奖励,格式:1&3&1(类型&id&数量) 类型定义:1.英雄,2.物品 skip: string; // 跳转 diff --git a/shared/domain/activityField/thirtyDaysField.ts b/shared/domain/activityField/thirtyDaysField.ts index fe25938bf..562612602 100644 --- a/shared/domain/activityField/thirtyDaysField.ts +++ b/shared/domain/activityField/thirtyDaysField.ts @@ -119,7 +119,7 @@ export class ThirtyDaysData extends ActivityBase { totalPoint: number = 0;//总共点数 public findTaskByType(type: number) { - let task = []; + let task: ThirtyDaysItem[] = []; for (let i = 0; i < this.list.length; i++) { let items = this.list[i].item; for (let itemData of items) {