calc-h 0.0.1 → 0.1.1

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.
@@ -1,8 +1,9 @@
1
1
  import { Resistance } from './resistance.js';
2
- export interface Enemy {
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 enemyArray: Enemy[];
8
+ export declare const enemies: Enemy[];
9
+ export {};
@@ -1,3 +1,4 @@
1
- export const enemyArray = [
2
- { name: '木桩', hp: 100000, resistances: { fire: 0.1 }, level: 100 },
1
+ import { Resistance } from './resistance.js';
2
+ export const enemies = [
3
+ { name: '木桩', hp: 100000, resistances: new Resistance(0.1), level: 100 },
3
4
  ];
@@ -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 extreme 加成百分比
7
- * @param 面板攻击力
7
+ * @param atkPercent 加成百分比
8
+ * @returns 面板攻击力
8
9
  */
9
- export declare function attackCalc(baseAttack: number, extreme: number): 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,42 @@ 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;
83
+ export * from './model/RoleDamageRes.js';
@@ -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 extreme 加成百分比
7
- * @param 面板攻击力
10
+ * @param atkPercent 加成百分比
11
+ * @returns 面板攻击力
8
12
  */
9
- export function attackCalc(baseAttack, extreme) {
10
- return roundTo(baseAttack * (1 + extreme));
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,85 @@ 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
+ }
138
+ export * from './model/RoleDamageRes.js';
@@ -0,0 +1,6 @@
1
+ export interface RoleDamageRes {
2
+ normalDamage: number[];
3
+ eDamage: number[];
4
+ qDamahe: number[];
5
+ passiveDamage: number[];
6
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,3 +1,5 @@
1
- export interface Resistance {
1
+ export declare class Resistance {
2
2
  fire: number;
3
+ constructor(fire: number);
4
+ getResistanceType(type: number): number | undefined;
3
5
  }
@@ -1 +1,13 @@
1
- export {};
1
+ export class Resistance {
2
+ constructor(fire) {
3
+ this.fire = fire;
4
+ }
5
+ getResistanceType(type) {
6
+ switch (type) {
7
+ case 1:
8
+ return this.fire;
9
+ default:
10
+ return undefined;
11
+ }
12
+ }
13
+ }
@@ -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 {};
@@ -0,0 +1,12 @@
1
+ export const weapons = [
2
+ {
3
+ name: '测试武器',
4
+ baseAttack: 600,
5
+ atkPercent: 0.5,
6
+ hpPercentBonus: 0.5,
7
+ defPercentBonus: 0.8,
8
+ dmgPercentBonus: 0.4,
9
+ critRate: 0.2,
10
+ critDamage: 1.2,
11
+ },
12
+ ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "calc-h",
3
- "version": "0.0.1",
3
+ "version": "0.1.1",
4
4
  "description": "伤害计算公式集",
5
5
  "license": "MIT",
6
6
  "author": "huaju",