抽卡:转盘

This commit is contained in:
luying
2021-04-23 20:35:47 +08:00
parent 0cd6939f5e
commit 5c24e28d06
3 changed files with 59 additions and 13 deletions

View File

@@ -94,8 +94,7 @@ export class GachaHandler {
result.transferToPiece(pieceId, count);
items.push({ id: pieceId, count });
} else {
let { heroId: hid, name: hName, initialStars: star, quality, jobid: job, initialSkin } = gameData.hero.get(result.hid);
heroInfo.push({ roleId, serverId, roleName, hid, hName, star, quality, job, skins:[{id: initialSkin, enable: true}] })
heroInfo.push({ hid: result.hid })
}
} else {
items.push({ id: result.id, count });
@@ -120,7 +119,7 @@ export class GachaHandler {
if(!costResult) return resResult(STATUS.GACHA_COST_NOT_ENOUGH);
}
// 给东西
let { heroes, goods } = await createHeroes(roleId, roleName, sid, serverId, heroInfo);
let { heroes } = await createHeroes(roleId, roleName, sid, serverId, heroInfo);
await addItems(roleId, roleName, sid, items);
// 更新数据
point = Math.floor(count/RECRUIT.RECRUIT_BONUS);
@@ -173,25 +172,69 @@ export class GachaHandler {
async drawTurnTable(msg: { gachaId: number }, session: BackendSession) {
const { gachaId } = msg;
const roleId: string = session.get('roleId');
const roleName: string = session.get('roleName');
const sid: string = session.get('sid');
const serverId: number = session.get('serverId');
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 { point, turntable } = userGacha;
if(point < RECRUIT.RECRUIT_BONUS_RECRUIT) return resResult(STATUS.GACHA_TURNTABLE_POINT_NOT_ENOUGH);
let turntablePool: { quality: number, count: number }[] = [];
for(let { quality, count } of gameData.gachaTurntable) {
let myTurntable = turntable.find(cur => cur.quality == quality);
if(myTurntable && myTurntable.hasGet) {
turntablePool.push({ quality, count });
}
}
if(turntablePool.length <= 0) { // 重置
turntable = []; turntablePool = gameData.gachaTurntable;
}
let randTurntable = getRandEelm(turntablePool);
let { quality, count } = randTurntable[0];
// 根据品质查武将
let pool = getAllHeroByQuality(quality);
let hero = getRandEelm(pool);
let contentId = gameData.gachaContentHero.get(hero[0]);
let result = new GachaResult(contentId);
result.setHero(hero[0]);
// 获得或者转成碎片
// 扣除积分
let heroInfo: { hid: number }[] = [];
for(let i = 0; i < count; i++) {
heroInfo.push({ hid: hero[0] })
}
let { heroes, goods } = await createHeroes(roleId, roleName, sid, serverId, heroInfo);
let resultList: GachaResult[] = [];
for(let h of heroes) {
let result = new GachaResult(contentId);
result.setHero(h.hid);
resultList.push(result);
}
for(let g of goods) {
let result = new GachaResult(contentId);
result.setHero(hero[0]);
result.transferToPiece(g.id, g.count);
resultList.push(result);
}
// 记录
let myTurntable = turntable.find(cur => cur.quality == quality);
if(!myTurntable) {
myTurntable = { quality, hasGet: false };
turntable.push(myTurntable);
}
myTurntable.hasGet = true;
// 扣除积分
userGacha = await UserGachaModel.updateInfo(roleId, gachaId, 0, { point: point - 1, turntable });
return resResult(STATUS.SUCCESS);
return resResult(STATUS.SUCCESS, {
gachaId,
point: userGacha.point,
turntable: userGacha.turntable,
result: resultList,
heroes, goods
});
}