calc-h 0.0.1 → 0.1.0
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/enemy.d.ts +3 -2
- package/dist/core/o/enemy.js +3 -2
- package/dist/core/o/index.d.ts +43 -3
- package/dist/core/o/index.js +88 -7
- package/dist/core/o/model/RoleDamageRes.d.ts +6 -0
- package/dist/core/o/model/RoleDamageRes.js +1 -0
- package/dist/core/o/resistance.d.ts +3 -1
- package/dist/core/o/resistance.js +13 -1
- package/dist/core/o/role.d.ts +15 -0
- package/dist/core/o/role.js +15 -0
- package/dist/core/o/weapon.d.ts +12 -0
- package/dist/core/o/weapon.js +12 -0
- package/package.json +1 -1
package/dist/core/o/enemy.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Resistance } from './resistance.js';
|
|
2
|
-
|
|
2
|
+
interface Enemy {
|
|
3
3
|
name: string;
|
|
4
4
|
hp: number;
|
|
5
5
|
resistances: Resistance;
|
|
6
6
|
level: number;
|
|
7
7
|
}
|
|
8
|
-
export declare const
|
|
8
|
+
export declare const enemies: Enemy[];
|
|
9
|
+
export {};
|
package/dist/core/o/enemy.js
CHANGED
package/dist/core/o/index.d.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { Resistance } from './resistance.js';
|
|
2
|
+
import { RoleDamageRes } from './model/RoleDamageRes.js';
|
|
2
3
|
/**
|
|
3
4
|
* 攻击力计算
|
|
4
5
|
* @author huaju
|
|
5
6
|
* @param baseAttack 基础攻击(白值)
|
|
6
|
-
* @param
|
|
7
|
-
* @
|
|
7
|
+
* @param atkPercent 加成百分比
|
|
8
|
+
* @returns 面板攻击力
|
|
8
9
|
*/
|
|
9
|
-
export declare function attackCalc(baseAttack: number,
|
|
10
|
+
export declare function attackCalc(baseAttack: number, atkPercent: number): number;
|
|
10
11
|
/**
|
|
11
12
|
* 基础伤害计算
|
|
12
13
|
* @author huaju
|
|
@@ -29,6 +30,7 @@ export declare function featherCalc(attribute: number, multiplier: number): numb
|
|
|
29
30
|
* @author huaju
|
|
30
31
|
* @param roleLevel 角色等级
|
|
31
32
|
* @param enemyLevel 敌人等级
|
|
33
|
+
* @returns 防御值
|
|
32
34
|
*/
|
|
33
35
|
export declare function defenseCalc(roleLevel: number, enemyLevel: number): number;
|
|
34
36
|
/**
|
|
@@ -40,3 +42,41 @@ export declare function defenseCalc(roleLevel: number, enemyLevel: number): numb
|
|
|
40
42
|
* @returns 最终抗性
|
|
41
43
|
*/
|
|
42
44
|
export declare function resistanceCalc(resistance: Resistance, reduce: Resistance): Resistance;
|
|
45
|
+
/**
|
|
46
|
+
* 基本伤害计算
|
|
47
|
+
* @author huaju
|
|
48
|
+
* @description 公式: 攻击力 * 倍率 * (1 + 增伤) * (1 + 暴击伤害) * 防御系数 * (1 - 抗性系数)
|
|
49
|
+
* @param attack 攻击力
|
|
50
|
+
* @param multiplier 技能/伤害倍率
|
|
51
|
+
* @param roleLevel 角色等级
|
|
52
|
+
* @param enemyLevel 敌人等级
|
|
53
|
+
* @param enemyResistance 敌人抗性
|
|
54
|
+
* @param reduce 减伤
|
|
55
|
+
* @param dmgPercentBonus 伤害加成
|
|
56
|
+
* @param critDamage 暴击伤害
|
|
57
|
+
* @param damageType 伤害类型
|
|
58
|
+
* @returns 计算后的伤害值
|
|
59
|
+
*/
|
|
60
|
+
export declare function calcDamage(attack: number, multiplier: number, roleLevel: number, enemyLevel: number, enemyResistance: Resistance, reduce: Resistance, dmgPercentBonus: number, critDamage: number, damageType: number): number;
|
|
61
|
+
/**
|
|
62
|
+
* 基本伤害计算
|
|
63
|
+
* @author huaju
|
|
64
|
+
* @description 公式: 攻击力 * 倍率 * (1 + 增伤) * (1 + 暴击伤害) * 防御系数 * (1 - 抗性系数)
|
|
65
|
+
* @param attack 攻击力
|
|
66
|
+
* @param multiplier 技能/伤害倍率
|
|
67
|
+
* @param roleLevel 角色等级
|
|
68
|
+
* @param enemyLevel 敌人等级
|
|
69
|
+
* @param enemyResistance 敌人抗性
|
|
70
|
+
* @param reduce 减伤
|
|
71
|
+
* @param dmgPercentBonus 伤害加成
|
|
72
|
+
* @param critDamage 暴击伤害
|
|
73
|
+
* @param damageType 伤害类型
|
|
74
|
+
* @returns 计算后的伤害值
|
|
75
|
+
*/
|
|
76
|
+
export declare function calcBaseDamage(attack: number, multiplier: number, roleLevel: number, enemyLevel: number, enemyResistance: number, reduce: number, dmgPercentBonus: number, critDamage: number, damageType: number): number;
|
|
77
|
+
/**
|
|
78
|
+
* 角色伤害计算
|
|
79
|
+
* @description 公式: 基础攻击力 * (1 + 百分比攻击力加成) * 倍率 * (1 + 增伤) * (1 + 暴击伤害) * 防御系数 * (1 - 抗性系数)
|
|
80
|
+
* @author huaju
|
|
81
|
+
*/
|
|
82
|
+
export declare function calcRoleDamage(roleName: string, weaponName: string, enemyName: string, roleLevel: number, enemyLevel: number, atkPercent: number, reduce: number, dmgPercentBonus: number, critDamage: number, damageType: number): RoleDamageRes;
|
package/dist/core/o/index.js
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
|
+
import { Resistance } from './resistance.js';
|
|
1
2
|
import { roundTo } from './utils/calc.js';
|
|
3
|
+
import { roles } from './role.js';
|
|
4
|
+
import { enemies } from './enemy.js';
|
|
5
|
+
import { weapons } from './weapon.js';
|
|
2
6
|
/**
|
|
3
7
|
* 攻击力计算
|
|
4
8
|
* @author huaju
|
|
5
9
|
* @param baseAttack 基础攻击(白值)
|
|
6
|
-
* @param
|
|
7
|
-
* @
|
|
10
|
+
* @param atkPercent 加成百分比
|
|
11
|
+
* @returns 面板攻击力
|
|
8
12
|
*/
|
|
9
|
-
export function attackCalc(baseAttack,
|
|
10
|
-
return roundTo(baseAttack * (1 +
|
|
13
|
+
export function attackCalc(baseAttack, atkPercent) {
|
|
14
|
+
return roundTo(baseAttack * (1 + atkPercent));
|
|
11
15
|
}
|
|
12
16
|
/**
|
|
13
17
|
* 基础伤害计算
|
|
@@ -35,6 +39,7 @@ export function featherCalc(attribute, multiplier) {
|
|
|
35
39
|
* @author huaju
|
|
36
40
|
* @param roleLevel 角色等级
|
|
37
41
|
* @param enemyLevel 敌人等级
|
|
42
|
+
* @returns 防御值
|
|
38
43
|
*/
|
|
39
44
|
export function defenseCalc(roleLevel, enemyLevel) {
|
|
40
45
|
return roundTo((roleLevel + 100) / (roleLevel + 100 + enemyLevel + 100));
|
|
@@ -49,8 +54,84 @@ export function defenseCalc(roleLevel, enemyLevel) {
|
|
|
49
54
|
*/
|
|
50
55
|
export function resistanceCalc(resistance, reduce) {
|
|
51
56
|
let resultFire = resistance.fire - reduce.fire;
|
|
52
|
-
let result =
|
|
53
|
-
fire: roundTo(resultFire < 0 ? resultFire / 2 : resultFire),
|
|
54
|
-
};
|
|
57
|
+
let result = new Resistance(roundTo(resultFire < 0 ? resultFire / 2 : resultFire));
|
|
55
58
|
return result;
|
|
56
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* 基本伤害计算
|
|
62
|
+
* @author huaju
|
|
63
|
+
* @description 公式: 攻击力 * 倍率 * (1 + 增伤) * (1 + 暴击伤害) * 防御系数 * (1 - 抗性系数)
|
|
64
|
+
* @param attack 攻击力
|
|
65
|
+
* @param multiplier 技能/伤害倍率
|
|
66
|
+
* @param roleLevel 角色等级
|
|
67
|
+
* @param enemyLevel 敌人等级
|
|
68
|
+
* @param enemyResistance 敌人抗性
|
|
69
|
+
* @param reduce 减伤
|
|
70
|
+
* @param dmgPercentBonus 伤害加成
|
|
71
|
+
* @param critDamage 暴击伤害
|
|
72
|
+
* @param damageType 伤害类型
|
|
73
|
+
* @returns 计算后的伤害值
|
|
74
|
+
*/
|
|
75
|
+
export function calcDamage(attack, multiplier, roleLevel, enemyLevel, enemyResistance, reduce, dmgPercentBonus, critDamage, damageType) {
|
|
76
|
+
console.debug(`属性参数:${attack}, ${multiplier}, ${roleLevel}, ${enemyLevel}, ${enemyResistance}, ${reduce}, ${dmgPercentBonus}, ${critDamage}`);
|
|
77
|
+
const resultResistance = resistanceCalc(enemyResistance, reduce).getResistanceType(damageType);
|
|
78
|
+
if (resultResistance === undefined)
|
|
79
|
+
throw new Error('传入的伤害类型有误');
|
|
80
|
+
return roundTo(attack *
|
|
81
|
+
multiplier *
|
|
82
|
+
(1 + dmgPercentBonus) *
|
|
83
|
+
(1 + critDamage) *
|
|
84
|
+
defenseCalc(roleLevel, enemyLevel) *
|
|
85
|
+
(1 - resultResistance));
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 基本伤害计算
|
|
89
|
+
* @author huaju
|
|
90
|
+
* @description 公式: 攻击力 * 倍率 * (1 + 增伤) * (1 + 暴击伤害) * 防御系数 * (1 - 抗性系数)
|
|
91
|
+
* @param attack 攻击力
|
|
92
|
+
* @param multiplier 技能/伤害倍率
|
|
93
|
+
* @param roleLevel 角色等级
|
|
94
|
+
* @param enemyLevel 敌人等级
|
|
95
|
+
* @param enemyResistance 敌人抗性
|
|
96
|
+
* @param reduce 减伤
|
|
97
|
+
* @param dmgPercentBonus 伤害加成
|
|
98
|
+
* @param critDamage 暴击伤害
|
|
99
|
+
* @param damageType 伤害类型
|
|
100
|
+
* @returns 计算后的伤害值
|
|
101
|
+
*/
|
|
102
|
+
export function calcBaseDamage(attack, multiplier, roleLevel, enemyLevel, enemyResistance, reduce, dmgPercentBonus, critDamage, damageType) {
|
|
103
|
+
return calcDamage(attack, multiplier, roleLevel, enemyLevel, new Resistance(enemyResistance), new Resistance(reduce), dmgPercentBonus, critDamage, damageType);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 角色伤害计算
|
|
107
|
+
* @description 公式: 基础攻击力 * (1 + 百分比攻击力加成) * 倍率 * (1 + 增伤) * (1 + 暴击伤害) * 防御系数 * (1 - 抗性系数)
|
|
108
|
+
* @author huaju
|
|
109
|
+
*/
|
|
110
|
+
export function calcRoleDamage(roleName, weaponName, enemyName, roleLevel, enemyLevel, atkPercent, reduce, dmgPercentBonus, critDamage, damageType) {
|
|
111
|
+
const role = roles.find((x) => x.name === roleName);
|
|
112
|
+
const weapon = weapons.find((x) => x.name === weaponName);
|
|
113
|
+
const enemy = enemies.find((x) => x.name === enemyName);
|
|
114
|
+
if (!role || !weapon || !enemy) {
|
|
115
|
+
throw new Error('角色/武器/敌人 名称未找到');
|
|
116
|
+
}
|
|
117
|
+
let baseAttack = role.baseAttack + weapon.baseAttack;
|
|
118
|
+
let roleDamageRes = {
|
|
119
|
+
normalDamage: [],
|
|
120
|
+
eDamage: [],
|
|
121
|
+
qDamahe: [],
|
|
122
|
+
passiveDamage: [],
|
|
123
|
+
};
|
|
124
|
+
role.normalAtkDamageBreakdown.forEach((multiplier) => {
|
|
125
|
+
roleDamageRes.normalDamage.push(calcDamage(baseAttack * (1 + atkPercent + weapon.atkPercent), multiplier, roleLevel, enemyLevel, enemy.resistances, new Resistance(reduce), dmgPercentBonus + weapon.dmgPercentBonus, critDamage + weapon.critDamage + role.critDamage, damageType));
|
|
126
|
+
});
|
|
127
|
+
role.eAtkDamageBreakdown.forEach((multiplier) => {
|
|
128
|
+
roleDamageRes.eDamage.push(calcDamage(baseAttack * (1 + atkPercent + weapon.atkPercent), multiplier, roleLevel, enemyLevel, enemy.resistances, new Resistance(reduce), dmgPercentBonus + weapon.dmgPercentBonus, critDamage + weapon.critDamage + role.critDamage, damageType));
|
|
129
|
+
});
|
|
130
|
+
role.qAtkDamageBreakdown.forEach((multiplier) => {
|
|
131
|
+
roleDamageRes.qDamahe.push(calcDamage(baseAttack * (1 + atkPercent + weapon.atkPercent), multiplier, roleLevel, enemyLevel, enemy.resistances, new Resistance(reduce), dmgPercentBonus + weapon.dmgPercentBonus, critDamage + weapon.critDamage + role.critDamage, damageType));
|
|
132
|
+
});
|
|
133
|
+
role.passiveDamageBreakdown.forEach((multiplier) => {
|
|
134
|
+
roleDamageRes.passiveDamage.push(calcDamage(baseAttack * (1 + atkPercent + weapon.atkPercent), multiplier, roleLevel, enemyLevel, enemy.resistances, new Resistance(reduce), dmgPercentBonus + weapon.dmgPercentBonus, critDamage + weapon.critDamage + role.critDamage, damageType));
|
|
135
|
+
});
|
|
136
|
+
return roleDamageRes;
|
|
137
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface Role {
|
|
2
|
+
name: string;
|
|
3
|
+
hp: number;
|
|
4
|
+
baseAttack: number;
|
|
5
|
+
defense: number;
|
|
6
|
+
critRate: number;
|
|
7
|
+
critDamage: number;
|
|
8
|
+
level: number;
|
|
9
|
+
normalAtkDamageBreakdown: number[];
|
|
10
|
+
eAtkDamageBreakdown: number[];
|
|
11
|
+
qAtkDamageBreakdown: number[];
|
|
12
|
+
passiveDamageBreakdown: number[];
|
|
13
|
+
}
|
|
14
|
+
export declare const roles: Role[];
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export const roles = [
|
|
2
|
+
{
|
|
3
|
+
name: '测试角色',
|
|
4
|
+
hp: 7000,
|
|
5
|
+
baseAttack: 750,
|
|
6
|
+
defense: 490,
|
|
7
|
+
critRate: 0.05,
|
|
8
|
+
critDamage: 1,
|
|
9
|
+
level: 100,
|
|
10
|
+
normalAtkDamageBreakdown: [1.2],
|
|
11
|
+
eAtkDamageBreakdown: [2.9],
|
|
12
|
+
qAtkDamageBreakdown: [10],
|
|
13
|
+
passiveDamageBreakdown: [],
|
|
14
|
+
},
|
|
15
|
+
];
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface Weapon {
|
|
2
|
+
name: string;
|
|
3
|
+
baseAttack: number;
|
|
4
|
+
atkPercent: number;
|
|
5
|
+
hpPercentBonus: number;
|
|
6
|
+
defPercentBonus: number;
|
|
7
|
+
dmgPercentBonus: number;
|
|
8
|
+
critRate: number;
|
|
9
|
+
critDamage: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const weapons: Weapon[];
|
|
12
|
+
export {};
|