calc-h 0.1.3 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/core/o/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Resistance } from './resistance.js';
|
|
2
2
|
import type { RoleDamageRes } from './model/RoleDamageRes.js';
|
|
3
|
+
import type { CalcBaseDamageParams, CalcRoleDamageParams, CalcDamageParams } from './model/DamageCalcParam.js';
|
|
3
4
|
/**
|
|
4
5
|
* 攻击力计算
|
|
5
6
|
* @author huaju
|
|
@@ -30,9 +31,10 @@ export declare function featherCalc(attribute: number, multiplier: number): numb
|
|
|
30
31
|
* @author huaju
|
|
31
32
|
* @param roleLevel 角色等级
|
|
32
33
|
* @param enemyLevel 敌人等级
|
|
34
|
+
* @param defenseReduction 减防系数(百分比小数)
|
|
33
35
|
* @returns 防御值
|
|
34
36
|
*/
|
|
35
|
-
export declare function defenseCalc(roleLevel: number, enemyLevel: number): number;
|
|
37
|
+
export declare function defenseCalc(roleLevel: number, enemyLevel: number, defenseReduction?: number): number;
|
|
36
38
|
/**
|
|
37
39
|
* 抗性计算
|
|
38
40
|
* @author huaju
|
|
@@ -51,13 +53,14 @@ export declare function resistanceCalc(resistance: Resistance, reduce: Resistanc
|
|
|
51
53
|
* @param roleLevel 角色等级
|
|
52
54
|
* @param enemyLevel 敌人等级
|
|
53
55
|
* @param enemyResistance 敌人抗性
|
|
54
|
-
* @param reduce
|
|
56
|
+
* @param reduce 削抗
|
|
55
57
|
* @param dmgPercentBonus 伤害加成
|
|
56
58
|
* @param critDamage 暴击伤害
|
|
57
59
|
* @param damageType 伤害类型
|
|
60
|
+
* @param defenseReduction 减防系数(百分比小数)
|
|
58
61
|
* @returns 计算后的伤害值
|
|
59
62
|
*/
|
|
60
|
-
export declare function calcDamage(attack
|
|
63
|
+
export declare function calcDamage({ attack, multiplier, roleLevel, enemyLevel, enemyResistance, dmgPercentBonus, critDamage, damageType, reduce, defenseReduction, }: CalcDamageParams): number;
|
|
61
64
|
/**
|
|
62
65
|
* 基本伤害计算
|
|
63
66
|
* @author huaju
|
|
@@ -67,17 +70,30 @@ export declare function calcDamage(attack: number, multiplier: number, roleLevel
|
|
|
67
70
|
* @param roleLevel 角色等级
|
|
68
71
|
* @param enemyLevel 敌人等级
|
|
69
72
|
* @param enemyResistance 敌人抗性
|
|
70
|
-
* @param reduce
|
|
73
|
+
* @param reduce 削抗
|
|
71
74
|
* @param dmgPercentBonus 伤害加成
|
|
72
75
|
* @param critDamage 暴击伤害
|
|
73
76
|
* @param damageType 伤害类型
|
|
77
|
+
* @param defenseReduction 减防系数(百分比小数)
|
|
74
78
|
* @returns 计算后的伤害值
|
|
75
79
|
*/
|
|
76
|
-
export declare function calcBaseDamage(attack
|
|
80
|
+
export declare function calcBaseDamage({ attack, multiplier, roleLevel, enemyLevel, enemyResistance, dmgPercentBonus, critDamage, damageType, reduce, defenseReduction, }: CalcBaseDamageParams): number;
|
|
77
81
|
/**
|
|
78
82
|
* 角色伤害计算
|
|
79
83
|
* @description 公式: 基础攻击力 * (1 + 百分比攻击力加成) * 倍率 * (1 + 增伤) * (1 + 暴击伤害) * 防御系数 * (1 - 抗性系数)
|
|
80
84
|
* @author huaju
|
|
85
|
+
* @param roleName 角色名称
|
|
86
|
+
* @param weaponName 武器名称
|
|
87
|
+
* @param enemyName 敌人名称
|
|
88
|
+
* @param roleLevel 角色等级
|
|
89
|
+
* @param enemyLevel 敌人等级
|
|
90
|
+
* @param atkPercent 百分比攻击力加成(小数)
|
|
91
|
+
* @param reduce 削抗值(小数)
|
|
92
|
+
* @param dmgPercentBonus 伤害百分比加成(小数)
|
|
93
|
+
* @param critDamage 暴击伤害(小数)
|
|
94
|
+
* @param damageType 伤害类型
|
|
95
|
+
* @param defenseReduction 减防系数(百分比小数,0~1,默认 0)
|
|
96
|
+
* @returns 角色各类型伤害结果
|
|
81
97
|
*/
|
|
82
|
-
export declare function calcRoleDamage(roleName
|
|
98
|
+
export declare function calcRoleDamage({ roleName, weaponName, enemyName, roleLevel, enemyLevel, atkPercent, dmgPercentBonus, critDamage, damageType, reduce, defenseReduction, }: CalcRoleDamageParams): RoleDamageRes;
|
|
83
99
|
export { Resistance } from './resistance.js';
|
package/dist/core/o/index.js
CHANGED
|
@@ -39,10 +39,11 @@ export function featherCalc(attribute, multiplier) {
|
|
|
39
39
|
* @author huaju
|
|
40
40
|
* @param roleLevel 角色等级
|
|
41
41
|
* @param enemyLevel 敌人等级
|
|
42
|
+
* @param defenseReduction 减防系数(百分比小数)
|
|
42
43
|
* @returns 防御值
|
|
43
44
|
*/
|
|
44
|
-
export function defenseCalc(roleLevel, enemyLevel) {
|
|
45
|
-
return roundTo((roleLevel + 100) / (roleLevel + 100 + enemyLevel + 100));
|
|
45
|
+
export function defenseCalc(roleLevel, enemyLevel, defenseReduction = 0) {
|
|
46
|
+
return roundTo((roleLevel + 100) / (roleLevel + 100 + (enemyLevel + 100) * (1 - defenseReduction)));
|
|
46
47
|
}
|
|
47
48
|
/**
|
|
48
49
|
* 抗性计算
|
|
@@ -66,22 +67,22 @@ export function resistanceCalc(resistance, reduce) {
|
|
|
66
67
|
* @param roleLevel 角色等级
|
|
67
68
|
* @param enemyLevel 敌人等级
|
|
68
69
|
* @param enemyResistance 敌人抗性
|
|
69
|
-
* @param reduce
|
|
70
|
+
* @param reduce 削抗
|
|
70
71
|
* @param dmgPercentBonus 伤害加成
|
|
71
72
|
* @param critDamage 暴击伤害
|
|
72
73
|
* @param damageType 伤害类型
|
|
74
|
+
* @param defenseReduction 减防系数(百分比小数)
|
|
73
75
|
* @returns 计算后的伤害值
|
|
74
76
|
*/
|
|
75
|
-
export function calcDamage(attack, multiplier, roleLevel, enemyLevel, enemyResistance,
|
|
76
|
-
|
|
77
|
-
const resultResistance = resistanceCalc(enemyResistance, reduce).getResistanceType(damageType);
|
|
77
|
+
export function calcDamage({ attack, multiplier, roleLevel, enemyLevel, enemyResistance, dmgPercentBonus, critDamage, damageType, reduce = new Resistance(0), defenseReduction = 0, }) {
|
|
78
|
+
const resultResistance = resistanceCalc(enemyResistance, reduce ?? new Resistance(0)).getResistanceType(damageType);
|
|
78
79
|
if (resultResistance === undefined)
|
|
79
80
|
throw new Error('传入的伤害类型有误');
|
|
80
81
|
return roundTo(attack *
|
|
81
82
|
multiplier *
|
|
82
83
|
(1 + dmgPercentBonus) *
|
|
83
84
|
(1 + critDamage) *
|
|
84
|
-
defenseCalc(roleLevel, enemyLevel) *
|
|
85
|
+
defenseCalc(roleLevel, enemyLevel, defenseReduction) *
|
|
85
86
|
(1 - resultResistance));
|
|
86
87
|
}
|
|
87
88
|
/**
|
|
@@ -93,21 +94,45 @@ export function calcDamage(attack, multiplier, roleLevel, enemyLevel, enemyResis
|
|
|
93
94
|
* @param roleLevel 角色等级
|
|
94
95
|
* @param enemyLevel 敌人等级
|
|
95
96
|
* @param enemyResistance 敌人抗性
|
|
96
|
-
* @param reduce
|
|
97
|
+
* @param reduce 削抗
|
|
97
98
|
* @param dmgPercentBonus 伤害加成
|
|
98
99
|
* @param critDamage 暴击伤害
|
|
99
100
|
* @param damageType 伤害类型
|
|
101
|
+
* @param defenseReduction 减防系数(百分比小数)
|
|
100
102
|
* @returns 计算后的伤害值
|
|
101
103
|
*/
|
|
102
|
-
export function calcBaseDamage(attack, multiplier, roleLevel, enemyLevel, enemyResistance,
|
|
103
|
-
return calcDamage(
|
|
104
|
+
export function calcBaseDamage({ attack, multiplier, roleLevel, enemyLevel, enemyResistance, dmgPercentBonus, critDamage, damageType, reduce = 0, defenseReduction = 0, }) {
|
|
105
|
+
return calcDamage({
|
|
106
|
+
attack: attack,
|
|
107
|
+
multiplier: multiplier,
|
|
108
|
+
roleLevel: roleLevel,
|
|
109
|
+
enemyLevel: enemyLevel,
|
|
110
|
+
enemyResistance: new Resistance(enemyResistance),
|
|
111
|
+
dmgPercentBonus: dmgPercentBonus,
|
|
112
|
+
critDamage: critDamage,
|
|
113
|
+
damageType: damageType,
|
|
114
|
+
reduce: new Resistance(reduce ?? 0),
|
|
115
|
+
defenseReduction: defenseReduction,
|
|
116
|
+
});
|
|
104
117
|
}
|
|
105
118
|
/**
|
|
106
119
|
* 角色伤害计算
|
|
107
120
|
* @description 公式: 基础攻击力 * (1 + 百分比攻击力加成) * 倍率 * (1 + 增伤) * (1 + 暴击伤害) * 防御系数 * (1 - 抗性系数)
|
|
108
121
|
* @author huaju
|
|
122
|
+
* @param roleName 角色名称
|
|
123
|
+
* @param weaponName 武器名称
|
|
124
|
+
* @param enemyName 敌人名称
|
|
125
|
+
* @param roleLevel 角色等级
|
|
126
|
+
* @param enemyLevel 敌人等级
|
|
127
|
+
* @param atkPercent 百分比攻击力加成(小数)
|
|
128
|
+
* @param reduce 削抗值(小数)
|
|
129
|
+
* @param dmgPercentBonus 伤害百分比加成(小数)
|
|
130
|
+
* @param critDamage 暴击伤害(小数)
|
|
131
|
+
* @param damageType 伤害类型
|
|
132
|
+
* @param defenseReduction 减防系数(百分比小数,0~1,默认 0)
|
|
133
|
+
* @returns 角色各类型伤害结果
|
|
109
134
|
*/
|
|
110
|
-
export function calcRoleDamage(roleName, weaponName, enemyName, roleLevel, enemyLevel, atkPercent,
|
|
135
|
+
export function calcRoleDamage({ roleName, weaponName, enemyName, roleLevel, enemyLevel, atkPercent, dmgPercentBonus, critDamage, damageType, reduce = 0, defenseReduction = 0, }) {
|
|
111
136
|
const role = roles.find((x) => x.name === roleName);
|
|
112
137
|
const weapon = weapons.find((x) => x.name === weaponName);
|
|
113
138
|
const enemy = enemies.find((x) => x.name === enemyName);
|
|
@@ -122,16 +147,60 @@ export function calcRoleDamage(roleName, weaponName, enemyName, roleLevel, enemy
|
|
|
122
147
|
passiveDamage: [],
|
|
123
148
|
};
|
|
124
149
|
role.normalAtkDamageBreakdown.forEach((multiplier) => {
|
|
125
|
-
roleDamageRes.normalDamage.push(calcDamage(
|
|
150
|
+
roleDamageRes.normalDamage.push(calcDamage({
|
|
151
|
+
attack: baseAttack * (1 + atkPercent + weapon.atkPercent),
|
|
152
|
+
multiplier,
|
|
153
|
+
roleLevel: roleLevel,
|
|
154
|
+
enemyLevel: enemyLevel,
|
|
155
|
+
enemyResistance: enemy.resistances,
|
|
156
|
+
dmgPercentBonus: dmgPercentBonus + weapon.dmgPercentBonus,
|
|
157
|
+
critDamage: critDamage + weapon.critDamage + role.critDamage,
|
|
158
|
+
damageType: damageType,
|
|
159
|
+
reduce: new Resistance(reduce ?? 0),
|
|
160
|
+
defenseReduction: defenseReduction,
|
|
161
|
+
}));
|
|
126
162
|
});
|
|
127
163
|
role.eAtkDamageBreakdown.forEach((multiplier) => {
|
|
128
|
-
roleDamageRes.eDamage.push(calcDamage(
|
|
164
|
+
roleDamageRes.eDamage.push(calcDamage({
|
|
165
|
+
attack: baseAttack * (1 + atkPercent + weapon.atkPercent),
|
|
166
|
+
multiplier,
|
|
167
|
+
roleLevel: roleLevel,
|
|
168
|
+
enemyLevel: enemyLevel,
|
|
169
|
+
enemyResistance: enemy.resistances,
|
|
170
|
+
dmgPercentBonus: dmgPercentBonus + weapon.dmgPercentBonus,
|
|
171
|
+
critDamage: critDamage + weapon.critDamage + role.critDamage,
|
|
172
|
+
damageType: damageType,
|
|
173
|
+
reduce: new Resistance(reduce ?? 0),
|
|
174
|
+
defenseReduction: defenseReduction,
|
|
175
|
+
}));
|
|
129
176
|
});
|
|
130
177
|
role.qAtkDamageBreakdown.forEach((multiplier) => {
|
|
131
|
-
roleDamageRes.qDamahe.push(calcDamage(
|
|
178
|
+
roleDamageRes.qDamahe.push(calcDamage({
|
|
179
|
+
attack: baseAttack * (1 + atkPercent + weapon.atkPercent),
|
|
180
|
+
multiplier,
|
|
181
|
+
roleLevel: roleLevel,
|
|
182
|
+
enemyLevel: enemyLevel,
|
|
183
|
+
enemyResistance: enemy.resistances,
|
|
184
|
+
dmgPercentBonus: dmgPercentBonus + weapon.dmgPercentBonus,
|
|
185
|
+
critDamage: critDamage + weapon.critDamage + role.critDamage,
|
|
186
|
+
damageType: damageType,
|
|
187
|
+
reduce: new Resistance(reduce ?? 0),
|
|
188
|
+
defenseReduction: defenseReduction,
|
|
189
|
+
}));
|
|
132
190
|
});
|
|
133
191
|
role.passiveDamageBreakdown.forEach((multiplier) => {
|
|
134
|
-
roleDamageRes.passiveDamage.push(calcDamage(
|
|
192
|
+
roleDamageRes.passiveDamage.push(calcDamage({
|
|
193
|
+
attack: baseAttack * (1 + atkPercent + weapon.atkPercent),
|
|
194
|
+
multiplier,
|
|
195
|
+
roleLevel: roleLevel,
|
|
196
|
+
enemyLevel: enemyLevel,
|
|
197
|
+
enemyResistance: enemy.resistances,
|
|
198
|
+
dmgPercentBonus: dmgPercentBonus + weapon.dmgPercentBonus,
|
|
199
|
+
critDamage: critDamage + weapon.critDamage + role.critDamage,
|
|
200
|
+
damageType: damageType,
|
|
201
|
+
reduce: new Resistance(reduce ?? 0),
|
|
202
|
+
defenseReduction: defenseReduction,
|
|
203
|
+
}));
|
|
135
204
|
});
|
|
136
205
|
return roleDamageRes;
|
|
137
206
|
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { Resistance } from '../resistance.js';
|
|
2
|
+
export interface CalcDamageParams {
|
|
3
|
+
/** 攻击力(面板值) */
|
|
4
|
+
attack: number;
|
|
5
|
+
/** 技能/伤害倍率 */
|
|
6
|
+
multiplier: number;
|
|
7
|
+
/** 角色等级 */
|
|
8
|
+
roleLevel: number;
|
|
9
|
+
/** 敌人等级 */
|
|
10
|
+
enemyLevel: number;
|
|
11
|
+
/** 敌人抗性 */
|
|
12
|
+
enemyResistance: Resistance;
|
|
13
|
+
/** 伤害百分比加成(小数,0.5 = +50%) */
|
|
14
|
+
dmgPercentBonus: number;
|
|
15
|
+
/** 暴击伤害(小数,1 = 100%) */
|
|
16
|
+
critDamage: number;
|
|
17
|
+
/** 伤害类型,1 = 火 */
|
|
18
|
+
damageType: number;
|
|
19
|
+
/** 削抗值(小数),默认 0 */
|
|
20
|
+
reduce?: Resistance;
|
|
21
|
+
/** 减防系数(小数,0~1),默认 0 */
|
|
22
|
+
defenseReduction?: number;
|
|
23
|
+
}
|
|
24
|
+
export interface CalcBaseDamageParams {
|
|
25
|
+
/** 攻击力(面板值) */
|
|
26
|
+
attack: number;
|
|
27
|
+
/** 技能/伤害倍率 */
|
|
28
|
+
multiplier: number;
|
|
29
|
+
/** 角色等级 */
|
|
30
|
+
roleLevel: number;
|
|
31
|
+
/** 敌人等级 */
|
|
32
|
+
enemyLevel: number;
|
|
33
|
+
/** 敌人抗性(小数,0.1 = 10%) */
|
|
34
|
+
enemyResistance: number;
|
|
35
|
+
/** 伤害百分比加成(小数,0.5 = +50%) */
|
|
36
|
+
dmgPercentBonus: number;
|
|
37
|
+
/** 暴击伤害(小数,1 = 100%) */
|
|
38
|
+
critDamage: number;
|
|
39
|
+
/** 伤害类型,1 = 火 */
|
|
40
|
+
damageType: number;
|
|
41
|
+
/** 削抗值(小数),默认 0 */
|
|
42
|
+
reduce?: number;
|
|
43
|
+
/** 减防系数(小数,0~1),默认 0 */
|
|
44
|
+
defenseReduction?: number;
|
|
45
|
+
}
|
|
46
|
+
export interface CalcRoleDamageParams {
|
|
47
|
+
/** 角色名称,需能在 roles 中找到 */
|
|
48
|
+
roleName: string;
|
|
49
|
+
/** 武器名称,需能在 weapons 中找到 */
|
|
50
|
+
weaponName: string;
|
|
51
|
+
/** 敌人名称,需能在 enemies 中找到 */
|
|
52
|
+
enemyName: string;
|
|
53
|
+
/** 角色等级,参与防御系数计算 */
|
|
54
|
+
roleLevel: number;
|
|
55
|
+
/** 敌人等级,参与防御系数计算 */
|
|
56
|
+
enemyLevel: number;
|
|
57
|
+
/** 百分比攻击力加成(小数,0.466 = +46.6%) */
|
|
58
|
+
atkPercent: number;
|
|
59
|
+
/** 伤害百分比加成(小数,不含武器加成) */
|
|
60
|
+
dmgPercentBonus: number;
|
|
61
|
+
/** 暴击伤害(小数,不含武器和角色自带加成) */
|
|
62
|
+
critDamage: number;
|
|
63
|
+
/** 伤害类型,1 = 火 */
|
|
64
|
+
damageType: number;
|
|
65
|
+
/** 削抗值(小数,0.2 = 削 20% 抗性),默认 0 */
|
|
66
|
+
reduce?: number;
|
|
67
|
+
/** 减防系数(小数,0~1),默认 0 */
|
|
68
|
+
defenseReduction?: number;
|
|
69
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|