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

5
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,5 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/

View File

@@ -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 })
}
}

View File

@@ -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,
});
}

View File

@@ -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;

View File

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

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;
}
}
}

View File

@@ -4,6 +4,8 @@ import { expect } from 'chai';
import { Client } from './Client';
import { checkSuccessResponse } from './CheckPatten';
import { ACTIVITY_TYPE, CURRENCY_BY_TYPE, CURRENCY_TYPE, DEBUG_MAGIC_WORD, STATUS } from '../app/consts';
import * as util from 'util';
describe('活动测试', function () {
let pinusClient: PinusWSClient;
let playerGroupArray: [] = [];
@@ -25,167 +27,190 @@ describe('活动测试', function () {
done();
});
it('获取所有活动', function (done) {
pinusClient.request('activity.activityHandler.getAllOpenActivity', {}, (res) => {
checkSuccessResponse(res);
playerGroupArray = res.data.playerGroupArray;
console.log(`${playerGroupArray.length}个合集数据`)
// it('获取所有活动', function (done) {
// pinusClient.request('activity.activityHandler.getAllOpenActivity', {}, (res) => {
// console.log("x-x-x-x-x-x-x--x-x-x-x res", res)
// checkSuccessResponse(res);
// playerGroupArray = res.data.playerGroupArray;
// console.log(`${playerGroupArray.length}个合集数据`)
// done();
// });
// });
it('获得祈灵活动数据', function (done) {
pinusClient.request('activity.authorGachaHandler.getData', { activityId: 1296 }, (res) => {
console.log('-x-x--x-x-x-x-x-x-x-x-x- res', util.inspect(res, { depth: null }));
done();
});
});
it('签到活动-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.signInHandler.getSignInActivity', ACTIVITY_TYPE.SIGN_IN, done);
});
it('签到活动(高级)-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.signInHandler.getSignInActivity', ACTIVITY_TYPE.SIGN_IN_VIP, done);
});
// it('获得祈灵活动数据', function (done) {
// pinusClient.request('activity.gachaHandler.pull', { activityId: 1296, gachaId: 12, count: 1 }, (res) => {
// console.log('-x-x--x-x-x-x-x-x-x-x-x- res', util.inspect(res, { depth: null }));
// done();
// });
// });
it('主线成长基金-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_MAIN, done);
});
// it('获得祈灵活动数据', function (done) {
// pinusClient.request('activity.authorGachaHandler.receiveBox', { activityId: 1296, count: 100000 }, (res) => {
// console.log('-x-x--x-x-x-x-x-x-x-x-x- res', util.inspect(res, { depth: null }));
// done();
// });
// });
it('主线成长基金高阶-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP, done);
});
// it('签到活动-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.signInHandler.getSignInActivity', ACTIVITY_TYPE.SIGN_IN, done);
// });
it('镇念塔成长基金-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_TOWER, done);
});
// it('签到活动(高级)-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.signInHandler.getSignInActivity', ACTIVITY_TYPE.SIGN_IN_VIP, done);
// });
it('镇念塔成长基金高阶-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP, done);
});
// it('主线成长基金-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_MAIN, done);
// });
it('精英成长基金-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, done);
});
// it('主线成长基金高阶-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_MAIN_VIP, done);
// });
it('精英成长基金高阶-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP, done);
});
// it('镇念塔成长基金-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_TOWER, done);
// });
it('30日目标活动-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.thirtyDaysHandler.getThirtyDaysActivity', ACTIVITY_TYPE.THIRTY_DAYS, done);
});
// it('镇念塔成长基金高阶-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_TOWER_VIP, done);
// });
it.skip('自选商店-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.selfServiceShopHandler.getSelfServiceShopActivity', ACTIVITY_TYPE.SELF_SERVICE_SHOP, done);
});
// it('精英成长基金-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE, done);
// });
it('首充礼包-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.firstGiftHandler.getFirstGiftActivity', ACTIVITY_TYPE.FIRST_GIFT, done);
});
// it('精英成长基金高阶-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.growthFundHandler.getGrowthFundActivity', ACTIVITY_TYPE.GROWTH_FUND_MAIN_ELITE_VIP, done);
// });
it.skip('新手限定RMB购买礼包-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.limitPackageHandler.getNewPlayerLimitPackageActivity', ACTIVITY_TYPE.NEW_PLAYER_LIMIT_PACKAGE, done);
});
// it('30日目标活动-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.thirtyDaysHandler.getThirtyDaysActivity', ACTIVITY_TYPE.THIRTY_DAYS, done);
// });
it('每日限购礼包-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.limitPackageHandler.getLimitPackageActivity', ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_DAILY, done);
});
// it.skip('自选商店-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.selfServiceShopHandler.getSelfServiceShopActivity', ACTIVITY_TYPE.SELF_SERVICE_SHOP, done);
// });
it('每周限购礼包-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.limitPackageHandler.getLimitPackageActivity', ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_WEEKLY, done);
});
// it('首充礼包-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.firstGiftHandler.getFirstGiftActivity', ACTIVITY_TYPE.FIRST_GIFT, done);
// });
it('元宝充值商店-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.yuanbaoShopHandler.getShopActivity', ACTIVITY_TYPE.YUAN_BAO_SHOP, done);
});
// it.skip('新手限定RMB购买礼包-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.limitPackageHandler.getNewPlayerLimitPackageActivity', ACTIVITY_TYPE.NEW_PLAYER_LIMIT_PACKAGE, done);
// });
it('月卡1普通-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.monthlyTicketHandler.getMonthlyTicketActivity', ACTIVITY_TYPE.MONTHLY_TICKET_1, done);
});
// it('每日限购礼包-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.limitPackageHandler.getLimitPackageActivity', ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_DAILY, done);
// });
it('月卡2至尊-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.monthlyTicketHandler.getMonthlyTicketActivity', ACTIVITY_TYPE.MONTHLY_TICKET_2, done);
});
// it('每周限购礼包-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.limitPackageHandler.getLimitPackageActivity', ACTIVITY_TYPE.LIMIT_PACKAGE_SHOP_WEEKLY, done);
// });
it('累计充值RMB活动-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.rechargeMoneyHandler.getRechargeMoneyActivity', ACTIVITY_TYPE.RECHARGE_MONEY, done);
});
// it('元宝充值商店-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.yuanbaoShopHandler.getShopActivity', ACTIVITY_TYPE.YUAN_BAO_SHOP, done);
// });
it('每日特惠RMB购买-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.dailyRMBGiftsHandler.getDailyRMBGiftsActivity', ACTIVITY_TYPE.DAILY_RMB_GIFTS, done);
});
// it('月卡1普通-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.monthlyTicketHandler.getMonthlyTicketActivity', ACTIVITY_TYPE.MONTHLY_TICKET_1, done);
// });
it.skip('寻宝骑兵活动-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.treasureHuntHandler.getTreasureHuntActivity', ACTIVITY_TYPE.TREASURE_HUNT, done);
});
// it('月卡2至尊-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.monthlyTicketHandler.getMonthlyTicketActivity', ACTIVITY_TYPE.MONTHLY_TICKET_2, done);
// });
it('弹出商店-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.popUpShopHandler.getPopUpShopActivity', ACTIVITY_TYPE.POP_UP_SHOP, done);
});
// it('累计充值RMB活动-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.rechargeMoneyHandler.getRechargeMoneyActivity', ACTIVITY_TYPE.RECHARGE_MONEY, done);
// });
it('新手签到活动-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.signInHandler.getSignInActivity', ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN, done);
});
// it('每日特惠RMB购买-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.dailyRMBGiftsHandler.getDailyRMBGiftsActivity', ACTIVITY_TYPE.DAILY_RMB_GIFTS, done);
// });
it('vip累计充值RMB活动-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.vipRechargeMoneyHandler.getVipRechargeMoneyActivity', ACTIVITY_TYPE.VIP_RECHARGE_MONEY, done);
});
// it.skip('寻宝骑兵活动-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.treasureHuntHandler.getTreasureHuntActivity', ACTIVITY_TYPE.TREASURE_HUNT, done);
// });
it('通用七天乐活动-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.sevenDaysHandler.getSevenDaysActivity', ACTIVITY_TYPE.COMMON_SEVEN_DAY, done);
});
// it('弹出商店-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.popUpShopHandler.getPopUpShopActivity', ACTIVITY_TYPE.POP_UP_SHOP, done);
// });
it('每日领取免费午饭、晚饭-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.dailyMealHandler.getDailyMealActivity', ACTIVITY_TYPE.DAILY_MEAL, done);
});
// it('新手签到活动-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.signInHandler.getSignInActivity', ACTIVITY_TYPE.NEW_PLAYER_SIGN_IN, done);
// });
it('每日兑换铜钱-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.dailyCoinHandler.getDailyCoinActivity', ACTIVITY_TYPE.DAILY_COIN, done);
});
// it('vip累计充值RMB活动-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.vipRechargeMoneyHandler.getVipRechargeMoneyActivity', ACTIVITY_TYPE.VIP_RECHARGE_MONEY, done);
// });
it('每日关卡-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.dailyGKHandler.getDailyGKActivity', ACTIVITY_TYPE.DAILY_GK, done);
});
// it('通用七天乐活动-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.sevenDaysHandler.getSevenDaysActivity', ACTIVITY_TYPE.COMMON_SEVEN_DAY, done);
// });
it('通用的刷新商店-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.refreshShopHandler.getRefreshShopActivity', ACTIVITY_TYPE.REFRESH_SHOP, done);
});
// it('每日领取免费午饭、晚饭-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.dailyMealHandler.getDailyMealActivity', ACTIVITY_TYPE.DAILY_MEAL, done);
// });
it('通用的刷新任务-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.refreshTaskHandler.getRefreshTaskActivity', ACTIVITY_TYPE.REFRESH_TASK, done);
});
// it('每日兑换铜钱-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.dailyCoinHandler.getDailyCoinActivity', ACTIVITY_TYPE.DAILY_COIN, done);
// });
it('大富翁-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.activityMonopolyHandler.getMonopolyActivity', ACTIVITY_TYPE.MONOPOLY, done);
});
// it('每日关卡-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.dailyGKHandler.getDailyGKActivity', ACTIVITY_TYPE.DAILY_GK, done);
// });
it('大富翁-移动', function (done) {
if (activityId) {
requestActivity(pinusClient, 'role.heroHandler.addItem', { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.NORMAL_DICE), count: 1 })
.then((data: any) => {
checkSuccessResponse(data);
return requestActivity(pinusClient, 'activity.activityMonopolyHandler.move', { activityId: activityId, step: 0 })
})
.then((data: any) => {
checkSuccessResponse(data);
done()
})
} else {
noActivityData(done);
}
});
// it('通用的刷新商店-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.refreshShopHandler.getRefreshShopActivity', ACTIVITY_TYPE.REFRESH_SHOP, done);
// });
it('通用签到-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.signInHandler.getSignInActivity', ACTIVITY_TYPE.COMMON_SIGN_IN, done);
});
// it('通用的刷新任务-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.refreshTaskHandler.getRefreshTaskActivity', ACTIVITY_TYPE.REFRESH_TASK, done);
// });
it('新将好礼-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.newHeroGiftsHandler.getNewHeroGiftsActivity', ACTIVITY_TYPE.NEW_HERO_GIFTS, done);
});
// it('大富翁-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.activityMonopolyHandler.getMonopolyActivity', ACTIVITY_TYPE.MONOPOLY, done);
// });
it('新将演绎-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.newHeroGKHandler.getNewHeroGKActivity', ACTIVITY_TYPE.NEW_HERO_GK, done);
});
// it('大富翁-移动', function (done) {
// if (activityId) {
// requestActivity(pinusClient, 'role.heroHandler.addItem', { id: CURRENCY_BY_TYPE.get(CURRENCY_TYPE.NORMAL_DICE), count: 1 })
// .then((data: any) => {
// checkSuccessResponse(data);
// return requestActivity(pinusClient, 'activity.activityMonopolyHandler.move', { activityId: activityId, step: 0 })
// })
// .then((data: any) => {
// checkSuccessResponse(data);
// done()
// })
// } else {
// noActivityData(done);
// }
// });
// 未找到该接口暂时skip
it.skip('新将擢迁(新武将抽卡)-活动数据', function (done) {
checkActivityData(pinusClient, 'activity.newHeroGachaHandler.getNewHeroGachaActivity', ACTIVITY_TYPE.NEW_HERO_GACHA, done);
});
// it('通用签到-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.signInHandler.getSignInActivity', ACTIVITY_TYPE.COMMON_SIGN_IN, done);
// });
// it('新将好礼-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.newHeroGiftsHandler.getNewHeroGiftsActivity', ACTIVITY_TYPE.NEW_HERO_GIFTS, done);
// });
// it('新将演绎-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.newHeroGKHandler.getNewHeroGKActivity', ACTIVITY_TYPE.NEW_HERO_GK, done);
// });
// // 未找到该接口暂时skip
// it.skip('新将擢迁(新武将抽卡)-活动数据', function (done) {
// checkActivityData(pinusClient, 'activity.newHeroGachaHandler.getNewHeroGachaActivity', ACTIVITY_TYPE.NEW_HERO_GACHA, done);
// });
function checkActivityData(pinusClient, url, type, done) {
try {

View File

@@ -71,6 +71,7 @@ export enum ACTIVITY_TYPE {
ENTERTAIN = 56, // 宴请百家
QIXI = 57, // 七夕活动
MID_AUTUMN = 58, // 中秋活动
AUTHOR_GACHA = 59, //百家争鸣祈灵活动
}
/**

View File

@@ -653,7 +653,7 @@ export const FILENAME = {
DIC_AUTHORS_BOOK_POINT: 'dic_zyz_authorsBookPoint',
DIC_AUTHORS_BOOK_SUB: 'dic_zyz_authorsBookSub',
DIC_AUTHORS_GOODID: 'dic_zyz_authorsGoodId',
DIC_BOSS_RANK_ACTIVE_POINT:'dic_zyz_bossRank_activePoint',
DIC_BOSS_RANK_ACTIVE_POINT: 'dic_zyz_bossRank_activePoint',
}
export const WAR_RELATE_TABLES = [
@@ -907,6 +907,7 @@ export enum GACHA_TYPE {
ASSIGN = 3, // 指定卡池
GUIDE = 4, // 限时
ACTIVITY = 5, // 新武将活动
TAUTOR=6, // 百家争鸣祈灵
}
export enum GACHA_PLAN_TYPE {
@@ -1209,6 +1210,7 @@ export enum ITEM_CHANGE_REASON {
BUY_SPIRIT = 194, // 购买英灵
QIXI_REWARD = 195, // 七夕活动奖励
MID_AUTUMN_REWARD = 196, // 中秋活动奖励
AUTHOR_GACHA_REWARD = 197, // 百家争鸣祈灵奖励
}
export enum TA_EVENT {

View File

@@ -0,0 +1,54 @@
import { getModelForClass, prop, DocumentType, index } from "@typegoose/typegoose";
import BaseModel from "./BaseModel";
/**
* 百家争鸣祈灵
*/
@index({ serverId: 1, activityId: 1, roundIndex: 1, roleId: 1 })
export default class Activity_AuthorGacha_Rec extends BaseModel {
@prop({ required: true })
serverId: number; // 服Id
@prop({ required: true })
activityId: number; // 活动Id
@prop({ required: true })
roundIndex: number; // 第几轮
@prop({ required: true })
roleId: string; // 用户Id
@prop({ required: true, default: 0 })
gachaId: number;
@prop({ required: true, default: 0 })
gachaCnt: number; // 累计抽奖次数
@prop({ required: true, type: Number, default: [] })
record: number[]; // 领取奖励标记
public static async findData(serverId: number, activityId: number, roundIndex: number, roleId: string) {
let result: ActivityAuthorGachaRecModelType = await ActivityAuthorGachaRecModel.findOne({ serverId, roleId, activityId, roundIndex }).lean();
return result;
}
public static async updateGachaCnt(serverId: number, activityId: number, roundIndex: number, roleId: string, gachaId: number, gachaCnt: number) {
let result: ActivityAuthorGachaRecModelType = await ActivityAuthorGachaRecModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex }, { $set: { gachaId }, $inc: { gachaCnt } }, { new: true, upsert: true }).lean();
return result;
}
public static async record(serverId: number, activityId: number, roundIndex: number, roleId: string, record: number) {
let result: ActivityAuthorGachaRecModelType = await ActivityAuthorGachaRecModel.findOneAndUpdate({ serverId, roleId, activityId, roundIndex }, { $push: { record } }, { new: true, upsert: true }).lean();
return result;
}
}
export const ActivityAuthorGachaRecModel = getModelForClass(Activity_AuthorGacha_Rec);
export interface ActivityAuthorGachaRecModelType extends Pick<DocumentType<Activity_AuthorGacha_Rec>, keyof Activity_AuthorGacha_Rec> { }
export type ActivityAuthorGachaRecModelTypeParam = Partial<ActivityAuthorGachaRecModelType>; // 将所有字段变成可选项

