装备:淬火修改读取表

This commit is contained in:
luying
2021-07-30 17:17:32 +08:00
parent 6ab6a381e2
commit 36cdba3a7b
8 changed files with 42 additions and 59 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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',
}

View File

@@ -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();

View File

@@ -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<DicGoods> = {
image_id: true,
gift: true,
jobLimited: true,
charLimited: true
charLimited: true,
equipLvl: true
}
export const dicJewel = new Map<number, DicGoods>();
export const dicGoods = new Map<number, DicGoods>();

View File

@@ -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<number, DicQuench>(); // id => dic
export function loadQuench() {
let arr = readFileAndParse(FILENAME.DIC_QUENCH);
arr.forEach(o => {
dicQuench.set(o.grade, o);
});
arr = undefined;
}

View File

@@ -14,29 +14,39 @@ export interface DicQuenchQuality {
readonly singleRatioMax: number;
// 初始是否可以随机出
readonly initialAvailable: number;
// 暴击率
readonly critProbability: number;
// 暴击效果
readonly critEffect: number;
}
export const dicQuenchByQualityAndGrade = new Map<string, { min: number, max: number }>();
export const dicQuenchByQuality = new Map<number, { min: number, max: number }>(); // quality => {}
export const dicQuenchRangeByQualityAndGrade = new Map<string, { min: number, max: number }>();
export const dicQuenchRangeByQuality = new Map<number, { min: number, max: number }>(); // quality => {}
export const dicQuenchByQuality = new Map<number, Map<number, DicQuenchQuality>>(); // 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<number, DicQuenchQuality>());
}
dicQuenchByQuality.get(o.quality).set(o.grade, o);
});
arr = undefined;
}

View File

@@ -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