diff --git a/game-server/app/servers/activity/handler/gachaHandler.ts b/game-server/app/servers/activity/handler/gachaHandler.ts index ec100cb72..f67918bcc 100644 --- a/game-server/app/servers/activity/handler/gachaHandler.ts +++ b/game-server/app/servers/activity/handler/gachaHandler.ts @@ -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 + }); } diff --git a/game-server/app/services/rewardService.ts b/game-server/app/services/rewardService.ts index 4cddf881b..e83a99454 100644 --- a/game-server/app/services/rewardService.ts +++ b/game-server/app/services/rewardService.ts @@ -320,15 +320,18 @@ export async function createHeroes(roleId: string, roleName: string, sid: string let newHeroInfo: CreateHeroParam[] = [], pieces: ItemInter[] = []; for(let h of heroInfo) { + console.log('*****', JSON.stringify([...userHeroesMap]), h.hid) if(userHeroesMap.has(h.hid)) { let {pieceId, count} = transPiece(h.hid); pieces.push({ id: pieceId, count }); + userHeroesMap.delete(h.hid); } else { newHeroInfo.push(h) + userHeroesMap.set(h.hid, null); } } - let resultHeroes: HeroType[], resultItems: ItemInter[]; + let resultHeroes: HeroType[] = [], resultItems: ItemInter[] = []; if(newHeroInfo.length > 0) { let { heroes, role, figureInfo, calHeroResults, calAllHeroResults, taskPushMessage } = await pubCreateHeroes(roleId, roleName, serverId, newHeroInfo); diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 0f364ded7..cfd69feac 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -599,7 +599,7 @@ function getGachaHopePercent() { function getGachaTurntablePercent() { let arr = decodeArrayListStr(RECRUIT.RECRUIT_BONUS_HERO_QUANTITY); return arr.map(cur => { - return { quality: parseInt(cur[0]), weight: parseInt(cur[1]) } + return { quality: parseInt(cur[0]), count: parseInt(cur[1]) } }); }