View File

@@ -0,0 +1,61 @@
// 百家争鸣活动 - 祈灵
import { ActivityModelType } from '../../db/Activity';
import { ActivityAuthorGachaRecModelType } from '../../db/AuthorGachaRec';
import { ActivityBase } from './activityField';
// 后台格式
interface AuthorGachaDataInDb {
gachaId: number; // 卡池
box: {
count: number; // 次数
rewards: string; // type&id&count, type: 1-武将 2-道具 3-礼包
hasReceived?: boolean; // 是否获得
}[];
}
export class AuthorGachaData extends ActivityBase {
gachaId: number;
box: AuthorGachaDataInDb['box'] = [];
gachaCnt: number = 0;
record: number[] = [];
constructor(activityData: ActivityModelType, createTime: number, serverTime: number) {
super(activityData, createTime, serverTime)
this.initData(activityData.data)
}
public initData(data: string): void {
let dataObj: AuthorGachaDataInDb = JSON.parse(data);
if (!dataObj) return;
this.gachaId = dataObj.gachaId;
this.box = dataObj.box;
}
public setPlayerRecords(playerData: ActivityAuthorGachaRecModelType) {
this.updatePlayerRecord(playerData);
}
public updatePlayerRecord(playerData: ActivityAuthorGachaRecModelType) {
if (!playerData) return;
this.gachaCnt = playerData?.gachaCnt || 0;
this.record = playerData?.record || [];
}
public getShowResult() {
let box: AuthorGachaDataInDb['box'] = [];
for (let { count, rewards } of this.box) {
let hasReceived = false;
if (this.record.indexOf(count) != -1) hasReceived = true;
box.push({ count, rewards, hasReceived })
}
return {
...this.getBaseKeys(),
gachaId: this.gachaId,
authorGachaCnt: this.gachaCnt,
box,
}
}
}

View File

@@ -839,7 +839,7 @@ export function arrToMap<T>(arr: T[], getKey: (obj: T) => number|string): Map<nu
export function getGachaRemainFloor(gachaId: number, userFloor: Floor[]) {
let dicGacha = gameData.gacha.get(gachaId);
if(dicGacha.gachaType != GACHA_TYPE.NORMAL && dicGacha.gachaType != GACHA_TYPE.ACTIVITY) return 0;
if(dicGacha.gachaType != GACHA_TYPE.NORMAL && dicGacha.gachaType != GACHA_TYPE.ACTIVITY && dicGacha.gachaType != GACHA_TYPE.TAUTOR) return 0;
for(let floorId of dicGacha.floor) {
let dicGachaFloor = gameData.gachaFloor.get(floorId);

View File

@@ -322,5 +322,11 @@
"activityType": 58,
"name": "MID_AUTUMN",
"string": "中秋活动"
},
{
"id": 59,
"activityType": 59,
"name": "MID_AUTUMN",
"string": "百家争鸣活动"
}
]