活动:支持礼包兑换
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
@@ -17,4 +17,14 @@ export enum ACTIVITY_RESOURCES_TYPE {
|
|||||||
HERO = 1, // 英雄表
|
HERO = 1, // 英雄表
|
||||||
GOODS = 2, // 物品表
|
GOODS = 2, // 物品表
|
||||||
RMB = 3, // RMB
|
RMB = 3, // RMB
|
||||||
|
GIFTPACKAGE = 4, //礼包
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 礼包类型
|
||||||
|
*/
|
||||||
|
export enum GIFT_PACKAGE_TYPE {
|
||||||
|
ALL = 1, // 全部
|
||||||
|
SELECTED_X = 2, // 多选*
|
||||||
|
RANDOM_X = 3, // 多随*
|
||||||
}
|
}
|
||||||
@@ -31,6 +31,7 @@ export const CONSUME_TYPE = {
|
|||||||
HEAD: 11, // 头像
|
HEAD: 11, // 头像
|
||||||
FRAME: 12, // 相框
|
FRAME: 12, // 相框
|
||||||
SPINE: 13, // 形象
|
SPINE: 13, // 形象
|
||||||
|
GIFT_PACKAGE: 14, // 礼包
|
||||||
};
|
};
|
||||||
|
|
||||||
export enum ROLE_TERAPH {
|
export enum ROLE_TERAPH {
|
||||||
@@ -139,7 +140,9 @@ const itid_array = [
|
|||||||
{ id: 49, name: '玩家好感道具', table: 'item', type: CONSUME_TYPE.FRIEND_FAVOUR },
|
{ id: 49, name: '玩家好感道具', table: 'item', type: CONSUME_TYPE.FRIEND_FAVOUR },
|
||||||
{ id: 50, name: '形象', table: 'role', type: CONSUME_TYPE.HEAD },
|
{ id: 50, name: '形象', table: 'role', type: CONSUME_TYPE.HEAD },
|
||||||
{ id: 51, name: '相框', table: 'role', type: CONSUME_TYPE.FRAME },
|
{ 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 }>();
|
export const ITID = new Map<number, { id: number, name: string, table: string, type?: number, isCurrency?: boolean, equipJewel?: number }>();
|
||||||
|
|||||||
@@ -474,6 +474,7 @@ export const FILENAME = {
|
|||||||
DIC_ACHIEVEMENT_BOX: 'dic_zyz_achievementBox',
|
DIC_ACHIEVEMENT_BOX: 'dic_zyz_achievementBox',
|
||||||
DIC_GACHA: 'dic_zyz_gacha',
|
DIC_GACHA: 'dic_zyz_gacha',
|
||||||
DIC_GACHA_CONTENT: 'dic_zyz_recruitContent',
|
DIC_GACHA_CONTENT: 'dic_zyz_recruitContent',
|
||||||
|
DIC_GIFT_PACKAGE: 'dic_zyz_giftPackage',
|
||||||
}
|
}
|
||||||
|
|
||||||
export const WAR_RELATE_TABLES = [
|
export const WAR_RELATE_TABLES = [
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
//奖励资源
|
||||||
|
export interface RewardParam {
|
||||||
|
type: number;
|
||||||
|
id: number;
|
||||||
|
count: number;
|
||||||
|
}
|
||||||
@@ -78,6 +78,7 @@ import { dicMainTaskStage } from "./dictionary/DicMainTaskStage";
|
|||||||
import { dicTaskBox } from './dictionary/DicTaskBox';
|
import { dicTaskBox } from './dictionary/DicTaskBox';
|
||||||
import { dicGacha } from "./dictionary/DicGacha";
|
import { dicGacha } from "./dictionary/DicGacha";
|
||||||
import { dicGachaContent, dicGachaContentHero } from "./dictionary/DicGachaContent";
|
import { dicGachaContent, dicGachaContentHero } from "./dictionary/DicGachaContent";
|
||||||
|
import { dicGiftPackage } from "./dictionary/DicGiftPackage";
|
||||||
|
|
||||||
export const gameData = {
|
export const gameData = {
|
||||||
blurprtCompose: dicBlueprtCompose,
|
blurprtCompose: dicBlueprtCompose,
|
||||||
@@ -190,7 +191,8 @@ export const gameData = {
|
|||||||
gachaContentHero: dicGachaContentHero,
|
gachaContentHero: dicGachaContentHero,
|
||||||
gachaHope: getGachaHopePercent(),
|
gachaHope: getGachaHopePercent(),
|
||||||
gachaTurntable: getGachaTurntablePercent(),
|
gachaTurntable: getGachaTurntablePercent(),
|
||||||
heroTransPiece: getHeroTransPiece()
|
heroTransPiece: getHeroTransPiece(),
|
||||||
|
giftPackage: dicGiftPackage
|
||||||
};
|
};
|
||||||
|
|
||||||
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user