diff --git a/game-server/app/servers/activity/handler/luckyTurntableHandler.ts b/game-server/app/servers/activity/handler/luckyTurntableHandler.ts index b49a81329..b4d611540 100644 --- a/game-server/app/servers/activity/handler/luckyTurntableHandler.ts +++ b/game-server/app/servers/activity/handler/luckyTurntableHandler.ts @@ -5,7 +5,7 @@ import { getPlayerLuckyTurntableDataShow, getPlayerLuckyTurntableData } from '.. import { addItems, handleCost } from '../../../services/role/rewardService'; import { ActivityTurntableModel } from '../../../db/ActivityTurntableRec'; import { pick } from 'underscore'; -import { addReward, stringToRewardInter, stringToRewardParam } from '../../../services/activity/giftPackageService'; +import { addReward, stringToRewardParam } from '../../../services/activity/giftPackageService'; export default function (app: Application) { diff --git a/game-server/app/services/activity/giftPackageService.ts b/game-server/app/services/activity/giftPackageService.ts index b9a2b62bd..3743c5222 100644 --- a/game-server/app/services/activity/giftPackageService.ts +++ b/game-server/app/services/activity/giftPackageService.ts @@ -119,7 +119,7 @@ export async function addReward(roleId: string, roleName: string, sid: string, s } //表中的奖励数据(包括礼包)转换成具体对应奖励物品的实例 -function rewardItemData(reward: Array) { +export function rewardItemData(reward: Array) { let goods: Array = []; let heroes: Array = []; for (let obj of reward) { @@ -209,4 +209,3 @@ export function stringToRewardInter(rewardStr: string): Array { } return result } - diff --git a/game-server/app/services/activity/monthlyTicketService.ts b/game-server/app/services/activity/monthlyTicketService.ts index 03d2ae6d8..1fe567bac 100644 --- a/game-server/app/services/activity/monthlyTicketService.ts +++ b/game-server/app/services/activity/monthlyTicketService.ts @@ -3,7 +3,7 @@ import { ActivityModel, ActivityModelType } from '../../db/Activity'; import { ActivityMonthlyTicketModel, ActivityMonthlyTicketModelType } from '../../db/ActivityMonthlyTicket'; import { RewardParam } from '../../domain/activityField/rewardField'; import { MonthlyTicketData } from '../../domain/activityField/monthlyTicketField'; -import { addReward, stringToRewardInter, stringToRewardParam } from './giftPackageService'; +import { addReward, stringToRewardParam } from './giftPackageService'; import moment = require('moment'); import { ServerlistModel } from '../../db/Serverlist'; import { sendMailByContent } from './../mailService'; @@ -11,7 +11,7 @@ import { RoleModel, RoleType } from '../../db/Role'; import { getActivitiesByType, getActivityById } from './activityService'; import { RewardInter } from '../../pubUtils/interface'; import { DUNGEON_CONST, PVP, VIP } from '../../pubUtils/dicParam'; -import { cal } from '../../pubUtils/util'; +import { cal, stringWithTypeToRewardInter } from '../../pubUtils/util'; import { pinus } from 'pinus'; import { getGoldId } from '../role/rewardService'; import { getRoleCreateTime, getServerCreateTime } from '../redisService'; @@ -44,7 +44,7 @@ export async function monthlyTicketActivity(serverId: number, roleId: string, ty if (playerData.todayIndex - 1 > playerData.dayIndex) {//过期还没领取 //下发邮件奖励 for (let i = playerData.dayIndex + 1; i < playerData.todayIndex; i++) { - let goods = stringToRewardInter(playerData.baseReward) + let goods = stringWithTypeToRewardInter(playerData.baseReward) await sendMailByContent(MAIL_TYPE.MONTHLY_REWARD, roleId, { params: [], goods }); } await ActivityMonthlyTicketModel.setDayIndex(serverId, roleId, playerData.activityId, playerData.todayIndex - 1); diff --git a/game-server/app/services/activity/timeLimitRankService.ts b/game-server/app/services/activity/timeLimitRankService.ts index 536123269..351551284 100644 --- a/game-server/app/services/activity/timeLimitRankService.ts +++ b/game-server/app/services/activity/timeLimitRankService.ts @@ -5,11 +5,11 @@ import { GuildModel, GuildType } from "../../db/Guild"; import { RoleModel } from "../../db/Role"; import { TimeLimitRankData } from "../../domain/activityField/timeLimitRankField"; import { GuildRankInfo, RoleRankInfo } from "../../domain/rank"; +import { stringWithTypeToRewardInter } from "../../pubUtils/util"; import { sendMailByContent, sendMailToGuildByContent } from "../mailService"; import { Rank } from "../rankService"; import { getServerCreateTime } from "../redisService"; import { getActivitiesByType, getActivityById } from "./activityService"; -import { stringToRewardInter } from "./giftPackageService"; /** @@ -77,11 +77,11 @@ export async function sendRankMail(data: TimeLimitRankData, serverId: number) { if(reward) { await sendMailToGuildByContent(MAIL_TYPE.TIME_LIMIT_RANK, code, { params: [data.tabName,`${rank}`], - goods: stringToRewardInter(reward.guildRewards) + goods: stringWithTypeToRewardInter(reward.guildRewards) }); if(leader.roleId) await sendMailByContent(MAIL_TYPE.TIME_LIMIT_RANK, leader.roleId, { params: [data.tabName,`${rank}`], - goods: stringToRewardInter(reward.rewards) + goods: stringWithTypeToRewardInter(reward.rewards) }); } } @@ -93,7 +93,7 @@ export async function sendRankMail(data: TimeLimitRankData, serverId: number) { if(reward) { await sendMailByContent(MAIL_TYPE.TIME_LIMIT_RANK, roleId, { params: [data.tabName, `${rank}`], - goods: stringToRewardInter(reward.rewards) + goods: stringWithTypeToRewardInter(reward.rewards) }); } } diff --git a/shared/domain/activityField/popUpShopField.ts b/shared/domain/activityField/popUpShopField.ts index cbc2d2458..7d6563f1e 100644 --- a/shared/domain/activityField/popUpShopField.ts +++ b/shared/domain/activityField/popUpShopField.ts @@ -3,8 +3,7 @@ import { POP_UP_SHOP_CONDITION_TYPE, POP_UP_SHOP_REFRESH_TIME_TYPE, REFRESH_TIME import { ActivityModelType } from "../../db/Activity"; import { ActivityPopUpShopModelType, PopUpShopItem as ActivityPopUpShopItem } from "../../db/ActivityPopUpShop"; import { RewardInter } from "../../pubUtils/interface"; -import { parseNumberList } from "../../pubUtils/util"; -import { stringToRewardInter } from "../../pubUtils/util"; +import { parseNumberList, stringWithTypeToRewardInter } from "../../pubUtils/util"; import { ActivityBase } from './activityField'; // 数据库格式 @@ -332,7 +331,7 @@ export class PopShopItem { this.productID = data.productID; this.consume = data.consume; this.reward = data.reward; - this.rewardInter = stringToRewardInter(data.reward); + this.rewardInter = stringWithTypeToRewardInter(data.reward); this.rebate = data.rebate; this.buyCnt = data.buyCnt; this.parent = parent; diff --git a/shared/pubUtils/util.ts b/shared/pubUtils/util.ts index 5beaa41f6..4aa225118 100644 --- a/shared/pubUtils/util.ts +++ b/shared/pubUtils/util.ts @@ -5,13 +5,16 @@ import { isNumber } from 'underscore'; const csprng = require('csprng'); import fs = require('fs'); import path = require('path'); -import { ABI_STAGE, GACHA_TO_FLOOR, REFRESH_TIME, ROBOT_SYS_TYPE, ITEM_CHANGE_REASON, WAR_TYPE } from '../consts'; +import { ABI_STAGE, GACHA_TO_FLOOR, REFRESH_TIME, ROBOT_SYS_TYPE, ITEM_CHANGE_REASON, WAR_TYPE, ACTIVITY_RESOURCES_TYPE } from '../consts'; import { findIndex } from 'underscore'; import { getTimeFunM } from './timeUtil'; import { Floor } from '../domain/activityField/gachaField'; import { WhiteListModel } from '../db/RegionWhiteList'; import { RewardInter } from './interface'; +import { RewardParam } from '../domain/activityField/rewardField'; +import { CreateHeroParam } from '../domain/roleField/hero'; +import { gameData } from './data'; const randomName = require("chinese-random-name"); const moment = require('moment'); const crypto = require('crypto'); @@ -820,3 +823,50 @@ export function addToMap(map: Map, id: T, value: number) { // return { topLineup, topLineupCe }; // } + + +//数据格式转换'类型&id&数量|类型&id&数量|' ->> Array 活动奖励 +export function stringToRewardParam(rewardStr: string): Array { + let result = new Array<{ type: number, id: number, count: number }>(); + if (!rewardStr) return result; + let decodeArr = decodeArrayListStr(rewardStr); + for (let [type, id, count] of decodeArr) { + if (isNaN(parseInt(type)) || isNaN(parseInt(id)) || isNaN(parseInt(count))) { + throw new Error('data table format wrong'); + } + result.push({ type: parseInt(type), id: parseInt(id), count: parseInt(count) }); + } + return result +} + +//表中的奖励数据(包括礼包)转换成具体对应奖励物品的实例 +export function rewardItemData(reward: Array) { + let goods: Array = []; + let heroes: Array = []; + for (let obj of reward) { + switch (obj.type) { + case ACTIVITY_RESOURCES_TYPE.HERO: + heroes.push({ hid: obj.id, count: obj.count }) + break; + case ACTIVITY_RESOURCES_TYPE.GOODS: + goods.push({ id: obj.id, count: obj.count }) + break; + case ACTIVITY_RESOURCES_TYPE.GIFTPACKAGE://配置成礼包会立刻兑换,配置成物品会把礼包放入背包中 + let goodData = gameData.goods.get(obj.id);//礼包物品 + let giftPackageData = gameData.giftPackage.get(1)//gameData.giftPackage.get(goodData.gift);//礼包数据 + let giftReward = rewardItemData(giftPackageData.reward) + goods = goods.concat(giftReward.goods) + heroes = heroes.concat(giftReward.heroes) + break; + default: + break; + } + } + return { goods, heroes } +} + +export function stringWithTypeToRewardInter(str: string): Array { + let reward = stringToRewardParam(str); + let item = rewardItemData(reward); + return item.goods||[]; +}