武将:抽象武将创建接口
This commit is contained in:
@@ -1,16 +1,22 @@
|
||||
import { Application, BackendSession } from "pinus";
|
||||
import { resResult, getRandomWithWeight } from "../../../pubUtils/util";
|
||||
import { STATUS, GACHA_ID } from "../../../consts";
|
||||
import { resResult, getRandomWithWeight, getRandEelm } from "../../../pubUtils/util";
|
||||
import { STATUS, GACHA_ID, HERO_QUALITY_TYPE, TASK_TYPE } from "../../../consts";
|
||||
import { gameData } from "../../../pubUtils/data";
|
||||
import { GachaListReturn, GachaResult } from "../../../domain/activityField/gachaField";
|
||||
import { GachaListReturn, GachaResult, GachaData } from "../../../domain/activityField/gachaField";
|
||||
import { UserGachaModel } from "../../../db/UserGacha";
|
||||
import { refreshGacha, getFloorResult, getResultFromContentId, transPiece } from "../../../services/gachaService";
|
||||
import { refreshGacha, getFloorResult, getResultFromContentId } from "../../../services/gachaService";
|
||||
import { RoleModel } from "../../../db/Role";
|
||||
import { HeroModel, HeroUpdate } from "../../../db/Hero";
|
||||
import { RewardInter } from "../../../pubUtils/interface";
|
||||
import { handleCost, createHeroes, addItems } from "../../../services/rewardService";
|
||||
import { getAfterDateByDay } from "../../../pubUtils/timeUtil";
|
||||
import { UserGachaRecModel } from "../../../db/UserGachaRec";
|
||||
import { ActivityModel } from "../../../db/Activity";
|
||||
import { checkTask } from "../../../services/taskService";
|
||||
import { RECRUIT } from "../../../pubUtils/dicParam";
|
||||
import { getAllHeroByQuality } from "../../../services/gachaService";
|
||||
import { transPiece } from "../../../pubUtils/itemUtils";
|
||||
import { CreateHeroParam } from "../../../domain/roleField/hero";
|
||||
|
||||
export default function (app: Application) {
|
||||
return new GachaHandler(app);
|
||||
@@ -58,6 +64,7 @@ export class GachaHandler {
|
||||
const roleName: string = session.get('roleName');
|
||||
const sid: string = session.get('sid');
|
||||
const serverId: number = session.get('serverId');
|
||||
const funcs: number[] = session.get('funcs');
|
||||
|
||||
let { lv } = await RoleModel.findByRoleId(roleId);
|
||||
|
||||
@@ -71,7 +78,7 @@ export class GachaHandler {
|
||||
|
||||
let userHeroes = await HeroModel.findByRole(roleId);
|
||||
|
||||
let items: RewardInter[] = [], heroInfo: HeroUpdate[] = [], resultList: GachaResult[] = [];
|
||||
let items: RewardInter[] = [], heroInfo: CreateHeroParam[] = [], resultList: GachaResult[] = [];
|
||||
for(let i = 0; i < count; i++) {
|
||||
// 按照一般概率抽出
|
||||
let { dic: { id: base } } = getRandomWithWeight(dicGacha.percent);
|
||||
@@ -113,16 +120,18 @@ export class GachaHandler {
|
||||
if(!costResult) return resResult(STATUS.GACHA_COST_NOT_ENOUGH);
|
||||
}
|
||||
// 给东西
|
||||
let heroes = await createHeroes(roleId, sid, serverId, heroInfo);
|
||||
let { heroes, goods } = await createHeroes(roleId, roleName, sid, serverId, heroInfo);
|
||||
await addItems(roleId, roleName, sid, items);
|
||||
// 更新数据
|
||||
point += count;
|
||||
point = Math.floor(count/RECRUIT.RECRUIT_BONUS);
|
||||
userGacha = await UserGachaModel.updateInfo(roleId, gachaId, activityId, {
|
||||
freeCount, hope, floor, count, point
|
||||
});
|
||||
|
||||
await UserGachaRecModel.createRec(roleId, gachaId, activityId, count, resultList);
|
||||
|
||||
// 任务
|
||||
await checkTask(roleId, sid, funcs, TASK_TYPE.GASHA, count, true, {});
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
gachaId, activityId,
|
||||
freeCount, refFreeTime: getAfterDateByDay(refFreeTime, dicGacha.free.day), count, point, floor,
|
||||
@@ -140,7 +149,19 @@ export class GachaHandler {
|
||||
const { gachaId, hope } = msg;
|
||||
const roleId: string = session.get('roleId');
|
||||
|
||||
return resResult(STATUS.SUCCESS);
|
||||
for(let { hid } of hope) {
|
||||
let dicHero = gameData.hero.get(hid);
|
||||
if(!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
if(dicHero.quality != HERO_QUALITY_TYPE.GOLD) {
|
||||
return resResult(STATUS.GACHA_HOPE_NOT_GOLD);
|
||||
}
|
||||
}
|
||||
let userGacha = await UserGachaModel.updateInfo(roleId, gachaId, 0, { hope: hope.map(cur => { return {...cur, hasGet: false} }) })
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
gachaId,
|
||||
hope: userGacha.hope
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -153,6 +174,23 @@ export class GachaHandler {
|
||||
const { gachaId } = msg;
|
||||
const roleId: string = session.get('roleId');
|
||||
|
||||
let userGacha = await UserGachaModel.findByRole(roleId, gachaId, 0);
|
||||
if(userGacha.point < RECRUIT.RECRUIT_BONUS_RECRUIT) return resResult(STATUS.GACHA_TURNTABLE_POINT_NOT_ENOUGH)
|
||||
|
||||
let { dic: { quality } } = getRandomWithWeight(gameData.gachaTurntable);
|
||||
// 根据品质查武将
|
||||
let pool = getAllHeroByQuality(quality);
|
||||
|
||||
let hero = getRandEelm(pool);
|
||||
let contentId = gameData.gachaContentHero.get(hero[0]);
|
||||
|
||||
let result = new GachaResult(contentId);
|
||||
result.setHero(hero[0]);
|
||||
// 获得或者转成碎片
|
||||
// 扣除积分
|
||||
// 记录
|
||||
|
||||
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
|
||||
@@ -163,10 +201,33 @@ export class GachaHandler {
|
||||
* @param {BackendSession} session
|
||||
* @memberof GachaHandler
|
||||
*/
|
||||
async setPickHero(msg: { gachaId: number, pickHero: number }, session: BackendSession) {
|
||||
const { gachaId, pickHero } = msg;
|
||||
async setPickHero(msg: { gachaId: number, activityId: number, pickHero: number }, session: BackendSession) {
|
||||
const { gachaId, activityId, pickHero } = msg;
|
||||
const roleId: string = session.get('roleId');
|
||||
if(gachaId != GACHA_ID.ASSIGN && gachaId != GACHA_ID.TIMELIMIT)
|
||||
return resResult(STATUS.WRONG_PARMS);
|
||||
let dicHero = gameData.hero.get(pickHero);
|
||||
if(!dicHero) return resResult(STATUS.DIC_DATA_NOT_FOUND);
|
||||
|
||||
let heroes: number[] = [];
|
||||
if(gachaId == GACHA_ID.TIMELIMIT) {
|
||||
let activityData = await ActivityModel.findActivity(activityId, true);
|
||||
if(!activityData) return resResult(STATUS.ACTIVITY_MISSING);
|
||||
|
||||
let gachaData = new GachaData(activityData);
|
||||
heroes = gachaData.heroes;
|
||||
if(!heroes.includes(pickHero)) {
|
||||
return resResult(STATUS.GACHA_CAN_NOT_PICK)
|
||||
}
|
||||
}
|
||||
|
||||
let userGacha = await UserGachaModel.updateInfo(roleId, gachaId, activityId, { pickHero })
|
||||
|
||||
return resResult(STATUS.SUCCESS, {
|
||||
gachaId,
|
||||
heroes,
|
||||
pickHero: userGacha.pickHero
|
||||
});
|
||||
|
||||
return resResult(STATUS.SUCCESS);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user