✨ feat(百家争鸣):祈灵 更新至 eb9f941ae

This commit is contained in:
luying
2023-08-25 14:57:06 +08:00
parent f8349849eb
commit e6665208e1
13 changed files with 417 additions and 137 deletions
@@ -0,0 +1,65 @@
import { Application, BackendSession, HandlerService, } from "pinus";
import { getPlayerAuthorGachaDataShow } from "../../../services/activity/authorGachaService";
import { parseGoodStrWithType, resResult } from "../../../pubUtils/util";
import { ITEM_CHANGE_REASON, STATUS } from "../../../consts";
import { AuthorGachaData } from "../../../domain/activityField/authorGachaField";
import { addReward } from "../../../services/activity/giftPackageService";
import { ActivityAuthorGachaRecModel } from "../../../db/AuthorGachaRec";
export default function (app: Application) {
new HandlerService(app, {});
return new AuthorGachaHandler(app);
}
export class AuthorGachaHandler {
constructor(private app: Application) {
}
/**
* 祈灵获取数据
* @param msg
* @param session
* @returns
*/
async getData(msg: { activityId: number }, session: BackendSession) {
const roleId: string = session.get('roleId');
const serverId: number = session.get('serverId');
const { activityId } = msg;
let playerData = await getPlayerAuthorGachaDataShow(activityId, serverId, roleId);
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
return resResult(STATUS.SUCCESS, { ...playerData });
}
/**
* 祈灵获取奖励
* @param msg
* @param session
* @returns
*/
async receiveBox(msg: { activityId: number, count: number }, session: BackendSession) {
const roleId: string = session.get('roleId');
const roleName: string = session.get('roleName');
const serverId: number = session.get('serverId');
const sid: string = session.get('sid');
const { activityId, count } = msg;
let playerData = await getPlayerAuthorGachaDataShow(activityId, serverId, roleId);
if (!playerData) return resResult(STATUS.ACTIVITY_MISSING);
let box = playerData.box.find(cur => cur.count == count);
if (box == undefined || box.hasReceived) return resResult(STATUS.ACTIVITY_REWARDED);
box.hasReceived = true;
let rewards = parseGoodStrWithType(box.rewards);
let result = await addReward(roleId, roleName, sid, serverId, rewards, ITEM_CHANGE_REASON.AUTHOR_GACHA_REWARD);
await ActivityAuthorGachaRecModel.record(serverId, activityId, playerData.roundIndex, roleId, count);
return resResult(STATUS.SUCCESS, { goods: result.goods, curBox: playerData.box })
}
}
@@ -19,6 +19,8 @@ import { isHeroHidden } from "../../../services/dataService";
import { GachaResultIndb } from "../../../domain/activityField/gachaField";
import { CreateHeroParam } from "../../../domain/roleField/hero";
import { ItemInter, RewardInter } from "../../../pubUtils/interface";
import { getPlayerAuthorGachaData } from "../../../services/activity/authorGachaService";
import { ActivityAuthorGachaRecModel, ActivityAuthorGachaRecModelType } from "../../../db/AuthorGachaRec";
export default function (app: Application) {
new HandlerService(app, {});
@@ -113,6 +115,14 @@ export class GachaHandler {
await UserGachaRecModel.createRec(roleId, gachaId, activityId, count, resultList);
if(dicGacha.isTask) await checkTaskInGacha(serverId, roleId, sid, count, resultHeroes, resultList, false);
//百家争鸣祈灵
let playerData = await getPlayerAuthorGachaData(activityId, serverId, roleId);
let dbAuthorGacha:ActivityAuthorGachaRecModelType;
if (playerData) {
dbAuthorGacha = await ActivityAuthorGachaRecModel.updateGachaCnt(serverId, activityId, playerData.roundIndex, roleId, gachaId, count);
}
return resResult(STATUS.SUCCESS, {
gachaId, activityId,
isFree: freeCount < newDicGacha.free.count, cost: newDicGacha.cost,
@@ -120,7 +130,8 @@ export class GachaHandler {
// heroes: resultHeroes,
addHeros: heroes,
result: resultList,
remainFloor: getGachaRemainFloor(gachaId, floor)
remainFloor: getGachaRemainFloor(gachaId, floor),
authorGachaCnt:dbAuthorGacha?.gachaCnt||0,
});
}
@@ -51,6 +51,7 @@ import { getPlayerDragonBoatDataShow } from './dragonBoatService';
import { getPlayerEntertainDataShow } from './entertainService';
import { getPlayerQixiDataShow } from './qixiService';
import { getPlayerMidAutumnDataShow } from './midAutumnService';
import { getPlayerAuthorGachaDataShow } from './authorGachaService';
/**
* 获取活动数据
@@ -292,6 +293,12 @@ export async function getActivity(serverId: number, roleId: string, uid: number,
activityData = await getPlayerMidAutumnDataShow(activityId, serverId, roleId);
break;
}
case ACTIVITY_TYPE.AUTHOR_GACHA:
{
activityData = await getPlayerAuthorGachaDataShow(activityId, serverId, roleId);
break;
}
default: {
console.log('未知活动类型.........', activityType)
break;
@@ -0,0 +1,33 @@
import { ACTIVITY_TYPE } from "../../consts/constModules/activityConst";
import { ActivityAuthorGachaRecModel } from "../../db/AuthorGachaRec";
import { UserGachaModel } from "../../db/UserGacha";
import { AuthorGachaData } from "../../domain/activityField/authorGachaField";
import { getGachaRemainFloor } from "../../pubUtils/util";
import { getRoleCreateTime, getServerCreateTime } from "../redisService";
import { getActivityById } from "./activityService";
export async function getPlayerAuthorGachaData(activityId: number, serverId: number, roleId: string) {
let activityData = await getActivityById(activityId);
let createTime = await getRoleCreateTime(roleId);
let serverTime = await getServerCreateTime(serverId);
let playerData = new AuthorGachaData(activityData, createTime, serverTime);
if ((playerData?.type || 0) != ACTIVITY_TYPE.AUTHOR_GACHA) return
let playerRecord = await ActivityAuthorGachaRecModel.findData(serverId, activityId, playerData.roundIndex, roleId);
playerData.setPlayerRecords(playerRecord);
return playerData;
}
export async function getUseGachaData(activityId: number, roleId: string, playerData: AuthorGachaData) {
let userGacha = await UserGachaModel.findByRole(roleId, playerData.gachaId, activityId);
let count = userGacha?.count || 0;
let remainFloor = getGachaRemainFloor(playerData.gachaId, userGacha?.floor || []);
return { count, remainFloor }
}
export async function getPlayerAuthorGachaDataShow(activityId: number, serverId: number, roleId: string) {
let playerData = await getPlayerAuthorGachaData(activityId, serverId, roleId);
if (playerData && playerData.canShow && playerData.canShow()) {
return { ...playerData.getShowResult(), ...await getUseGachaData(activityId, roleId, playerData) };
}
return null
}
+20 -10
View File
@@ -761,7 +761,7 @@ export function checkRouteParam(route: string, msg: any) {
for (let { actorId, dataId, order, ai } of heroes) {
if (!checkNaturalNumbers(actorId, dataId, order, ai)) return false;
}
if(!checkCombo(combo)) return false
if (!checkCombo(combo)) return false
break;
}
case "battle.pvpHandler.receiveBox":
@@ -822,7 +822,7 @@ export function checkRouteParam(route: string, msg: any) {
for (let { actorId, dataId, order } of msg.heroes) {
if (!checkNaturalNumbers(actorId, dataId, order)) return false;
}
if(!checkCombo(msg.combo)) return false
if (!checkCombo(msg.combo)) return false
break;
}
case "battle.ladderHandler.buyCnt":
@@ -2108,6 +2108,16 @@ export function checkRouteParam(route: string, msg: any) {
if (!checkNaturalNumbers(msg.activityId, msg.count)) return false;
break;
}
case 'activity.authorGachaHandler.getData':
{
if (!checkNaturalNumbers(msg.activityId)) return false;
break;
}
case 'activity.authorGachaHandler.receiveBox':
{
if (!checkNaturalNumbers(msg.activityId, msg.count)) return false;
break;
}
case 'activity.activityHandler.debugActivityMemory':
case 'activity.popUpShopHandler.debugPushPopUpShop':
case 'activity.popUpShopHandler.debugPushPopUpInterval':
@@ -2334,14 +2344,14 @@ function checkSeqId(...seqIds: (number | string)[]) {
return true;
}
function checkCombo(combo: {groupId: number, levelList: number[]}[]) {
if(combo) {
if(!isArray(combo)) return false;
for(let {groupId, levelList} of combo) {
if(!isNumber(groupId)) return false;
if(!isArray(levelList)) return false;
for(let lv of levelList) {
if(!isNumber(lv)) return false;
function checkCombo(combo: { groupId: number, levelList: number[] }[]) {
if (combo) {
if (!isArray(combo)) return false;
for (let { groupId, levelList } of combo) {
if (!isNumber(groupId)) return false;
if (!isArray(levelList)) return false;
for (let lv of levelList) {
if (!isNumber(lv)) return false;
}
}
}