装备:淬火修改读取表
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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',
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user