diff --git a/game-server/app/services/giftPackageService.ts b/game-server/app/services/giftPackageService.ts new file mode 100644 index 000000000..e80d7251c --- /dev/null +++ b/game-server/app/services/giftPackageService.ts @@ -0,0 +1,110 @@ +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'; + + + +/** + * 兑换礼包 + * @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 } +} + +function getSelectedReward(giftData: DicGiftPackage, selected: Array) { + let selectedReward = []; + + return selectedReward; +} + +function randomSelectedData(count: number) { + let arr = []; + + return arr; +} \ No newline at end of file diff --git a/shared/consts/constModules/activityConst.ts b/shared/consts/constModules/activityConst.ts index 1aab015e1..fc66ad6a6 100644 --- a/shared/consts/constModules/activityConst.ts +++ b/shared/consts/constModules/activityConst.ts @@ -17,4 +17,14 @@ export enum ACTIVITY_RESOURCES_TYPE { HERO = 1, // 英雄表 GOODS = 2, // 物品表 RMB = 3, // RMB + GIFTPACKAGE = 4, //礼包 +} + +/** + * 礼包类型 + */ +export enum GIFT_PACKAGE_TYPE { + ALL = 1, // 全部 + SELECTED_X = 2, // 多选* + RANDOM_X = 3, // 多随* } \ No newline at end of file diff --git a/shared/consts/constModules/itemConst.ts b/shared/consts/constModules/itemConst.ts index 9fea24d97..09bfe22a4 100644 --- a/shared/consts/constModules/itemConst.ts +++ b/shared/consts/constModules/itemConst.ts @@ -8,12 +8,12 @@ export const IT_TYPE = { // 背包页签 export const GOOD_TYPE = { - ITEM: 1, - EQUIP: 2, - PIECE: 3, - BLUEPRT: 4, - JEWEL: 5, - PICTURE: 6 + ITEM: 1, + EQUIP: 2, + PIECE: 3, + BLUEPRT: 4, + JEWEL: 5, + PICTURE: 6 }; // 存到消耗品表内显示的类型 @@ -31,6 +31,7 @@ export const CONSUME_TYPE = { HEAD: 11, // 头像 FRAME: 12, // 相框 SPINE: 13, // 形象 + GIFT_PACKAGE: 14, // 礼包 }; export enum ROLE_TERAPH { @@ -74,14 +75,14 @@ export enum JEWEL_TYPE { } export const ITEM_TABLE = { - EQUIP: 'equip', - ITEM: 'item', - ROLE: 'role', - HERO: 'hero' + EQUIP: 'equip', + ITEM: 'item', + ROLE: 'role', + HERO: 'hero' } const itid_array = [ - { id: 1, name: '短兵(神兵)', table: 'equip', type: EQUIP_TYPE.WEAPON, equipJewel: JEWEL_TYPE.WEAPON}, + { id: 1, name: '短兵(神兵)', table: 'equip', type: EQUIP_TYPE.WEAPON, equipJewel: JEWEL_TYPE.WEAPON }, { id: 2, name: '枪矛(神兵)', table: 'equip', type: EQUIP_TYPE.WEAPON, equipJewel: JEWEL_TYPE.WEAPON }, { id: 3, name: '重兵(神兵)', table: 'equip', type: EQUIP_TYPE.WEAPON, equipJewel: JEWEL_TYPE.WEAPON }, { id: 4, name: '弓弩(神兵)', table: 'equip', type: EQUIP_TYPE.WEAPON, equipJewel: JEWEL_TYPE.WEAPON }, @@ -103,10 +104,10 @@ const itid_array = [ { id: 20, name: '车(行具)', table: 'equip', type: EQUIP_TYPE.SHOES, equipJewel: JEWEL_TYPE.SHOES }, { id: 21, name: '佩饰(礼器)', table: 'equip', type: EQUIP_TYPE.ACCESSORY, equipJewel: JEWEL_TYPE.ACCESSORY }, { id: 22, name: '钟鼎(礼器)', table: 'equip', type: EQUIP_TYPE.ACCESSORY, equipJewel: JEWEL_TYPE.ACCESSORY }, - { id: 23, name: '印章(礼器)', table: 'equip', type: EQUIP_TYPE.ACCESSORY, equipJewel: JEWEL_TYPE.ACCESSORY }, + { id: 23, name: '印章(礼器)', table: 'equip', type: EQUIP_TYPE.ACCESSORY, equipJewel: JEWEL_TYPE.ACCESSORY }, { id: 24, name: '消耗品', table: 'item', type: CONSUME_TYPE.CONSUME }, - + { id: 37, name: '消耗类物品(图纸类)', table: 'item', type: CONSUME_TYPE.CONSUME }, { id: 35, name: '消耗类物品(经验书)', table: 'item', type: CONSUME_TYPE.EXP }, { id: 36, name: '消耗类物品(好感道具)', table: 'item', type: CONSUME_TYPE.FAVOUR }, @@ -139,49 +140,51 @@ const itid_array = [ { id: 49, name: '玩家好感道具', table: 'item', type: CONSUME_TYPE.FRIEND_FAVOUR }, { id: 50, name: '形象', table: 'role', type: CONSUME_TYPE.HEAD }, { id: 51, name: '相框', table: 'role', type: CONSUME_TYPE.FRAME }, - { id: 52, name: '玩家形象', table: 'role', type: CONSUME_TYPE.SPINE } + { id: 52, name: '玩家形象', table: 'role', type: CONSUME_TYPE.SPINE }, + + { id: 54, name: '礼包分类', table: 'item', type: CONSUME_TYPE.GIFT_PACKAGE } ]; -export const ITID = new Map(); -for(let obj of itid_array) { +export const ITID = new Map(); +for (let obj of itid_array) { ITID.set(obj.id, obj); } export const CURRENCY_TYPE = { - GOLD: "gold", - COIN: "coin", - ACTION_POINT: "ap", - TREASURE_POINT: "treasurePoint", - EXPEDITION_POINT: "expeditionPoint", - DUNGEON_POINT: "dungeonPoint", - FRIEND_POINT: "friendPoint", - HONOUR: "honour", - SKIN_COIN: "skinCoin", - DUNGEON: "dungeon" + GOLD: "gold", + COIN: "coin", + ACTION_POINT: "ap", + TREASURE_POINT: "treasurePoint", + EXPEDITION_POINT: "expeditionPoint", + DUNGEON_POINT: "dungeonPoint", + FRIEND_POINT: "friendPoint", + HONOUR: "honour", + SKIN_COIN: "skinCoin", + DUNGEON: "dungeon" } export const SPEICAL_ITEM = { - REFINE_ADD_RATE: [17039] + REFINE_ADD_RATE: [17039] }; const currencyArr = [ - { "gid": 31001, "name": "铜钱", "type": CURRENCY_TYPE.COIN }, - { "gid": 31002, "name": "元宝", "type": CURRENCY_TYPE.GOLD }, - { "gid": 31003, "name": "体力", "type": CURRENCY_TYPE.ACTION_POINT }, - { "gid": 40001, "name": "远征币", "type": CURRENCY_TYPE.EXPEDITION_POINT }, - { "gid": 40002, "name": "寻宝币", "type": CURRENCY_TYPE.TREASURE_POINT }, - { "gid": 40003, "name": "情谊点", "type": CURRENCY_TYPE.FRIEND_POINT }, - { "gid": 40004, "name": "秘境币", "type": CURRENCY_TYPE.DUNGEON_POINT }, - { "gid": 40005, "name": "功勋", "type": CURRENCY_TYPE.HONOUR }, - { "gid": 40006, "name": "蜀锦", "type": CURRENCY_TYPE.SKIN_COIN }, - { "gid": 40007, "name": "秘境币", "type": CURRENCY_TYPE.DUNGEON } + { "gid": 31001, "name": "铜钱", "type": CURRENCY_TYPE.COIN }, + { "gid": 31002, "name": "元宝", "type": CURRENCY_TYPE.GOLD }, + { "gid": 31003, "name": "体力", "type": CURRENCY_TYPE.ACTION_POINT }, + { "gid": 40001, "name": "远征币", "type": CURRENCY_TYPE.EXPEDITION_POINT }, + { "gid": 40002, "name": "寻宝币", "type": CURRENCY_TYPE.TREASURE_POINT }, + { "gid": 40003, "name": "情谊点", "type": CURRENCY_TYPE.FRIEND_POINT }, + { "gid": 40004, "name": "秘境币", "type": CURRENCY_TYPE.DUNGEON_POINT }, + { "gid": 40005, "name": "功勋", "type": CURRENCY_TYPE.HONOUR }, + { "gid": 40006, "name": "蜀锦", "type": CURRENCY_TYPE.SKIN_COIN }, + { "gid": 40007, "name": "秘境币", "type": CURRENCY_TYPE.DUNGEON } ]; -export const CURRENCY = new Map(); +export const CURRENCY = new Map(); export const CURRENCY_BY_TYPE = new Map(); -for(let obj of currencyArr) { - CURRENCY.set(obj.gid, obj); - CURRENCY_BY_TYPE.set(obj.type, obj.gid); +for (let obj of currencyArr) { + CURRENCY.set(obj.gid, obj); + CURRENCY_BY_TYPE.set(obj.type, obj.gid); } export enum QUALITY_TYPE { @@ -197,11 +200,11 @@ export const COM_BTL_QUALITY = [QUALITY_TYPE.BLUE, QUALITY_TYPE.PURPLE, QUALITY_ // 各品质随机属性条数 quality => number export const RANDOM_SE_COUNT = new Map([ - [QUALITY_TYPE.BLUE, 0], - [QUALITY_TYPE.PURPLE, 1], - [QUALITY_TYPE.ORANGE, 2], - [QUALITY_TYPE.RED, 3], - [QUALITY_TYPE.GOLD, 4] + [QUALITY_TYPE.BLUE, 0], + [QUALITY_TYPE.PURPLE, 1], + [QUALITY_TYPE.ORANGE, 2], + [QUALITY_TYPE.RED, 3], + [QUALITY_TYPE.GOLD, 4] ]); @@ -215,47 +218,47 @@ export const FIX_ATTRIBUTES_RAN = 20; // 固定属性值+-20%随机 export function getCurNameById(gid) { - let currency = CURRENCY.get(gid); - if (!currency) { - return; - } - if (currency.type == CURRENCY_TYPE.COIN) { - return 'coin'; - } else if (currency.type == CURRENCY_TYPE.GOLD) { - return 'gold'; - } else if (currency.type == CURRENCY_TYPE.ACTION_POINT) { - return 'ap'; - } else if (currency.type == CURRENCY_TYPE.FRIEND_POINT) { - return 'frdCnt'; - } else if (currency.type == CURRENCY_TYPE.EXPEDITION_POINT) { - return 'expeditionPoint'; - } else if (currency.type == CURRENCY_TYPE.HONOUR) { - return 'honour' - } -} + let currency = CURRENCY.get(gid); + if (!currency) { + return; + } + if (currency.type == CURRENCY_TYPE.COIN) { + return 'coin'; + } else if (currency.type == CURRENCY_TYPE.GOLD) { + return 'gold'; + } else if (currency.type == CURRENCY_TYPE.ACTION_POINT) { + return 'ap'; + } else if (currency.type == CURRENCY_TYPE.FRIEND_POINT) { + return 'frdCnt'; + } else if (currency.type == CURRENCY_TYPE.EXPEDITION_POINT) { + return 'expeditionPoint'; + } else if (currency.type == CURRENCY_TYPE.HONOUR) { + return 'honour' + } +} export function getDropItems() { let items = [ - { id:25 ,count: 1 },{ id:225 ,count: 1 },{ id:625 ,count: 1 },{ id:2025 ,count: 1 },{ id:3025 ,count: 1 },{ id:4025 ,count: 1 },{ id:5025 ,count: 1 },{ id:6025 ,count: 1 }, - { id:1 ,count: 1 },{ id:2 ,count: 1 },{ id:101 ,count: 1 },{ id:102 ,count: 1 },{ id:201 ,count: 1 },{ id:202 ,count: 1 },{ id:301 ,count: 1 },{ id:302 ,count: 1 }, - { id:401 ,count: 1 },{ id:501 ,count: 1 },{ id:601 ,count: 1 },{ id:602 ,count: 1 },{ id:701 ,count: 1 },{ id:702 ,count: 1 },{ id:2001 ,count: 1 },{ id:2002 ,count: 1 }, - { id:2101 ,count: 1 },{ id:2102 ,count: 1 },{ id:2201 ,count: 1 },{ id:2202 ,count: 1 },{ id:3001 ,count: 1 },{ id:3002 ,count: 1 },{ id:3101 ,count: 1 },{ id:3102 ,count: 1 }, - { id:3201 ,count: 1 },{ id:3202 ,count: 1 },{ id:4001 ,count: 1 },{ id:4002 ,count: 1 },{ id:4101 ,count: 1 },{ id:4102 ,count: 1 },{ id:4201 ,count: 1 },{ id:4202 ,count: 1 }, - { id:5001 ,count: 1 },{ id:5002 ,count: 1 },{ id:5101 ,count: 1 },{ id:5102 ,count: 1 },{ id:5201 ,count: 1 },{ id:5202 ,count: 1 },{ id:6001 ,count: 1 },{ id:6002 ,count: 1 }, - { id:6101 ,count: 1 },{ id:6102 ,count: 1 },{ id:11001 ,count: 10000},{ id:11002 ,count: 10000 },{ id:11003,count: 10000 },{ id:11004 ,count: 100000 },{ id:11011 ,count: 100000 }, - { id:11012 ,count: 100000 },{ id:11013 ,count: 100000 },{ id:11014 ,count: 100000 },{ id:11015 ,count: 100000 },{ id:11016 ,count: 100000 },{ id:11017 ,count: 100000 }, - { id:17001 ,count: 100000 },{ id:17002 ,count: 100000 },{ id:17003 ,count: 100000 },{ id:17004 ,count: 100000 },{ id:17005 ,count: 100000 },{ id:17006 ,count: 100000 }, - { id:17007 ,count: 100000 },{ id:17008 ,count: 100000 },{ id:17009 ,count: 100000 },{ id:17010 ,count: 100000 },{ id:17011 ,count: 100000 },{ id:17012 ,count: 100000 }, - { id:17013 ,count: 100000 },{ id:17014 ,count: 100000 },{ id:17015 ,count: 100000 },{ id:17016 ,count: 100000 },{ id:17016 ,count: 100000 },{ id:17017 ,count: 100000 }, - { id:17018 ,count: 100000 },{ id:17019 ,count: 100000 },{ id:17020 ,count: 100000 },{ id:17021 ,count: 100000 },{ id:17022 ,count: 100000 },{ id:17023 ,count: 100000 }, - { id:17024 ,count: 100000 },{ id:17025 ,count: 100000 },{ id:17026 ,count: 100000 },{ id:17027 ,count: 100000 },{ id:17028 ,count: 100000 },{ id:17029 ,count: 100000 }, - { id:17030 ,count: 100000 },{ id:17031 ,count: 100000 },{ id:17032 ,count: 100000 },{ id:17033 ,count: 100000 },{ id:17034 ,count: 100000 },{ id:17035 ,count: 100000 }, - { id:17036 ,count: 100000 },{ id:17037 ,count: 100000 },{ id:17038 ,count: 100000 },{ id:17039 ,count: 100000 },{ id:17040 ,count: 100000 },{ id:17041 ,count: 100000 }, - { id:17042 ,count: 100000 },{ id:17043 ,count: 100000 },{ id:17044 ,count: 100000 },{ id:17045 ,count: 100000 },{ id:17046 ,count: 100000 },{ id:17047 ,count: 100000 }, - { id:21001 ,count: 100000 },{ id:21002 ,count: 100000 },{ id:31001 ,count: 100000 },{ id:31002 ,count: 100000 },{ id:31003 ,count: 100000 },{ id:33001 ,count: 100000 }, - { id:33002 ,count: 100000 },{ id:33003 ,count: 100000 },{ id:40001 ,count: 100000 },{ id:40002 ,count: 100000 },{ id:42001 ,count: 100000 },{ id:42002 ,count: 100000 }, - { id:50009 ,count: 100000 },{ id:50010 ,count: 100000 },{ id:60001 ,count: 100000 },{ id:60002 ,count: 100000 },{ id:4 ,count: 2 },{ id:2004 ,count: 2 },{ id:220 ,count: 2 }, - { id:2008 ,count: 2 },{ id:2012 ,count: 2 },{ id:2208 ,count: 2 },{ id:2016 ,count: 2 },{ id:2120 ,count: 2 },{ id:2220 ,count: 2 },{ id:50031, count: 1000} + { id: 25, count: 1 }, { id: 225, count: 1 }, { id: 625, count: 1 }, { id: 2025, count: 1 }, { id: 3025, count: 1 }, { id: 4025, count: 1 }, { id: 5025, count: 1 }, { id: 6025, count: 1 }, + { id: 1, count: 1 }, { id: 2, count: 1 }, { id: 101, count: 1 }, { id: 102, count: 1 }, { id: 201, count: 1 }, { id: 202, count: 1 }, { id: 301, count: 1 }, { id: 302, count: 1 }, + { id: 401, count: 1 }, { id: 501, count: 1 }, { id: 601, count: 1 }, { id: 602, count: 1 }, { id: 701, count: 1 }, { id: 702, count: 1 }, { id: 2001, count: 1 }, { id: 2002, count: 1 }, + { id: 2101, count: 1 }, { id: 2102, count: 1 }, { id: 2201, count: 1 }, { id: 2202, count: 1 }, { id: 3001, count: 1 }, { id: 3002, count: 1 }, { id: 3101, count: 1 }, { id: 3102, count: 1 }, + { id: 3201, count: 1 }, { id: 3202, count: 1 }, { id: 4001, count: 1 }, { id: 4002, count: 1 }, { id: 4101, count: 1 }, { id: 4102, count: 1 }, { id: 4201, count: 1 }, { id: 4202, count: 1 }, + { id: 5001, count: 1 }, { id: 5002, count: 1 }, { id: 5101, count: 1 }, { id: 5102, count: 1 }, { id: 5201, count: 1 }, { id: 5202, count: 1 }, { id: 6001, count: 1 }, { id: 6002, count: 1 }, + { id: 6101, count: 1 }, { id: 6102, count: 1 }, { id: 11001, count: 10000 }, { id: 11002, count: 10000 }, { id: 11003, count: 10000 }, { id: 11004, count: 100000 }, { id: 11011, count: 100000 }, + { id: 11012, count: 100000 }, { id: 11013, count: 100000 }, { id: 11014, count: 100000 }, { id: 11015, count: 100000 }, { id: 11016, count: 100000 }, { id: 11017, count: 100000 }, + { id: 17001, count: 100000 }, { id: 17002, count: 100000 }, { id: 17003, count: 100000 }, { id: 17004, count: 100000 }, { id: 17005, count: 100000 }, { id: 17006, count: 100000 }, + { id: 17007, count: 100000 }, { id: 17008, count: 100000 }, { id: 17009, count: 100000 }, { id: 17010, count: 100000 }, { id: 17011, count: 100000 }, { id: 17012, count: 100000 }, + { id: 17013, count: 100000 }, { id: 17014, count: 100000 }, { id: 17015, count: 100000 }, { id: 17016, count: 100000 }, { id: 17016, count: 100000 }, { id: 17017, count: 100000 }, + { id: 17018, count: 100000 }, { id: 17019, count: 100000 }, { id: 17020, count: 100000 }, { id: 17021, count: 100000 }, { id: 17022, count: 100000 }, { id: 17023, count: 100000 }, + { id: 17024, count: 100000 }, { id: 17025, count: 100000 }, { id: 17026, count: 100000 }, { id: 17027, count: 100000 }, { id: 17028, count: 100000 }, { id: 17029, count: 100000 }, + { id: 17030, count: 100000 }, { id: 17031, count: 100000 }, { id: 17032, count: 100000 }, { id: 17033, count: 100000 }, { id: 17034, count: 100000 }, { id: 17035, count: 100000 }, + { id: 17036, count: 100000 }, { id: 17037, count: 100000 }, { id: 17038, count: 100000 }, { id: 17039, count: 100000 }, { id: 17040, count: 100000 }, { id: 17041, count: 100000 }, + { id: 17042, count: 100000 }, { id: 17043, count: 100000 }, { id: 17044, count: 100000 }, { id: 17045, count: 100000 }, { id: 17046, count: 100000 }, { id: 17047, count: 100000 }, + { id: 21001, count: 100000 }, { id: 21002, count: 100000 }, { id: 31001, count: 100000 }, { id: 31002, count: 100000 }, { id: 31003, count: 100000 }, { id: 33001, count: 100000 }, + { id: 33002, count: 100000 }, { id: 33003, count: 100000 }, { id: 40001, count: 100000 }, { id: 40002, count: 100000 }, { id: 42001, count: 100000 }, { id: 42002, count: 100000 }, + { id: 50009, count: 100000 }, { id: 50010, count: 100000 }, { id: 60001, count: 100000 }, { id: 60002, count: 100000 }, { id: 4, count: 2 }, { id: 2004, count: 2 }, { id: 220, count: 2 }, + { id: 2008, count: 2 }, { id: 2012, count: 2 }, { id: 2208, count: 2 }, { id: 2016, count: 2 }, { id: 2120, count: 2 }, { id: 2220, count: 2 }, { id: 50031, count: 1000 } ] return items; } @@ -272,11 +275,11 @@ export enum FIGURE_UNLOCK_CONDITION { export const TERAPH_RANDOM = { MIN: 2, MAX: 4 -} +} // 道具特殊属性,如藏宝图等 export const SPECIAL_ATTR = { WAR_ID: 1, TREASURE_ID: 2, - TREASURE_TYPE: 3 - } \ No newline at end of file + TREASURE_TYPE: 3 +} \ No newline at end of file diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 69775a678..23e454889 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -474,6 +474,7 @@ export const FILENAME = { DIC_ACHIEVEMENT_BOX: 'dic_zyz_achievementBox', DIC_GACHA: 'dic_zyz_gacha', DIC_GACHA_CONTENT: 'dic_zyz_recruitContent', + DIC_GIFT_PACKAGE: 'dic_zyz_giftPackage', } export const WAR_RELATE_TABLES = [ diff --git a/shared/domain/activityField/rewardField.ts b/shared/domain/activityField/rewardField.ts new file mode 100644 index 000000000..cd52639e3 --- /dev/null +++ b/shared/domain/activityField/rewardField.ts @@ -0,0 +1,6 @@ +//奖励资源 +export interface RewardParam { + type: number; + id: number; + count: number; +} \ No newline at end of file diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index cfd69feac..2618c4e09 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -38,10 +38,10 @@ import { dicHeroScroll, preHeroScroll } from './dictionary/DicHeroScroll'; import { dicPvpOpponent } from './dictionary/DicPvpOpponent'; import { dicPvpTeamLevel } from './dictionary/DicPvpTeamLevel'; import { dicPvpRefreshConsume, maxPvpRefreshCnt } from './dictionary/DicPvpRefreshConsume'; -import { dicGkPvp, dicGkPvps } from './dictionary/DicGkPvp'; -import { dicHeroRewads } from './dictionary/DicPvpHeroReward'; -import { dicRankRewads, dicRankMax } from './dictionary/DicPvpRankReward'; -import { dicPvpBoxs } from './dictionary/DicPvpBox'; +import { dicGkPvp, dicGkPvps } from './dictionary/DicGkPvp'; +import { dicHeroRewads } from './dictionary/DicPvpHeroReward'; +import { dicRankRewads, dicRankMax } from './dictionary/DicPvpRankReward'; +import { dicPvpBoxs } from './dictionary/DicPvpBox'; import { dicGuildAuth } from './dictionary/DicGuildAuth'; import { dicCenterBase, dicEquipPriduceBase, dicBossBase, dicTrainBase, dicDonateBase, dicWishPoolBase, dicStoreBase, dicStructureConsume } from "./dictionary/DicStructure"; import { dicGuildActiveDayReward } from './dictionary/DicGuildActiveDayReward'; @@ -78,6 +78,7 @@ import { dicMainTaskStage } from "./dictionary/DicMainTaskStage"; import { dicTaskBox } from './dictionary/DicTaskBox'; import { dicGacha } from "./dictionary/DicGacha"; import { dicGachaContent, dicGachaContentHero } from "./dictionary/DicGachaContent"; +import { dicGiftPackage } from "./dictionary/DicGiftPackage"; export const gameData = { blurprtCompose: dicBlueprtCompose, @@ -108,7 +109,7 @@ export const gameData = { warJson: dicWarJson, xunbao: dicXunbao, btlBossHpSum: new Map(), - btlBossHp: new Map>(), + btlBossHp: new Map>(), blueprtToWar: new Map(), blueprt: blueprt, fashion: dicFashions, @@ -190,7 +191,8 @@ export const gameData = { gachaContentHero: dicGachaContentHero, gachaHope: getGachaHopePercent(), gachaTurntable: getGachaTurntablePercent(), - heroTransPiece: getHeroTransPiece() + heroTransPiece: getHeroTransPiece(), + giftPackage: dicGiftPackage }; // 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据 @@ -202,9 +204,9 @@ export const gameData = { export function getLvByExp(exp: number) { let curLv = 0; let entries = gameData.kingexp.entries(); - for (let [lv, {sum}] of entries) { + for (let [lv, { sum }] of entries) { curLv = lv; - if(exp < sum) break; + if (exp < sum) break; } return curLv; @@ -227,7 +229,7 @@ export function getHeroLvByExp(exp: number) { let entries = gameData.charexp.entries(); for (let [lv, sum] of entries) { curLv = lv; - if(exp < sum) break; + if (exp < sum) break; } return curLv; @@ -250,7 +252,7 @@ export function getFavourLvByExp(exp: number) { let entries = gameData.friendShipLevelMap.entries(); for (let [lv, { expSum: sum }] of entries) { curLv = lv; - if(exp < sum) break; + if (exp < sum) break; } return curLv; @@ -269,9 +271,9 @@ export function getBossHpByWarId(warId: number) { newAttr.setByWarJson(attribute, 1); let attrJson = newAttr.getReduceAttributes(); - const hp = attrJson.hp||0; + const hp = attrJson.hp || 0; if (hp > 0) { - bossHpArr.push({dataId, hp, actorId}); + bossHpArr.push({ dataId, hp, actorId }); bossHpSum += hp; } } @@ -288,10 +290,10 @@ export function getWarIdByBlueprtId(blueprtId: number) { let warId = gameData.blueprtToWar.get(blueprtId); if (!warId) { let blueprt = gameData.goods.get(blueprtId); - if(blueprt) { + if (blueprt) { const { specialAttr } = blueprt; warId = specialAttr.get(SPECIAL_ATTR.WAR_ID); - if(warId) + if (warId) gameData.blueprtToWar.set(blueprtId, warId); } } @@ -312,22 +314,22 @@ export function getMaxGradeByjobClass(jobClass: number) { } export function getJobByGradeAndClass(jobClass: number, grade: number) { - return gameData.jobClassAndgrades.get(jobClass +'_' + grade); + return gameData.jobClassAndgrades.get(jobClass + '_' + grade); } export function getFriendShipById(shipId: number, level: number) { - return gameData.friendShips.get(shipId +'_' + level); + return gameData.friendShips.get(shipId + '_' + level); } -export function getGoodById(gid:number) { +export function getGoodById(gid: number) { return gameData.goods.get(gid); } -export function getJewelById(gid:number) { +export function getJewelById(gid: number) { return gameData.jewels.get(gid); } -export function getHeroEquipByClassId(classId:number) { +export function getHeroEquipByClassId(classId: number) { return gameData.dicHeroEquip.get(classId); } @@ -342,7 +344,7 @@ export function getTitle(titleLv: number) { } export function getTeraph(id: number, grade: number) { - const teraphInfo = gameData.teraphs.get(id +'_'+ grade); + const teraphInfo = gameData.teraphs.get(id + '_' + grade); return teraphInfo; } @@ -361,21 +363,21 @@ export function getSuit(id: number) { return suitInfo; } -export function getFuncsSwitch(id:number) { +export function getFuncsSwitch(id: number) { const funcInfo = gameData.funcsSwitch.get(id); return funcInfo; } export function getPLvByScore(score: number) { let lv = 0; - for(let {teamLv, topLineupMin, topLineupMax} of gameData.pvpTeamLevel) { - if(score >= topLineupMin) lv = teamLv; - if(score < topLineupMax) break; + for (let { teamLv, topLineupMin, topLineupMax } of gameData.pvpTeamLevel) { + if (score >= topLineupMin) lv = teamLv; + if (score < topLineupMax) break; } return lv; } -export function getPvpGkByWarId (warId: number) { +export function getPvpGkByWarId(warId: number) { return gameData.pvpGk.get(warId); } @@ -426,17 +428,17 @@ export function getTrainBaseByLv(lv: number) { export function getGuildActiveWeekReward(rank: number) { let result = gameData.guildActiveWeekReward.find(cur => { - let {rankMax, rankMin} = cur; + let { rankMax, rankMin } = cur; return rank >= rankMin && rank <= (rankMax || rankMax == -1); }); let reward = new Array(); - if(result) reward = result.reward; + if (result) reward = result.reward; return reward; } export function getGuildActiveByIdAndType(id: number, type: number) { let dicWay = gameData.guildActiveWays.get(id); - if(!dicWay) return 0; + if (!dicWay) return 0; return dicWay.activePoint.get(type.toString()); } export function getArmyDevelopConsumeById(id: number) { @@ -465,9 +467,9 @@ export function getArmyWishPoolBaseByLv(lv: number) { export function getFriendLvByExp(exp: number) { let resultLv = 1; - for(let [lv, {sum}] of gameData.roleFriendLv.entries()) { + for (let [lv, { sum }] of gameData.roleFriendLv.entries()) { resultLv = lv; - if(exp < sum) break; + if (exp < sum) break; } return resultLv; } @@ -479,9 +481,9 @@ export function getFriendLvByExp(exp: number) { export function getDicFriendByLv(lv: number) { let dicFriend: DicRoleFriend; let entries = gameData.roleFriend.entries(); - for (let [dicLv, dic ] of entries) { + for (let [dicLv, dic] of entries) { dicFriend = dic; - if(lv > dicLv) break; + if (lv > dicLv) break; } return dicFriend; @@ -494,8 +496,8 @@ export function getDicFriendByLv(lv: number) { export function getTodayGuildActivity() { let today = getCurDay(); let dic: DicGuildActivity; - for(let [_id, dicGuildActivity] of gameData.guildActivity) { - if(dicGuildActivity.openDay.includes(today)) { + for (let [_id, dicGuildActivity] of gameData.guildActivity) { + if (dicGuildActivity.openDay.includes(today)) { dic = dicGuildActivity; break; } @@ -509,11 +511,11 @@ export function getTodayGuildActivity() { * @param rank 排名 */ export function getGuildAuctionRewards(aid: number, rank: number) { - let ranksReward = gameData.guildAuction.get(aid)||[]; + let ranksReward = gameData.guildAuction.get(aid) || []; let dic = ranksReward.find(cur => { return rank >= cur.min && (rank <= cur.max || cur.max == 0); }); - return dic?dic.rewards: new Array(); + return dic ? dic.rewards : new Array(); } /** @@ -523,11 +525,11 @@ export function getGuildAuctionRewards(aid: number, rank: number) { * @param rank 成员在军团内部排名 */ export function getCityActivityRewards(type: number, guildRank: number, rank: number) { - let ranksReward = gameData.cityActivityReward.get(type)||[]; + let ranksReward = gameData.cityActivityReward.get(type) || []; let dic = ranksReward.find(cur => { return cur.guildRank == guildRank && (rank >= cur.min && (rank <= cur.max || cur.max == 0)); }); - return dic?dic.honour: 0; + return dic ? dic.honour : 0; } function decodeRaceActivityEncounter() { @@ -535,8 +537,8 @@ function decodeRaceActivityEncounter() { let map = decodeIdCntArrayStr(str, 1); let newMap = new Map(); let eventNum = 0; - for(let [key, value] of map) { - if(value == RACE_EVENT_TYPE.EVENT) eventNum ++; + for (let [key, value] of map) { + if (value == RACE_EVENT_TYPE.EVENT) eventNum++; newMap.set(parseInt(key), value); } return { events: newMap, eventNum }; @@ -558,14 +560,14 @@ function decodeRaceNormalItems() { } function decodeRaceEventItems() { - let str = GUILDACTIVITY.RACEACTIVITY_EVENT_ITEMS||""; + let str = GUILDACTIVITY.RACEACTIVITY_EVENT_ITEMS || ""; return parseGoodStr(str); } export function getRaceEventItems() { let items = gameData.raceNormalItems; let result = new Array(); - for(let {id, min, max} of items) { + for (let { id, min, max } of items) { let count = getRandValueByMinMax(min, max, 0); result.push({ id, count }); } @@ -581,7 +583,7 @@ export function getDicGachaFloor(id: number) { export function getRandExpedition(cnt = 1) { let arr: DicExpedition[] = []; - for(let [_id, dicExpedition] of gameData.expedition) { + for (let [_id, dicExpedition] of gameData.expedition) { arr.push(dicExpedition); } return getRandEelm(arr, cnt); @@ -606,7 +608,7 @@ function getGachaTurntablePercent() { function getHeroTransPiece() { let map = decodeIdCntArrayStr(RECRUIT.RECRUIT_CHANGE_SHARD, 1); let newMap = new Map(); - for(let [id, count] of map) { + for (let [id, count] of map) { newMap.set(parseInt(id), count); } return newMap diff --git a/shared/pubUtils/dictionary/DicGiftPackage.ts b/shared/pubUtils/dictionary/DicGiftPackage.ts new file mode 100644 index 000000000..4e89a9155 --- /dev/null +++ b/shared/pubUtils/dictionary/DicGiftPackage.ts @@ -0,0 +1,40 @@ +// 礼包奖励表 +import { decodeArrayListStr, readJsonFile } from '../util'; +import { FILENAME } from '../../consts'; +import { RewardParam } from '../../domain/activityField/rewardField'; + +export interface DicGiftPackage { + // 礼包id + readonly id: number; + // 礼包类型 GIFT_PACKAGE_TYPE 1.全部;2.选择;3.随机 + readonly type: number; + // 个数 type=1时,无效 + readonly count: number; + // 礼包内容 + readonly reward: Array; + // 描述 + readonly des: string; + +} + +const str = readJsonFile(FILENAME.DIC_GIFT_PACKAGE); +let arr = JSON.parse(str); + +export const dicGiftPackage = new Map(); +arr.forEach(o => { + o.reward = parseAttr(o.reward); + dicGiftPackage.set(o.id, o); +}); + +function parseAttr(str: string) { + let result = new Array<{ type: number, id: number, count: number }>(); + if (!str) return result; + let decodeArr = decodeArrayListStr(str); + 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 +} \ No newline at end of file diff --git a/shared/resource/jsons/dic_zyz_giftPackage.json b/shared/resource/jsons/dic_zyz_giftPackage.json new file mode 100644 index 000000000..6284e7644 --- /dev/null +++ b/shared/resource/jsons/dic_zyz_giftPackage.json @@ -0,0 +1,23 @@ +[ + { + "id": 1, //礼包id + "des": "成年人,全都要", + "type": 1, //礼包类型 + "count": 3, //奖励内容个数 + "reward": "2&1&1|2&7&1|2&33028&1" //所有奖励 奖励类型&物品id&数量 + }, + { + "id": 2, + "des": "小学生才做的选择题", + "type": 2, + "count": 1, + "reward": "2&1&1|2&7&1|2&33028&1" + }, + { + "id": 3, + "des": "别人说了算", + "type": 3, + "count": 1, + "reward": "2&1&1|2&7&1|2&33028&1" + } +] \ No newline at end of file