活动:支持礼包兑换

This commit is contained in:
qiaoxin
2021-04-27 20:52:42 +08:00
parent 2996a899e2
commit 2ec957c619
8 changed files with 326 additions and 131 deletions

View File

@@ -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<number> = []) {
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<RewardParam>) {
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<RewardParam>) {
let goods: Array<RewardInter> = [];
let heroes: Array<CreateHeroParam> = [];
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<number>) {
let selectedReward = [];
return selectedReward;
}
function randomSelectedData(count: number) {
let arr = [];
return arr;
}

View File

@@ -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, // 多随*
}

View File

@@ -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<number, {id: number, name: string, table: string, type?: number, isCurrency?: boolean, equipJewel?: number}>();
for(let obj of itid_array) {
export const ITID = new Map<number, { id: number, name: string, table: string, type?: number, isCurrency?: boolean, equipJewel?: number }>();
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<number, {gid: number, name: string, type: string}>();
export const CURRENCY = new Map<number, { gid: number, name: string, type: string }>();
export const CURRENCY_BY_TYPE = new Map<string, number>();
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<number, number>([
[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
}
TREASURE_TYPE: 3
}

View File

@@ -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 = [

View File

@@ -0,0 +1,6 @@
//奖励资源
export interface RewardParam {
type: number;
id: number;
count: number;
}

View File

@@ -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<number, number>(),
btlBossHp: new Map<number, Array<{dataId: number, hp: number, actorId: number}>>(),
btlBossHp: new Map<number, Array<{ dataId: number, hp: number, actorId: number }>>(),
blueprtToWar: new Map<number, number>(),
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<RewardInter>();
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<RewardInter>();
return dic ? dic.rewards : new Array<RewardInter>();
}
/**
@@ -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<number, number>();
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<RewardInter>();
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<number, number>();
for(let [id, count] of map) {
for (let [id, count] of map) {
newMap.set(parseInt(id), count);
}
return newMap

View File

@@ -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<RewardParam>;
// 描述
readonly des: string;
}
const str = readJsonFile(FILENAME.DIC_GIFT_PACKAGE);
let arr = JSON.parse(str);
export const dicGiftPackage = new Map<number, DicGiftPackage>();
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
}

View File

@@ -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"
}
]