ZZZ-Plugin/lib/score.js
2024-07-28 23:43:25 +08:00

106 lines
2.5 KiB
JavaScript

import { getMapData } from '../utils/file.js';
const scoreData = getMapData('EquipScore');
const baseValueData = getMapData('EquipBaseValue');
/**
* 是否有分数数据
* @param {string} charID 角色id
* @returns {boolean}
*/
export const hasScoreData = charID => {
return (
scoreData.hasOwnProperty(charID) &&
Object.keys(scoreData[charID]).length > 0
);
};
/**
* 获取装备属性基准分数
* @param {string} charID 角色id
* @param {string} propertyID 属性id
* @returns {number}
*/
export const getEquipPropertyBaseScore = (charID, propertyID) => {
const score = scoreData[charID][propertyID] || 0;
return score;
};
/**
* 获取装备属性分数
* @param {string} charID 角色id
* @param {string} propertyID 属性id
* @param {string} value 属性值
* @returns {number}
*/
export const getEquipPropertyScore = (charID, propertyID, value) => {
if (value.includes('%')) {
value = value.replace('%', '');
}
value = Number(value);
const baseScore = getEquipPropertyBaseScore(charID, propertyID);
let finalScore = baseScore * value;
switch (propertyID) {
// 小生命
case '11103':
finalScore = value * 0.043 * baseScore * 1;
break;
// 大生命
case '11102':
finalScore = value * 1.6 * baseScore * 100;
break;
// 小攻击
case '12103':
finalScore = value * 0.25 * baseScore * 1;
break;
// 大攻击
case '12102':
finalScore = value * 1.6 * baseScore * 100;
break;
// 小防御
case '13103':
finalScore = value * 0.32 * baseScore * 1;
break;
// 大防御
case '13102':
finalScore = value * 1 * baseScore * 100;
break;
// 暴击
case '20103':
finalScore = value * 2 * baseScore * 100;
break;
// 暴击伤害
case '21103':
finalScore = value * 1 * baseScore * 100;
break;
// 穿透值
case '23203':
finalScore = value * 0.53 * baseScore * 1;
break;
// 异常精通
case '31403':
finalScore = value * 0.5 * baseScore * 100;
break;
default:
break;
}
return finalScore;
};
/**
* 获取词条强化次数
* @param {string} propertyID 属性id
* @param {string} value 属性值
* @returns {number}
*/
export const getEquipPropertyEnhanceCount = (propertyID, value) => {
if (value.includes('%')) {
value = value.replace('%', '');
}
value = Number(value);
const baseValue = baseValueData[propertyID] || 0;
if (baseValue === 0) {
return 0;
}
return value / baseValue - 1;
};