抽卡:转盘
This commit is contained in:
@@ -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
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user