✨ feat(百家争鸣):祈灵 更新至 eb9f941ae
This commit is contained in:
5
.idea/.gitignore
generated
vendored
Normal file
5
.idea/.gitignore
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
||||
# Editor-based HTTP Client requests
|
||||
/httpRequests/
|
||||
@@ -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;
|
||||
|
||||
33
game-server/app/services/activity/authorGachaService.ts
Normal file
33
game-server/app/services/activity/authorGachaService.ts
Normal 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
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -71,6 +71,7 @@ export enum ACTIVITY_TYPE {
|
||||
ENTERTAIN = 56, // 宴请百家
|
||||
QIXI = 57, // 七夕活动
|
||||
MID_AUTUMN = 58, // 中秋活动
|
||||
AUTHOR_GACHA = 59, //百家争鸣祈灵活动
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 {
|
||||
|
||||
54
shared/db/AuthorGachaRec.ts
Normal file
54
shared/db/AuthorGachaRec.ts
Normal 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>; // 将所有字段变成可选项
|
||||
61
shared/domain/activityField/authorGachaField.ts
Normal file
61
shared/domain/activityField/authorGachaField.ts
Normal 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,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -322,5 +322,11 @@
|
||||
"activityType": 58,
|
||||
"name": "MID_AUTUMN",
|
||||
"string": "中秋活动"
|
||||
},
|
||||
{
|
||||
"id": 59,
|
||||
"activityType": 59,
|
||||
"name": "MID_AUTUMN",
|
||||
"string": "百家争鸣活动"
|
||||
}
|
||||
]
|
||||
Reference in New Issue
Block a user