装备:淬火修改读取表

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
@@ -487,7 +487,8 @@ export class EquipHandler {
let dicGoods = gameData.goods.get(id); let dicGoods = gameData.goods.get(id);
if (!dicGoods) return resResult(STATUS.DIC_DATA_NOT_FOUND); 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); if (!dicQuench) return resResult(STATUS.DIC_DATA_NOT_FOUND);
let logs: QuenchLogParam[] = [], times = 0; let logs: QuenchLogParam[] = [], times = 0;
+5 -5
View File
@@ -7,11 +7,11 @@ import { HERO_SYSTEM_TYPE, TASK_TYPE } from "../consts";
import { EquipType } from "../db/Equip"; import { EquipType } from "../db/Equip";
import { calEquipSeids } from '../pubUtils/playerCe'; import { calEquipSeids } from '../pubUtils/playerCe';
import { checkTask, checkTaskWithHero, checkTaskWithEquip, checkActivityTask } from './taskService'; import { checkTask, checkTaskWithHero, checkTaskWithEquip, checkActivityTask } from './taskService';
import { DicQuench } from '../pubUtils/dictionary/DicQuench';
import { handleCost } from './rewardService'; import { handleCost } from './rewardService';
import { DicGoods } from '../pubUtils/dictionary/DicGoods'; import { DicGoods } from '../pubUtils/dictionary/DicGoods';
import { QuenchLogParam } from '../domain/roleField/equip'; import { QuenchLogParam } from '../domain/roleField/equip';
import { QUENCH } from '../pubUtils/dicParam'; import { QUENCH } from '../pubUtils/dicParam';
import { DicQuenchQuality } from '../pubUtils/dictionary/DicQuenchQuality';
/** /**
* 校验前端传入的消耗数量是否准确,并返回消耗的道具并加上特殊材料needConsumes * 校验前端传入的消耗数量是否准确,并返回消耗的道具并加上特殊材料needConsumes
@@ -155,8 +155,8 @@ export function checkEquipCanPut(hid: number, id: number) {
* @param dicGoods 物品表 * @param dicGoods 物品表
* @returns * @returns
*/ */
export async function quenchOnce(roleId: string, sid: string, randMain: RandMain[], dicQuench: DicQuench, dicGoods: DicGoods) { export async function quenchOnce(roleId: string, sid: string, randMain: RandMain[], dicQuench: DicQuenchQuality, dicGoods: DicGoods) {
let { quality, lvLimited } = dicGoods; let { quality, equipLvl } = dicGoods;
let canRandMain = randMain.filter(cur => { // 已升满的属性就不再淬火了 let canRandMain = randMain.filter(cur => { // 已升满的属性就不再淬火了
return cur.rand < dicQuench.singleRatioMax; return cur.rand < dicQuench.singleRatioMax;
@@ -192,10 +192,10 @@ export async function quenchOnce(roleId: string, sid: string, randMain: RandMain
} }
value += r.rand; 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); let result = await handleCost(roleId, sid, consumes);
if(!result) return false; if(!result) return false;
-1
View File
@@ -459,7 +459,6 @@ export const FILENAME = {
DIC_GK_NEWHERO: 'dic_zyz_gk_newhero', DIC_GK_NEWHERO: 'dic_zyz_gk_newhero',
DIC_TASK_EXP: 'dic_zyz_mainTaskExp', DIC_TASK_EXP: 'dic_zyz_mainTaskExp',
DIC_GK_PROBATION: 'dic_zyz_gk_probation', DIC_GK_PROBATION: 'dic_zyz_gk_probation',
DIC_QUENCH: 'dic_zyz_quench',
DIC_QUENCH_QUALITY: 'dic_zyz_quench_quality', DIC_QUENCH_QUALITY: 'dic_zyz_quench_quality',
DIC_QUENCH_CONSUME: 'dic_zyz_quench_consume', DIC_QUENCH_CONSUME: 'dic_zyz_quench_consume',
} }
+10 -11
View File
@@ -88,8 +88,7 @@ import { dicServerName, dicServerGroupName, loadServerName } from "./dictionary/
import { dicAp, loadAp, dicApMaxLevel } from './dictionary/DicAp'; import { dicAp, loadAp, dicApMaxLevel } from './dictionary/DicAp';
import { dicApBuy, dicApMaxBuyTimes, loadApBuy } from "./dictionary/DicApBuy"; import { dicApBuy, dicApMaxBuyTimes, loadApBuy } from "./dictionary/DicApBuy";
import { dicTaskExp, loadTskExp} from './dictionary/DicTaskExp'; import { dicTaskExp, loadTskExp} from './dictionary/DicTaskExp';
import { dicQuench, loadQuench } from './dictionary/DicQuench'; import { dicQuenchByQuality, dicQuenchRangeByQuality, dicQuenchRangeByQualityAndGrade, loadQuenchQuality } from './dictionary/DicQuenchQuality';
import { dicQuenchByQuality, dicQuenchByQualityAndGrade, loadQuenchQuality } from './dictionary/DicQuenchQuality';
import { dicQuenchConsume, loadQuenchConsume } from './dictionary/DicQuenchConsume'; import { dicQuenchConsume, loadQuenchConsume } from './dictionary/DicQuenchConsume';
export const gameData = { export const gameData = {
@@ -220,10 +219,10 @@ export const gameData = {
apBuy: dicApBuy, apBuy: dicApBuy,
apMaxBuyTimes: dicApMaxBuyTimes, apMaxBuyTimes: dicApMaxBuyTimes,
taskExp: dicTaskExp, taskExp: dicTaskExp,
quench: dicQuench, quenchRangeByQuality: dicQuenchRangeByQuality,
quenchByQuality: dicQuenchByQuality, quenchRangeByQualityAndGrade: dicQuenchRangeByQualityAndGrade,
quenchByQualityAndGrade: dicQuenchByQualityAndGrade, quenchConsume: dicQuenchConsume,
quenchConsume: dicQuenchConsume quenchByQuality: dicQuenchByQuality
}; };
// 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据 // 在此提供一些原先在gamedata中提供的方法,以便更方便获取gameData数据
@@ -730,9 +729,10 @@ export function getDicSuitByTypeAndLv(suitType: number, starLevel: number) {
return gameData.suitByTypeAndLv.get(`${suitType}_${starLevel}`); 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; let grade = 0;
for(let [_grade, { singleRatioMin, singleRatioMax }] of gameData.quench) { for(let [_grade, { singleRatioMin, singleRatioMax }] of dicQuench) {
if(value >= singleRatioMin && value < singleRatioMax ) { if(value >= singleRatioMin && value < singleRatioMax ) {
grade = _grade; grade = _grade;
} }
@@ -748,9 +748,9 @@ export function getQuenchGradeByValue(value: number) {
*/ */
export function getQuenchByQualityAndGrade(quality: number, grade: number) { export function getQuenchByQualityAndGrade(quality: number, grade: number) {
if(grade == 0) { // 这个品质的上下限 if(grade == 0) { // 这个品质的上下限
return gameData.quenchByQuality.get(quality); return gameData.quenchRangeByQuality.get(quality);
} else { // 该品质该品相的上下限 } else { // 该品质该品相的上下限
return gameData.quenchByQualityAndGrade.get(`${quality}_${grade}`); return gameData.quenchRangeByQualityAndGrade.get(`${quality}_${grade}`);
} }
} }
@@ -859,7 +859,6 @@ function loadDatas() {
loadAp(); loadAp();
loadApBuy(); loadApBuy();
loadTskExp(); loadTskExp();
loadQuench();
loadQuenchQuality(); loadQuenchQuality();
loadQuenchConsume(); loadQuenchConsume();
+4 -1
View File
@@ -17,6 +17,8 @@ export interface DicGoods {
readonly name: string; readonly name: string;
// 等级限制 // 等级限制
readonly lvLimited: number; readonly lvLimited: number;
// 星级
readonly equipLvl: number;
// 职业限制 // 职业限制
readonly jobLimited: number; readonly jobLimited: number;
// 武将限制 // 武将限制
@@ -103,7 +105,8 @@ const DicGoodsKeys: KeysEnum<DicGoods> = {
image_id: true, image_id: true,
gift: true, gift: true,
jobLimited: true, jobLimited: true,
charLimited: true charLimited: true,
equipLvl: true
} }
export const dicJewel = new Map<number, DicGoods>(); export const dicJewel = new Map<number, DicGoods>();
export const dicGoods = new Map<number, DicGoods>(); export const dicGoods = new Map<number, DicGoods>();
-29
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;
}
+20 -10
View File
@@ -14,29 +14,39 @@ export interface DicQuenchQuality {
readonly singleRatioMax: number; readonly singleRatioMax: number;
// 初始是否可以随机出 // 初始是否可以随机出
readonly initialAvailable: number; readonly initialAvailable: number;
// 暴击率
readonly critProbability: number;
// 暴击效果
readonly critEffect: number;
} }
export const dicQuenchByQualityAndGrade = new Map<string, { min: number, max: number }>(); export const dicQuenchRangeByQualityAndGrade = new Map<string, { min: number, max: number }>();
export const dicQuenchByQuality = new Map<number, { min: number, max: number }>(); // quality => {} 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() { export function loadQuenchQuality() {
dicQuenchByQuality.clear(); dicQuenchByQuality.clear();
dicQuenchByQualityAndGrade.clear(); dicQuenchRangeByQuality.clear();
dicQuenchRangeByQualityAndGrade.clear();
let arr = readFileAndParse(FILENAME.DIC_QUENCH_QUALITY); let arr = readFileAndParse(FILENAME.DIC_QUENCH_QUALITY);
arr.forEach(o => { arr.forEach(o => {
if(o.initialAvailable == 1) { if(o.initialAvailable == 1) {
if(!dicQuenchByQuality.has(o.quality)) { if(!dicQuenchRangeByQuality.has(o.quality)) {
dicQuenchByQuality.set(o.quality, { min: o.singleRatioMin, max: o.singleRatioMax }); dicQuenchRangeByQuality.set(o.quality, { min: o.singleRatioMin, max: o.singleRatioMax });
} else { } else {
if(o.singleRatioMin < dicQuenchByQuality.get(o.quality).min) { if(o.singleRatioMin < dicQuenchRangeByQuality.get(o.quality).min) {
dicQuenchByQuality.get(o.quality).min = o.singleRatioMin; dicQuenchRangeByQuality.get(o.quality).min = o.singleRatioMin;
} }
if(o.singleRatioMax > dicQuenchByQuality.get(o.quality).max) { if(o.singleRatioMax > dicQuenchRangeByQuality.get(o.quality).max) {
dicQuenchByQuality.get(o.quality).max = o.singleRatioMax; 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; arr = undefined;
} }
+1 -1
View File
@@ -84,7 +84,7 @@ export async function addEquips(roleId: string, roleName: string, weapon: EquipI
if(attrValue > 0) { if(attrValue > 0) {
let { min, max } = getQuenchByQualityAndGrade(quality, grade); let { min, max } = getQuenchByQualityAndGrade(quality, grade);
let rand = getRandValueByMinMax(min, max, 0); let rand = getRandValueByMinMax(min, max, 0);
grade = getQuenchGradeByValue(rand); grade = getQuenchGradeByValue(quality, rand);
randMain.push({ randMain.push({
id: attrId, id: attrId,
rand rand