活动:新武将抽卡活动

This commit is contained in:
qiaoxin
2021-06-23 20:56:19 +08:00
parent 03c977ec40
commit 58d8aacb4d
12 changed files with 388 additions and 15 deletions

View File

@@ -0,0 +1,133 @@
import { Application, BackendSession } from 'pinus';
import { getRandEelmWithWeight, resResult } from '../../../pubUtils/util';
import { STATUS } from '../../../consts';
import { getPlayerNewHeroGachaData } from '../../../services/activity/newHeroGachaService';
import { RoleModel } from '../../../db/Role';
import { gameData } from '../../../pubUtils/data';
import { HeroModel } from '../../../db/Hero';
import { RewardInter } from '../../../pubUtils/interface';
import { CreateHeroParam } from '../../../domain/roleField/hero';
import { GachaResult } from '../../../domain/activityField/gachaField';
import { getResultFromContentIdNewHeroActivity } from '../../../services/activity/gachaService';
import { transPiece } from '../../../pubUtils/itemUtils';
import { addItems, createHeroes, handleCost } from '../../../services/rewardService';
import { ActivityNewHeroGachaModel } from '../../../db/ActivityNewHeroGacha';
// import { NewHeroGachaItem } from '../../../domain/activityField/newHeroGachaField';
export default function (app: Application) {
return new NewHeroGachaHandler(app);
}
export class NewHeroGachaHandler {
constructor(private app: Application) {
}
/************************新将擢迁, 新武将抽卡****************************/
/**
* @description 获取新武将抽卡活动数据
* @param {{ activityId: number}} msg
* @param {BackendSession} session
* @memberof NewHeroGachaHandler
*/
async getNewHeroGachaActivity(msg: { activityId: number }, session: BackendSession) {
const { activityId } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
let playerData = await getPlayerNewHeroGachaData(activityId, serverId, roleId)
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
return resResult(STATUS.SUCCESS, playerData);
}
/**
* @description 抽卡
* @param {{ activityId: number, hid: number, count: number}} msg
* @param {BackendSession} session
* @memberof NewHeroGachaHandler
*/
async pull(msg: { activityId: number, hid: number, count: number }, session: BackendSession) {
const { activityId, hid, count } = msg;
const roleId = session.get('roleId');
const serverId = session.get('serverId');
const sid = session.get('sid');
const roleName = session.get('roleName');
const funcs = session.get('funcs');
let playerData = await getPlayerNewHeroGachaData(activityId, serverId, roleId)
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
let item = playerData.findItem(hid);
if (!item) {
return resResult(STATUS.ACTIVITY_DATA_ERROR);
}
let { lv } = await RoleModel.findByRoleId(roleId);
let userHeroes = await HeroModel.findByRole(roleId);
let items: RewardInter[] = [], heroInfo: CreateHeroParam[] = [], resultList: GachaResult[] = [];
let floorReward = false;//是否中保底奖励
let activityData = [];//活动需要统计抽中的英雄、碎片品质
for (let i = 0; i < count; i++) {
// // 按照一般概率抽出
let { dic: { id: base, goodId } } = getRandEelmWithWeight(item.percent);//{"dic":{"id":1,"weight":59,"goodId":1},"index":0}
if (base == item.floorReward) {
floorReward = true;
}
console.log('dddddddddddddddddd', JSON.stringify(base));
// let contentId = getFloorResult(gachaId, base, floor);
// if (contentId == false) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let result = getResultFromContentIdNewHeroActivity(base, goodId, lv);
console.log('ddddddddddd', JSON.stringify(result))
if (result.hid > 0) {
let hasHero = userHeroes.find(cur => cur.hid == result.hid);
if (hasHero) { // 已有转换为碎片
activityData.push({ hid: hasHero.hid, quality: hasHero.quality });
let { pieceId, count } = transPiece(result.hid);
result.transferToPiece(pieceId, count);
items.push({ id: pieceId, count });
} else {
heroInfo.push({ hid: result.hid, count: 1 })//默认1个英雄
}
} else {
items.push({ id: result.id, count: result.count });
}
resultList.push(result);
}
// 消耗东西
let cost = item.cost.map(cur => { return { id: cur.id, count: cur.count * count } });
let costResult = await handleCost(roleId, sid, cost);
if (!costResult) return resResult(STATUS.ACTIVITY_RES_NOT_ENOUGH);
//记录数据
await ActivityNewHeroGachaModel.addRecord(serverId, activityId, roleId, hid, count, JSON.stringify(resultList));
if (floorReward) {//抽中保底奖励,重置统计次数
await ActivityNewHeroGachaModel.resetCount(serverId, activityId, roleId, hid, 0);
}
// 给东西
let { heroes } = await createHeroes(roleId, roleName, sid, serverId, funcs, heroInfo);
await addItems(roleId, roleName, sid, items);
// // 任务
// await checkTask(roleId, sid, funcs, TASK_TYPE.GASHA, count, true, {});
// //活动统计
// await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.GASHA, count)
// for (let hero of heroes) {
// activityData.push({ hid: hero.hid, quality: hero.quality });
// }
// await checkActivityTask(serverId, sid, funcs, roleId, TASK_TYPE.GACHA_QUALITY_COUNT, count, { heroes: activityData })
return resResult(STATUS.SUCCESS, {
hid, activityId, count,
heroes, result: resultList
});
}
}