diff --git a/game-server/app/servers/role/handler/equipHandler.ts b/game-server/app/servers/role/handler/equipHandler.ts index 98e13e3fb..f49c585da 100644 --- a/game-server/app/servers/role/handler/equipHandler.ts +++ b/game-server/app/servers/role/handler/equipHandler.ts @@ -487,7 +487,8 @@ export class EquipHandler { let dicGoods = gameData.goods.get(id); if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND); - let dicQuench = gameData.quench.get(grade); + let dicQuench = gameData.quenchByQuality.get(dicGoods.quality)?.get(grade); + console.log(dicQuench, dicGoods.quality, grade) if (!dicQuench) return resResult(STATUS.DIC_DATA_NOT_FOUND); let logs: QuenchLogParam[] = [], times = 0; diff --git a/game-server/app/services/equipService.ts b/game-server/app/services/equipService.ts index 1803bf007..17281347e 100644 --- a/game-server/app/services/equipService.ts +++ b/game-server/app/services/equipService.ts @@ -7,11 +7,11 @@ import { HERO_SYSTEM_TYPE, TASK_TYPE } from "../consts"; import { EquipType } from "../db/Equip"; import { calEquipSeids } from '../pubUtils/playerCe'; import { checkTask, checkTaskWithHero, checkTaskWithEquip, checkActivityTask } from './taskService'; -import { DicQuench } from '../pubUtils/dictionary/DicQuench'; import { handleCost } from './rewardService'; import { DicGoods } from '../pubUtils/dictionary/DicGoods'; import { QuenchLogParam } from '../domain/roleField/equip'; import { QUENCH } from '../pubUtils/dicParam'; +import { DicQuenchQuality } from '../pubUtils/dictionary/DicQuenchQuality'; /** * 校验前端传入的消耗数量是否准确,并返回消耗的道具并加上特殊材料needConsumes @@ -155,8 +155,8 @@ export function checkEquipCanPut(hid: number, id: number) { * @param dicGoods 物品表 * @returns */ -export async function quenchOnce(roleId: string, sid: string, randMain: RandMain[], dicQuench: DicQuench, dicGoods: DicGoods) { - let { quality, lvLimited } = dicGoods; +export async function quenchOnce(roleId: string, sid: string, randMain: RandMain[], dicQuench: DicQuenchQuality, dicGoods: DicGoods) { + let { quality, equipLvl } = dicGoods; let canRandMain = randMain.filter(cur => { // 已升满的属性就不再淬火了 return cur.rand < dicQuench.singleRatioMax; @@ -192,10 +192,10 @@ export async function quenchOnce(roleId: string, sid: string, randMain: RandMain } value += r.rand; } - let grade = getQuenchGradeByValue(value/2); + let grade = getQuenchGradeByValue(quality, value/2); // 消耗 - let consumes = getQuenchConsume(lvLimited, quality); + let consumes = getQuenchConsume(equipLvl, quality); let result = await handleCost(roleId, sid, consumes); if(!result) return false; diff --git a/shared/consts/constModules/sysConst.ts b/shared/consts/constModules/sysConst.ts index 0fca02a1b..44284f366 100644 --- a/shared/consts/constModules/sysConst.ts +++ b/shared/consts/constModules/sysConst.ts @@ -459,7 +459,6 @@ export const FILENAME = { DIC_GK_NEWHERO: 'dic_zyz_gk_newhero', DIC_TASK_EXP: 'dic_zyz_mainTaskExp', DIC_GK_PROBATION: 'dic_zyz_gk_probation', - DIC_QUENCH: 'dic_zyz_quench', DIC_QUENCH_QUALITY: 'dic_zyz_quench_quality', DIC_QUENCH_CONSUME: 'dic_zyz_quench_consume', } diff --git a/shared/pubUtils/data.ts b/shared/pubUtils/data.ts index 0d9b3dc45..51ab70ed5 100644 --- a/shared/pubUtils/data.ts +++ b/shared/pubUtils/data.ts @@ -88,8 +88,7 @@ import { dicServerName, dicServerGroupName, loadServerName } from "./dictionary/ import { dicAp, loadAp, dicApMaxLevel } from './dictionary/DicAp'; import { dicApBuy, dicApMaxBuyTimes, loadApBuy } from "./dictionary/DicApBuy"; import { dicTaskExp, loadTskExp} from './dictionary/DicTaskExp'; -import { dicQuench, loadQuench } from './dictionary/DicQuench'; -import { dicQuenchByQuality, dicQuenchByQualityAndGrade, loadQuenchQuality } from './dictionary/DicQuenchQuality'; +import { dicQuenchByQuality, dicQuenchRangeByQuality, dicQuenchRangeByQualityAndGrade, loadQuenchQuality } from './dictionary/DicQuenchQuality'; import { dicQuenchConsume, loadQuenchConsume } from './dictionary/DicQuenchConsume'; export const gameData = { @@ -220,10 +219,10 @@ export const gameData = { apBuy: dicApBuy, apMaxBuyTimes: dicApMaxBuyTimes, taskExp: dicTaskExp, - quench: dicQuench, - quenchByQuality: dicQuenchByQuality, - quenchByQualityAndGrade: dicQuenchByQualityAndGrade, - quenchConsume: dicQuenchConsume + quenchRangeByQuality: dicQuenchRangeByQuality, + quenchRangeByQualityAndGrade: dicQuenchRangeByQualityAndGrade, + quenchConsume: dicQuenchConsume, + quenchByQuality: dicQuenchByQuality }; // 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据 @@ -730,9 +729,10 @@ export function getDicSuitByTypeAndLv(suitType: number, starLevel: number) { return gameData.suitByTypeAndLv.get(`${suitType}_${starLevel}`); } -export function getQuenchGradeByValue(value: number) { +export function getQuenchGradeByValue(quality: number, value: number) { + let dicQuench = gameData.quenchByQuality.get(quality)||[]; let grade = 0; - for(let [_grade, { singleRatioMin, singleRatioMax }] of gameData.quench) { + for(let [_grade, { singleRatioMin, singleRatioMax }] of dicQuench) { if(value >= singleRatioMin && value < singleRatioMax ) { grade = _grade; } @@ -748,9 +748,9 @@ export function getQuenchGradeByValue(value: number) { */ export function getQuenchByQualityAndGrade(quality: number, grade: number) { if(grade == 0) { // 这个品质的上下限 - return gameData.quenchByQuality.get(quality); + return gameData.quenchRangeByQuality.get(quality); } else { // 该品质该品相的上下限 - return gameData.quenchByQualityAndGrade.get(`${quality}_${grade}`); + return gameData.quenchRangeByQualityAndGrade.get(`${quality}_${grade}`); } } @@ -859,7 +859,6 @@ function loadDatas() { loadAp(); loadApBuy(); loadTskExp(); - loadQuench(); loadQuenchQuality(); loadQuenchConsume(); diff --git a/shared/pubUtils/dictionary/DicGoods.ts b/shared/pubUtils/dictionary/DicGoods.ts index 1fa6c65e9..31c448daa 100644 --- a/shared/pubUtils/dictionary/DicGoods.ts +++ b/shared/pubUtils/dictionary/DicGoods.ts @@ -17,6 +17,8 @@ export interface DicGoods { readonly name: string; // 等级限制 readonly lvLimited: number; + // 星级 + readonly equipLvl: number; // 职业限制 readonly jobLimited: number; // 武将限制 @@ -103,7 +105,8 @@ const DicGoodsKeys: KeysEnum = { image_id: true, gift: true, jobLimited: true, - charLimited: true + charLimited: true, + equipLvl: true } export const dicJewel = new Map(); export const dicGoods = new Map(); diff --git a/shared/pubUtils/dictionary/DicQuench.ts b/shared/pubUtils/dictionary/DicQuench.ts deleted file mode 100644 index 03e97d553..000000000 --- a/shared/pubUtils/dictionary/DicQuench.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { readFileAndParse } from '../util' -import { FILENAME } from '../../consts' - -export interface DicQuench { - // id - readonly id: number; - // 品相 - readonly grade: number; - // 品相名 - readonly name: string; - // 单属性最小值 - readonly singleRatioMin: number; - // 单属性最大值 - readonly singleRatioMax: number; - // 暴击效果,倍率 - readonly critEffect: number; - // 暴击概率 - readonly critProbability: number; -} - -export const dicQuench = new Map(); // id => dic -export function loadQuench() { - let arr = readFileAndParse(FILENAME.DIC_QUENCH); - - arr.forEach(o => { - dicQuench.set(o.grade, o); - }); - arr = undefined; -} \ No newline at end of file diff --git a/shared/pubUtils/dictionary/DicQuenchQuality.ts b/shared/pubUtils/dictionary/DicQuenchQuality.ts index c472718d2..dc49a4703 100644 --- a/shared/pubUtils/dictionary/DicQuenchQuality.ts +++ b/shared/pubUtils/dictionary/DicQuenchQuality.ts @@ -14,29 +14,39 @@ export interface DicQuenchQuality { readonly singleRatioMax: number; // 初始是否可以随机出 readonly initialAvailable: number; + // 暴击率 + readonly critProbability: number; + // 暴击效果 + readonly critEffect: number; } -export const dicQuenchByQualityAndGrade = new Map(); -export const dicQuenchByQuality = new Map(); // quality => {} +export const dicQuenchRangeByQualityAndGrade = new Map(); +export const dicQuenchRangeByQuality = new Map(); // quality => {} +export const dicQuenchByQuality = new Map>(); // quality => grade => dic export function loadQuenchQuality() { dicQuenchByQuality.clear(); - dicQuenchByQualityAndGrade.clear(); + dicQuenchRangeByQuality.clear(); + dicQuenchRangeByQualityAndGrade.clear(); let arr = readFileAndParse(FILENAME.DIC_QUENCH_QUALITY); arr.forEach(o => { if(o.initialAvailable == 1) { - if(!dicQuenchByQuality.has(o.quality)) { - dicQuenchByQuality.set(o.quality, { min: o.singleRatioMin, max: o.singleRatioMax }); + if(!dicQuenchRangeByQuality.has(o.quality)) { + dicQuenchRangeByQuality.set(o.quality, { min: o.singleRatioMin, max: o.singleRatioMax }); } else { - if(o.singleRatioMin < dicQuenchByQuality.get(o.quality).min) { - dicQuenchByQuality.get(o.quality).min = o.singleRatioMin; + if(o.singleRatioMin < dicQuenchRangeByQuality.get(o.quality).min) { + dicQuenchRangeByQuality.get(o.quality).min = o.singleRatioMin; } - if(o.singleRatioMax > dicQuenchByQuality.get(o.quality).max) { - dicQuenchByQuality.get(o.quality).max = o.singleRatioMax; + if(o.singleRatioMax > dicQuenchRangeByQuality.get(o.quality).max) { + dicQuenchRangeByQuality.get(o.quality).max = o.singleRatioMax; } } - dicQuenchByQualityAndGrade.set(`${o.quality}_${o.grade}`, { min: o.singleRatioMin, max: o.singleRatioMax }); + dicQuenchRangeByQualityAndGrade.set(`${o.quality}_${o.grade}`, { min: o.singleRatioMin, max: o.singleRatioMax }); } + if(!dicQuenchByQuality.has(o.quality)) { + dicQuenchByQuality.set(o.quality, new Map()); + } + dicQuenchByQuality.get(o.quality).set(o.grade, o); }); arr = undefined; } \ No newline at end of file diff --git a/shared/pubUtils/itemUtils.ts b/shared/pubUtils/itemUtils.ts index d886e02dc..04b91103f 100644 --- a/shared/pubUtils/itemUtils.ts +++ b/shared/pubUtils/itemUtils.ts @@ -84,7 +84,7 @@ export async function addEquips(roleId: string, roleName: string, weapon: EquipI if(attrValue > 0) { let { min, max } = getQuenchByQualityAndGrade(quality, grade); let rand = getRandValueByMinMax(min, max, 0); - grade = getQuenchGradeByValue(rand); + grade = getQuenchGradeByValue(quality, rand); randMain.push({ id: attrId, rand