import { GIFT_PACKAGE_TYPE, ACTIVITY_RESOURCES_TYPE } from '../consts'; import { gameData } from '../pubUtils/data'; import { addItems, createHeroes } from './rewardService'; import { RewardParam } from '../domain/activityField/rewardField'; import { CreateHeroParam } from '../domain/roleField/hero'; import { DicGiftPackage } from '../pubUtils/dictionary/DicGiftPackage'; import { RewardInter } from '../pubUtils/interface'; /** * 兑换礼包 * @param giftID 礼包id * @param roleId 角色id * @param roleName 角色名称 * @param sid */ export async function useGiftPackage(roleId: string, roleName: string, sid: string, serverId: number, funcs: number[], giftID: number, selected: Array = []) { let result = { goods: [], addHeros: [] } let giftPackageData = gameData.giftPackage.get(giftID); if (!giftPackageData) { return result } let giftType = giftPackageData.type;//礼包类型 let reward = giftPackageData.reward;//奖励内容,数组 switch (giftType) { case GIFT_PACKAGE_TYPE.ALL://全部 { result = await addReward(roleId, roleName, sid, serverId, funcs, reward); break; } case GIFT_PACKAGE_TYPE.SELECTED_X://手选 { let count = giftPackageData.count;//选择个数 if (selected.length != count) { break; } let selectedReward = getSelectedReward(giftPackageData, selected) result = await addReward(roleId, roleName, sid, serverId, funcs, selectedReward); break; } case GIFT_PACKAGE_TYPE.RANDOM_X://随机 { let count = giftPackageData.count;//随机个数 let randomArray = randomSelectedData(count); let selectedReward = getSelectedReward(giftPackageData, randomArray) result = await addReward(roleId, roleName, sid, serverId, funcs, selectedReward); break; } default: break; } return result; } //结算奖励的内容 export async function addReward(roleId: string, roleName: string, sid: string, serverId: number, funcs: number[], reward: Array) { let giftReward = rewardItemData(reward); let goodArray = giftReward.goods; let heroArray = giftReward.heroes; //兑换物品 let goods = await addItems(roleId, roleName, sid, goodArray) let addHeros = []; if (heroArray.length > 0) { let heroResult = await createHeroes(roleId, roleName, sid, serverId, funcs, heroArray); goods = goods.concat(heroResult.goods) addHeros = addHeros.concat(heroResult.heroes); } return { goods, addHeros } } //表中的奖励数据(包括礼包)转换成具体对应奖励物品的实例 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 getSelectedReward(giftData: DicGiftPackage, selected: Array): Array { let selectedReward: Array = []; for (let i = 0; i < selected.length; i++) { let index = selected[i]; if (giftData.reward.length > index) { selectedReward.push(giftData.reward[index]); } } return selectedReward; } function randomSelectedData(count: number) { let arr = []; return arr; }