diff --git a/game-server/app/servers/activity/handler/gachaHandler.ts b/game-server/app/servers/activity/handler/gachaHandler.ts index 514105f00..9b0be575f 100644 --- a/game-server/app/servers/activity/handler/gachaHandler.ts +++ b/game-server/app/servers/activity/handler/gachaHandler.ts @@ -12,12 +12,11 @@ import { handleCost, createHeroes, addItems } from "../../../services/rewardServ import { getZeroPointD, getTimeFun } from "../../../pubUtils/timeUtil"; import { UserGachaRecModel } from "../../../db/UserGachaRec"; import { ActivityModel } from "../../../db/Activity"; -import { checkTask } from "../../../services/taskService"; +import { checkActivityTask, checkTask } from "../../../services/taskService"; import { RECRUIT } from "../../../pubUtils/dicParam"; import { getAllHeroByQuality } from "../../../services/gachaService"; import { transPiece } from "../../../pubUtils/itemUtils"; import { CreateHeroParam } from "../../../domain/roleField/hero"; -import { accomplishTask } from "../../../pubUtils/taskUtil"; export default function (app: Application) { return new GachaHandler(app); @@ -132,7 +131,7 @@ export class GachaHandler { // 任务 await checkTask(roleId, sid, funcs, TASK_TYPE.GASHA, count, true, {}); //活动统计 - await accomplishTask(serverId, roleId, TASK_TYPE.GASHA, count) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.GASHA, count) let resultRefFreeTime = 0; if (dicGacha.free.count > 0) { diff --git a/game-server/app/servers/battle/handler/guildTrainHandler.ts b/game-server/app/servers/battle/handler/guildTrainHandler.ts index a61f25e2f..174e7771d 100644 --- a/game-server/app/servers/battle/handler/guildTrainHandler.ts +++ b/game-server/app/servers/battle/handler/guildTrainHandler.ts @@ -18,8 +18,7 @@ import { addActive } from '../../../services/guildService'; import { GuildTrainReportModel } from '../../../db/GuildTrainReport'; import { DATA_NAME } from '../../../consts/dataName'; import { pushGuildTrainSucMsg } from '../../../services/chatService'; -import { checkTask } from '../../../services/taskService'; -import { accomplishTask } from '../../../pubUtils/taskUtil'; +import { checkActivityTask, checkTask } from '../../../services/taskService'; export default function (app: Application) { return new GuildTrainHandler(app); @@ -271,7 +270,7 @@ export class GuildTrainHandler { } await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_TRAIN, 1, true, {}); //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.GUILD_TRAIN, 1) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.GUILD_TRAIN, 1) return resResult(STATUS.SUCCESS, result); } diff --git a/game-server/app/servers/guild/handler/cityActivityHandler.ts b/game-server/app/servers/guild/handler/cityActivityHandler.ts index 4fc151181..d29eade31 100644 --- a/game-server/app/servers/guild/handler/cityActivityHandler.ts +++ b/game-server/app/servers/guild/handler/cityActivityHandler.ts @@ -14,8 +14,7 @@ import { GUILDACTIVITY } from "../../../pubUtils/dicParam"; import { handleCost } from "../../../services/rewardService"; import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; -import { checkTask } from "../../../services/taskService"; -import { accomplishTask } from "../../../pubUtils/taskUtil"; +import { checkActivityTask, checkTask } from "../../../services/taskService"; export default function (app: Application) { return new CityActivityHandler(app); @@ -295,7 +294,7 @@ export class CityActivityHandler { // 任务 await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid }) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid }) return resResult(STATUS.SUCCESS, { isSuccess, diff --git a/game-server/app/servers/guild/handler/gateActivityHandler.ts b/game-server/app/servers/guild/handler/gateActivityHandler.ts index dd09c2ba0..3b672e0d2 100644 --- a/game-server/app/servers/guild/handler/gateActivityHandler.ts +++ b/game-server/app/servers/guild/handler/gateActivityHandler.ts @@ -14,8 +14,7 @@ import { UserGuildModel } from "../../../db/UserGuild"; import { GuildActivityCityModel } from "../../../db/GuildActivityCity"; import { Rank } from "../../../services/rankService"; import { getTimeFun } from "../../../pubUtils/timeUtil"; -import { checkTask } from "../../../services/taskService"; -import { accomplishTask } from "../../../pubUtils/taskUtil"; +import { checkActivityTask, checkTask } from "../../../services/taskService"; export default function (app: Application) { return new GateActivityHandler(app); @@ -259,7 +258,7 @@ export class GateActivityHandler { // 任务 await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid }) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid }) return resResult(STATUS.SUCCESS, { code, ...statusResult, diff --git a/game-server/app/servers/guild/handler/raceActivityHandler.ts b/game-server/app/servers/guild/handler/raceActivityHandler.ts index c4f2ad636..6e24df1fc 100644 --- a/game-server/app/servers/guild/handler/raceActivityHandler.ts +++ b/game-server/app/servers/guild/handler/raceActivityHandler.ts @@ -7,8 +7,7 @@ import { GuildActivityRecordModel } from "../../../db/GuildActivityRec"; import { UserGuildActivityRecModel } from "../../../db/UserGuildActivityRec"; import { addActive } from "../../../services/guildService"; import { Rank } from "../../../services/rankService"; -import { checkTask } from "../../../services/taskService"; -import { accomplishTask } from "../../../pubUtils/taskUtil"; +import { checkActivityTask, checkTask } from "../../../services/taskService"; export default function (app: Application) { return new RaceActivityHandler(app); @@ -179,7 +178,7 @@ export class RaceActivityHandler { // 任务 await checkTask(roleId, sid, funcs, TASK_TYPE.GUILD_ACTIVITY, 1, true, { aid: this.aid }); //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid }) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.GUILD_ACTIVITY, 1, { aid: this.aid }) return resResult(STATUS.SUCCESS, { timestamp: Date.now(), woodenHorse: guildActivityRec.woodenHorse, diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index 6ee2a31ab..1d7ff4ec2 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -15,8 +15,7 @@ import { changeEquip, dressEquip, checkMaterialEnough, takeOffEquipAndCalPlayerC import { indexOf, findIndex } from 'underscore'; import { pushEquipRefineSucMsg, pushNormalEquipMsg, pushNormalItemMsg } from "../../../services/chatService"; -import { checkTaskWithHero, checkTaskWithEquip, checkTask, checkTaskWithArgs, checkTaskConditionEquipSuitJewelStage } from "../../../services/taskService"; -import { accomplishTask } from "../../../pubUtils/taskUtil"; +import { checkTaskWithHero, checkTaskWithEquip, checkTask, checkTaskWithArgs, checkTaskConditionEquipSuitJewelStage, checkActivityTask } from "../../../services/taskService"; export default function (app: Application) { return new EquipHandler(app); @@ -168,7 +167,7 @@ export class EquipHandler { // 任务 await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.EQUIP_STRENGTHEN, hero, oldLvs); //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.EQUIP_STRENGTHEN, 1, changeData) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_STRENGTHEN, 1, changeData) const curHero = { hid, @@ -250,7 +249,7 @@ export class EquipHandler { // 任务 await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.EQUIP_STRENGTHEN, hero, oldLvs); //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.EQUIP_STRENGTHEN, 1, changeData) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_STRENGTHEN, 1, changeData) const curHero = { hid, @@ -328,7 +327,7 @@ export class EquipHandler { let curEquip = equip; pushEquipRefineSucMsg(roleId, roleName, serverId, curEplace, curEquip ? curEquip.quality : 0); await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_REFINE, 1, true, {}); - await accomplishTask(serverId, roleId, TASK_TYPE.EQUIP_REFINE_LV, 1, { lv: curEplace.refineLv }); + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_REFINE_LV, 1, { lv: curEplace.refineLv }); } return resResult(STATUS.SUCCESS, { isSuccess, curHero }); } @@ -517,7 +516,7 @@ export class EquipHandler { //英雄满装备且都镶嵌相同阶数的宝石 let { isTask, jewelLevel } = await checkTaskConditionEquipSuitJewelStage(hero) if (isTask) { - await accomplishTask(serverId, roleId, TASK_TYPE.EQUIP_SUIT_JEWEL_STAGE, 1, { stage: jewelLevel }) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_SUIT_JEWEL_STAGE, 1, { stage: jewelLevel }) } } else if (type == 2) { if (!equip.hid) @@ -597,7 +596,7 @@ export class EquipHandler { //英雄满装备且都镶嵌相同阶数的宝石 let { isTask, jewelLevel } = await checkTaskConditionEquipSuitJewelStage(hero) if (isTask) { - await accomplishTask(serverId, roleId, TASK_TYPE.EQUIP_SUIT_JEWEL_STAGE, 1, { stage: jewelLevel }) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_SUIT_JEWEL_STAGE, 1, { stage: jewelLevel }) } } @@ -606,8 +605,8 @@ export class EquipHandler { await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_STAGE, [jewel, oldJewel]); await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_SUM, equip, [oldJewelCount]); //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.EQUIP_JEWEL_SUM, 1) - await accomplishTask(serverId, roleId, TASK_TYPE.EQUIP_JEWEL_STAGE, 1) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_JEWEL_SUM, 1) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_JEWEL_STAGE, 1) return resResult(STATUS.SUCCESS, { curEquip: { seqId: eid, holes: equip.holes } }); } @@ -777,7 +776,7 @@ export class EquipHandler { //英雄满装备且都镶嵌相同阶数的宝石 let { isTask, jewelLevel } = await checkTaskConditionEquipSuitJewelStage(hero) if (isTask) { - await accomplishTask(serverId, roleId, TASK_TYPE.EQUIP_SUIT_JEWEL_STAGE, 1, { stage: jewelLevel }) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_SUIT_JEWEL_STAGE, 1, { stage: jewelLevel }) } } @@ -786,7 +785,7 @@ export class EquipHandler { await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_STAGE, [jewel, oldJewel]); await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_JEWEL_SUM, equip, [oldJewelCount]); //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.EQUIP_JEWEL_SUM, count) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_JEWEL_SUM, count) return resResult(STATUS.SUCCESS, { curEquip: { seqId: eid, holes: equip.holes } }); } else { diff --git a/game-server/app/servers/role/handler/heroHandler.ts b/game-server/app/servers/role/handler/heroHandler.ts index b10763a68..48b2dffba 100644 --- a/game-server/app/servers/role/handler/heroHandler.ts +++ b/game-server/app/servers/role/handler/heroHandler.ts @@ -13,9 +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 } from '../../../services/taskService'; -import { accomplishTask } from '../../../pubUtils/taskUtil'; -import { EQUIP } from '../../../pubUtils/dicParam'; +import { checkTaskWithHero, checkTask, checkActivityTask } from '../../../services/taskService'; export default function (app: Application) { return new HeroHandler(app); @@ -227,9 +225,9 @@ export class HeroHandler { await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_STAR_UP, hero); await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_QUALITY_STAR_UP, hero); //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.HERO_QUALITY_STAR_UP, 1, { quality: dicHero.quality, star: hero.star }); + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.HERO_QUALITY_STAR_UP, 1, { quality: dicHero.quality, star: hero.star }); if (hero.colorStar) {//觉醒升星 - await accomplishTask(serverId, roleId, TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT, 1, { quality: dicHero.quality, star: hero.star }); + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.HERO_WAKE_UP_STAR_UP_COUNT, 1, { quality: dicHero.quality, star: hero.star }); } } @@ -286,7 +284,7 @@ export class HeroHandler { // 任务 await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_QUALITY_UP, hero); // 任务 - await accomplishTask(serverId, roleId, TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT, 1, { oldQuality, quality: hero.quality }); + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.HERO_QUALITY_TO_QUALITY_COUNT, 1, { oldQuality, quality: hero.quality }); const curHero = { hid, @@ -349,7 +347,7 @@ export class HeroHandler { // 任务 await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_STAR_UP, hero); await checkTask(roleId, sid, funcs, TASK_TYPE.HERO_WAKE_UP, 1, true, {}); - await accomplishTask(serverId, roleId, TASK_TYPE.HERO_WAKE_UP_COUNT, 1, { quality: hero.quality }); + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.HERO_WAKE_UP_COUNT, 1, { quality: hero.quality }); } const curHero = { hid, @@ -398,7 +396,7 @@ export class HeroHandler { await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_TRAIN, hero); await checkTask(roleId, sid, funcs, TASK_TYPE.HERO_TRAIN_SUM, 1, true, {}); //活动统计 - await accomplishTask(serverId, roleId, TASK_TYPE.HERO_TRAIN_SUM, 1) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.HERO_TRAIN_SUM, 1) return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, job: hero.job, jobStage: hero.jobStage } }); } @@ -435,7 +433,7 @@ export class HeroHandler { hero = await calPlayerCeAndSave(HERO_SYSTEM_TYPE.STAGEUP, sid, roleId, hero, update); // 任务 await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.HERO_STAGE_UP, hero); - await accomplishTask(serverId, roleId, TASK_TYPE.HERO_STAGE_UP, 1, { job: hero.job }); + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.HERO_STAGE_UP, 1, { job: hero.job }); return resResult(STATUS.SUCCESS, { curHero: { hid: hero.hid, job: hero.job, jobStage: hero.jobStage } }); } diff --git a/game-server/app/servers/role/handler/roleHandler.ts b/game-server/app/servers/role/handler/roleHandler.ts index 61d570f50..e1541859a 100644 --- a/game-server/app/servers/role/handler/roleHandler.ts +++ b/game-server/app/servers/role/handler/roleHandler.ts @@ -16,8 +16,7 @@ import { HERO_SYSTEM_TYPE, LINEUP_NUM, ROLE_SELECT, REDIS_KEY, TASK_TYPE, DEFAUL import { checkBattleHeroesByHid } from '../../../services/normalBattleService'; import { Rank } from '../../../services/rankService'; import { updateUserInfo } from '../../../services/redisService'; -import { checkTaskWithHero, checkTask, checkTaskWithArgs } from '../../../services/taskService'; -import { accomplishTask } from '../../../pubUtils/taskUtil'; +import { checkTaskWithHero, checkTask, checkTaskWithArgs, checkActivityTask } from '../../../services/taskService'; import { getGoldObject, getCoinObject } from '../../../pubUtils/itemUtils'; import { RScriptRecordModel } from '../../../db/RScriptRecord'; import { checkPvp } from '../../../services/pvpService'; @@ -101,7 +100,7 @@ export class RoleHandler { // 任务 await checkTask(roleId, sid, funcs, TASK_TYPE.ROLE_TITLE, 1, false, { title }); //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.ROLE_TITLE, update.title) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.ROLE_TITLE, update.title) return resResult(STATUS.SUCCESS, { roleId, title: role.title }); } @@ -273,7 +272,7 @@ export class RoleHandler { await checkTaskWithArgs(roleId, sid, funcs, TASK_TYPE.ROLE_SCHOOL_UNLOCK, [hid, preHid]); if (hid > 0) { //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.ROLE_SCHOOL_PUT_HERO, 1) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.ROLE_SCHOOL_PUT_HERO, 1) } return resResult(STATUS.SUCCESS, { diff --git a/game-server/app/services/equipService.ts b/game-server/app/services/equipService.ts index 2bdc2b60b..be4dc6f5d 100644 --- a/game-server/app/services/equipService.ts +++ b/game-server/app/services/equipService.ts @@ -7,8 +7,7 @@ import { HERO_SYSTEM_TYPE, TASK_TYPE } from "../consts"; import { EquipType } from "../db/Equip"; import { calEquipSeids } from '../pubUtils/playerCe'; import { indexOf, findIndex } from 'underscore'; -import { checkTask, checkTaskWithHero, checkTaskWithEquip } from './taskService'; -import { accomplishTask } from '../pubUtils/taskUtil'; +import { checkTask, checkTaskWithHero, checkTaskWithEquip, checkActivityTask } from './taskService'; /** * 校验前端传入的消耗数量是否准确,并返回消耗的道具并加上特殊材料needConsumes * @param consumes @@ -129,8 +128,8 @@ export async function dressEquip(serverId: number, roleId: string, sid: string, await checkTask(roleId, sid, funcs, TASK_TYPE.EQUIP_SUM, 1, true, {}); await checkTaskWithHero(roleId, sid, funcs, TASK_TYPE.EQUIP_BY_HERO, hero, [1]); await checkTaskWithEquip(roleId, sid, funcs, TASK_TYPE.EQUIP_QUALITY, equip, [1]); - await accomplishTask(serverId, roleId, TASK_TYPE.EQUIP_QUALITY, 1, { quality: equip.quality }) - await accomplishTask(serverId, roleId, TASK_TYPE.EQUIP_SUM, 1) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_QUALITY, 1, { quality: equip.quality }) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.EQUIP_SUM, 1) return { seqId: equip.seqId, hid: hero.hid }; } \ No newline at end of file diff --git a/game-server/app/services/growthFundService.ts b/game-server/app/services/growthFundService.ts index 17503e045..659aee06d 100644 --- a/game-server/app/services/growthFundService.ts +++ b/game-server/app/services/growthFundService.ts @@ -112,3 +112,26 @@ export async function getPlayerGrowthFundData(activityId: number, serverId: numb } + + +/** + * 购买高阶版 + * + * @param {number} serverId 区Id + * @param {number} activityId 活动Id + * @param {string} roleId 角色Id + * @param {string} productID 商品ID + * + */ +export async function makeGrowthFund(roleId: string, roleName: string, sid: string, serverId: number, funcs: number[], + activityId: number, productID: string) { + let activityData: ActivityModelType = await ActivityModel.findActivity(activityId); + if (!activityData) { + return null; + } + let playerData = new GrowthFundData(activityData); + let pageData = playerData.findPageByProductID(productID); + let pageIndex = pageData.pageIndex; + await ActivityBuyRecordsModel.addRecord(activityId, roleId, activityData.type, pageIndex, true); + return Object.assign({}, { item: { pageIndex }, activityId: activityId }) +} \ No newline at end of file diff --git a/game-server/app/services/guildService.ts b/game-server/app/services/guildService.ts index 794a58f06..6062e94d6 100644 --- a/game-server/app/services/guildService.ts +++ b/game-server/app/services/guildService.ts @@ -20,8 +20,7 @@ import { getMailContent } from '../services/mailService'; import { DATA_NAME } from '../consts/dataName'; import { addRoleToGuildChannel } from "./chatService"; import { Rank } from "./rankService"; -import { checkTask } from "./taskService"; -import { accomplishTask } from "../pubUtils/taskUtil"; +import { checkActivityTask, checkTask } from "./taskService"; /** * @description 检查该玩家是否有权限做操作 @@ -93,7 +92,7 @@ export async function joinGuild(code: string, guildName: string, lv: number, rol } //成长任务-加入军团 - await accomplishTask(serverId, roleId, TASK_TYPE.GUILD_JOIN, 1); + await checkActivityTask(serverId, sid, [], roleId, TASK_TYPE.GUILD_JOIN, 1); session.set('guildCode', code); session.push('guildCode', () => { }); diff --git a/game-server/app/services/normalBattleService.ts b/game-server/app/services/normalBattleService.ts index 61e61277c..2845039ee 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 } from '../consts'; import { BackendSession } from 'pinus'; import { REDIS_KEY } from '../consts'; import { Rank } from './rankService'; -import { checkTask } from './taskService'; -import { accomplishTask } from '../pubUtils/taskUtil'; +import { checkActivityTask, checkTask } from './taskService'; export async function roleLevelup(roleId: string, kingExp: number, session: BackendSession) { const serverId = session.get('serverId'); @@ -36,7 +35,7 @@ export async function roleLevelup(roleId: string, kingExp: number, session: Back // 任务 await checkTask(roleId, session.get('sid'), session.get('funcs'), TASK_TYPE.ROLE_LV, newLv, false, {}); //成长任务 - await accomplishTask(serverId, roleId, TASK_TYPE.ROLE_LV, newLv); + await checkActivityTask(serverId, session.get('sid'), session.get('funcs'), roleId, TASK_TYPE.ROLE_LV, newLv); } let actordata: { lv: number, exp: number, getExp: number, mostExp: number }[] = []; diff --git a/game-server/app/services/orderService.ts b/game-server/app/services/orderService.ts index 038335b2c..e11fa0c95 100644 --- a/game-server/app/services/orderService.ts +++ b/game-server/app/services/orderService.ts @@ -12,6 +12,7 @@ import { makePopUpShopReward } from './popUpShopService'; import { ActivityModel, ActivityModelType } from '../db/Activity'; import { ActivityFirstGiftModel } from '../db/ActivityFirstGift'; import { ServerlistModel } from '../db/Serverlist'; +import { makeGrowthFund } from './growthFundService'; @@ -84,16 +85,19 @@ export async function makeOrder(localOrderID: string, sid: string, orderInfo: Us rewardResult = await makePopUpShopReward(roleId, roleInfo.roleName, sid, orderInfo.serverId, roleInfo.funcs, orderInfo.activityId, orderInfo.productID) break; } - case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP: + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP: //主线成长基金(高阶) { + rewardResult = await makeGrowthFund(roleId, roleInfo.roleName, sid, orderInfo.serverId, roleInfo.funcs, orderInfo.activityId, orderInfo.productID) break; } - case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP: + case ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP://镇念塔成长基金(高阶) { + rewardResult = await makeGrowthFund(roleId, roleInfo.roleName, sid, orderInfo.serverId, roleInfo.funcs, orderInfo.activityId, orderInfo.productID) break; } - case ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP: + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP://精英成长基金(高阶) { + rewardResult = await makeGrowthFund(roleId, roleInfo.roleName, sid, orderInfo.serverId, roleInfo.funcs, orderInfo.activityId, orderInfo.productID) break; } default: diff --git a/game-server/app/services/taskService.ts b/game-server/app/services/taskService.ts index 86f60a2ff..04dd8840a 100644 --- a/game-server/app/services/taskService.ts +++ b/game-server/app/services/taskService.ts @@ -73,6 +73,26 @@ export async function pushTaskUpdate(roleId: string, sid: string, funcs: number[ } } + +export async function checkActivityTask(serverId: number, sid: string, funcs: number[], roleId: string, taskType: TASK_TYPE, count: number, parma?: any) { + let pushMessage = await taskUtil.accomplishTask(serverId, roleId, taskType, count, parma); + pushTaskUpdate(roleId, sid, funcs, pushMessage); +} + +export async function pushActivityUpdate(roleId: string, sid: string, funcs: number[], pushMessage: any[]) { + if (pushMessage.length > 0) { + if (!sid || !funcs) { + let onlineUser = await getRoleOnlineInfo(roleId); + sid = onlineUser.sid; + funcs = onlineUser.funcs || []; + } + if (!!sid) { + let uids = [{ uid: roleId, sid }]; + pinus.app.get('channelService').pushMessageByUids('onActivityUpdate', resResult(STATUS.SUCCESS, pushMessage), uids); + } + } +} + /** * battle.normalBattleHandler.battleEnd 中会触发的任务,因为有点多提出来了 */ @@ -88,7 +108,7 @@ export async function checkTaskInBattleEnd(serverId: number, roleId: string, sid await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_VESTIGE, battleId, heroes, 1, star); await checkTaskWithWar(roleId, sid, funcs, TASK_TYPE.BATTLE_EXPEDITION, battleId, heroes, 1, star); //成长任务 - await taskUtil.accomplishTask(serverId, roleId, TASK_TYPE.BATTLE_MAIN, 1, { warId: battleId }) + await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.BATTLE_MAIN, 1, { warId: battleId }) } @@ -248,7 +268,7 @@ export async function checkTaskConditionEquipSuitJewelStage(hero: HeroType) { let jewelLevel = -1;//宝石阶数 for (let i = 0; i < hero.ePlace.length; i++) { let equipObj = hero.ePlace[i].equip; - if(equipObj) { + if (equipObj) { let equipObjInfo = getGoodById(equipObj.id); if (equipObj.holes.length == equipObjInfo.hole && equipObjInfo.hole > 0) { for (let j = 0; j < equipObj.holes.length; j++) { diff --git a/game-server/app/services/yuanbaoService.ts b/game-server/app/services/yuanbaoService.ts index 965b78816..a4022b218 100644 --- a/game-server/app/services/yuanbaoService.ts +++ b/game-server/app/services/yuanbaoService.ts @@ -57,13 +57,13 @@ export async function getPlayerYuanbaoShopData(activityId: number, serverId: num */ export async function makeYuanbaoShopReward(roleId: string, roleName: string, sid: string, serverId: number, funcs: number[], activityId: number, productID: string) { - let records = await UserOrderModel.findOrderByProductID(productID, roleId, activityId); + let records = await UserOrderModel.findSuccessOrderByProductID(productID, roleId, activityId); let activityData: ActivityModelType = await ActivityModel.findActivity(activityId); let playerData = new YuanBaoShopData(activityData); let item = playerData.findItem(productID); let rewardParamArr: Array = []; - if (records.length == 0) {//首充 + if (records.length == 1) {//首充 rewardParamArr = rewardParamArr.concat(stringToRewardParam(item.baseReward)); rewardParamArr = rewardParamArr.concat(stringToRewardParam(item.firstReward)); } else { diff --git a/shared/db/Activity.ts b/shared/db/Activity.ts index f18d10296..88a37431c 100644 --- a/shared/db/Activity.ts +++ b/shared/db/Activity.ts @@ -30,6 +30,14 @@ export default class Activity extends BaseModel { return result; } + //根据活动类型查询开启的活动数据 + public static async findOpenActivityByTypes(activityGroupId: number[], types: number[], date: Date) { + let result: ActivityModelType[] = await ActivityModel.find( + { groupId: { $in: activityGroupId }, type: { $in: types }, beginTime: { $lte: date }, endTime: { $gte: date } } + ).sort({ activityId: -1 }).lean(true); + return result; + } + //根据活动类型查询活动数据 public static async findActivityByType(activityGroupId: number[], type: number, sort: number) { let result: ActivityModelType[] = await ActivityModel.find({ groupId: { $in: activityGroupId }, type }).sort({ activityId: sort }).lean(true); diff --git a/shared/db/UserOrder.ts b/shared/db/UserOrder.ts index f141080f1..f23df7cd1 100644 --- a/shared/db/UserOrder.ts +++ b/shared/db/UserOrder.ts @@ -63,6 +63,12 @@ export default class UserOrder extends BaseModel { return result; } + //查询成功订单详情 + public static async findSuccessOrderByProductID(productID: string, roleId: string, activityId: number) { + let result: UserOrderModelType[] = await UserOrderModel.find({ productID, roleId, activityId, state: ORDER_STATE.RESULT_SUCCESS }).lean(true); + return result; + } + //查询订单详情 public static async findOrderByProductID(productID: string, roleId: string, activityId: number) { let result: UserOrderModelType[] = await UserOrderModel.find({ productID, roleId, activityId }).lean(true); diff --git a/shared/domain/activityField/growthFundField.ts b/shared/domain/activityField/growthFundField.ts index 3d8471b72..82c792d9d 100644 --- a/shared/domain/activityField/growthFundField.ts +++ b/shared/domain/activityField/growthFundField.ts @@ -60,6 +60,43 @@ export class GrowthFundData extends ActivityBase { buyRecords: Array = [];//高阶购买记录 receiveRecords: Array = [];//领取记录 + public unLockItem(condition: number) { + let items = []; + for (let page of this.list) { + if (this.isVipActivity() && !this.isBuy(page.pageIndex)) { + continue; + } + for (let item of page.items) { + switch (this.type) { + case ACTIVITY_TYPE.GROWTH_FUND_MAIN: + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP: { + if (!this.isReceive(page.pageIndex, item.cellIndex) && item.condition == condition) { + item.isComplete = true; + items.push(Object.assign(item, { pageIndex: page.pageIndex, activityId: this.activityId })) + } + break; + } + case ACTIVITY_TYPE.GROWTH_FUND_MAIN: + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP: + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE: + case ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP: { + if (!this.isReceive(page.pageIndex, item.cellIndex) && item.condition <= condition) { + item.isComplete = true; + items.push(Object.assign(item, { pageIndex: page.pageIndex, activityId: this.activityId })) + } + break; + } + } + } + } + return items; + } + + public findPageByProductID(productID: string) { + let index = this.list.findIndex(obj => { return obj && obj.productID === productID }); + return (index != -1) ? this.list[index] : null; + } + //是否是高阶,需要购买 public isVipActivity() { return this.type == ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP diff --git a/shared/domain/activityField/yuanBaoShopField.ts b/shared/domain/activityField/yuanBaoShopField.ts index 81e1db170..c453ea587 100644 --- a/shared/domain/activityField/yuanBaoShopField.ts +++ b/shared/domain/activityField/yuanBaoShopField.ts @@ -24,6 +24,7 @@ export class YuanBaoShopItem { this.firstReward = data.firstReward; this.extraReward = data.extraReward; this.imageName = data.imageName; + this.buyCount = 0; } } @@ -47,7 +48,7 @@ export class YuanBaoShopData extends ActivityBase { return; } for (let obj of this.list) { - let arr = data.filter(obj => { return obj.productID === obj.productID }) + let arr = data.filter(order => { return order.productID === obj.productID }) obj.buyCount = arr.length; } } diff --git a/shared/pubUtils/taskUtil.ts b/shared/pubUtils/taskUtil.ts index 411b936e4..61f68df36 100644 --- a/shared/pubUtils/taskUtil.ts +++ b/shared/pubUtils/taskUtil.ts @@ -1,6 +1,6 @@ import { gameData } from './data'; import { DicTask } from './dictionary/DicTask'; -import { TASK_TYPE, ABI_STAGE, WAR_TYPE, GUILD_JOB, TASK_FUN_TYPE, FUNCS_ID } from '../consts'; +import { TASK_TYPE, ABI_STAGE, WAR_TYPE, GUILD_JOB, TASK_FUN_TYPE, FUNCS_ID, STATUS } from '../consts'; import { UserTaskRecModel, UserTaskRecType } from '../db/UserTaskRec' import { RoleType, RoleModel } from '../db/Role'; import { TaskParam, TaskListReturn } from '../domain/roleField/task'; @@ -10,7 +10,7 @@ import { EquipType, EquipModel } from '../db/Equip'; import { ItemInter } from './interface'; import { GrowthData } from '../domain/activityField/growthField'; import { DailyChallengesData } from '../domain/activityField/dailyChallengesField'; -import { splitString } from './util'; +import { resResult, splitString } from './util'; import { ActivityModel, ActivityModelType } from '../db/Activity'; import { ACTIVITY_TYPE } from '../consts/constModules/activityConst'; import { ActivityGrowthModel } from '../db/ActivityGrowth'; @@ -19,6 +19,8 @@ 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'; @@ -484,6 +486,7 @@ function checkRecResult(rec: UserTaskRecType, id: number) { * */ export async function accomplishTask(serverId: number, roleId: string, taskType: TASK_TYPE, count: number, parma?: any) { + let pushMessage = []; let { activityGroupId } = await ServerlistModel.findByServerId(serverId); //七天乐-成长活动统计 let allActivity: ActivityModelType[] = await ActivityModel.findOpenActivityByType(activityGroupId, ACTIVITY_TYPE.TASK_GROWTH, new Date()); @@ -550,17 +553,54 @@ export async function accomplishTask(serverId: number, roleId: string, taskType: //主线成长基金 if (taskType === TASK_TYPE.BATTLE_MAIN) { - + allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_MAIN, ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP], new Date()); + for (let activity of allActivity) { + let growthFundActivity = new GrowthFundData(activity); + 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); + } } - //镇念塔成长基金 + //镇念塔成长基金getRoleOnlineInfo if (taskType === TASK_TYPE.BATTLE_TOWER_LV) { - + allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_TOWER, ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP], new Date()); + for (let activity of allActivity) { + let growthFundActivity = new GrowthFundData(activity); + 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); + } } //精英成长基金 if (taskType === TASK_TYPE.BATTLE_MAIN_ELITE) { - + allActivity = await ActivityModel.findOpenActivityByTypes(activityGroupId, [ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP], new Date()); + for (let activity of allActivity) { + let growthFundActivity = new GrowthFundData(activity); + 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); + } } + return pushMessage; } /**