伤害结算机制

本模组默认按“K”键查看面板,妖兽面板可进入凡修生物查询对应属性,法宝可在凡修物品查询对应属性。(在不考虑跳劈暴击以及原版护甲机制以及原版药水,默认普攻冷却条为满状态下进行攻击)

非玩家生物造成伤害结算(包含妖兽等):物伤-受击者物防+法伤-受击者物防+雷伤-受击者雷防+火伤-受击者火防+毒伤-受击者毒防=最终伤害(若生物中没有对应伤害数值则默认为0,当某一属性伤害为0时该属性伤害与该属性防御不计入该公式,非本模组生物一般仅能造成物伤)

玩家伤害造成结算:未持有法器的情况下仅能造成面板上物伤的80%,计算公式为,面板物伤*80%-受击者物防=最终伤害。持有法器的情况下计算方式较为复杂,仅有物理伤害的法器计算公式为,(面板物攻+法器物攻+法器赋能物攻伤害)*(1+物伤加成)-受击者物防=最终伤害。拥有多种属性攻击的法器计算公式极为复杂,计算公式为(面板物攻+法器物攻)+法器赋能物攻伤害)*(1+物伤加成)-受击者物防+特殊伤害=最终结算伤害。特殊伤害需要法器能造成该属性伤害大于0,即赋能或强化普攻或其他可以造成对应伤害的,才能纳入对应属性结算,若无造成对应伤害则无法纳入结算,例桃木剑不能造成雷伤,则你即使有十亿雷攻也无法从这个没有雷伤的武器打出。特殊伤害全部公式为,(0+法器法攻+法器赋能法攻伤害)*(1+法伤加成)-受击者法防,(面板雷攻+法器雷攻+法器赋能雷攻)*(1+雷伤加成)-受击者雷防,(面板火攻+法器火攻+法器赋能火攻)*(1+火攻加成)-受击者火防,(面板毒攻+法器毒攻+法器赋能毒攻)*(1+毒攻加成)-受击者毒防玩家面板法攻目前仅能通过法宝威能释放,法宝威能计算为,法宝威能基础伤害+法宝法攻加成倍率*面板法攻-受击者法防=最终伤害。若威能伤害为非法攻则皆以此公式替换为对应的属性结算,若威能为强化普攻则将其计算为法器赋能伤害进入下一次普攻结算。

 公式:

假设使用以下字母代表不同的伤害属性:

物理伤害:P 法术伤害:M 雷电伤害:E 火焰伤害:F 毒素伤害:T

受击者的防御属性:

物理防御:DP 法术防御:DM 雷电防御:DE 火焰防御:DF 毒素防御:DT

那么,根据提供的伤害结算公式,可以得到以下字母代数公式:

非玩家生物造成伤害结算: 伤害 = P - DP + M - DP + E - DE + F - DF + TDT

玩家伤害造成结算(无法器): 伤害 = 0.8 * P - DP

玩家伤害造成结算(持有物理伤害法器): 伤害 = (P + WP + WEP) * (1 + PDM) - DP

玩家伤害造成结算(持有多属性法器): 伤害 = (P + WP) + WEP * (1 + PDM) - DP + SP

玩家法术伤害(法宝威能): 伤害 = WB + WBM * PM - DM

其中: P:面板物理伤害 M:面板法术伤害 E:面板雷电伤害 F:面板火焰伤害 T:面板毒素伤害 DP:受击者物理防御 DM:受击者法术防御 DE:受击者雷电防御 DF:受击者火焰防御 DT:受击者毒素防御 WP:法器物理伤害 WEP:法器赋能物理伤害 PDM:物理伤害加成倍率 SP:特殊伤害 WB:法宝威能基础伤害 WBM:法宝法术伤害加成倍率 PM:面板法术伤害


计算代码:

public class DamageCalculator { public static double calculateNonPlayerDamage(double P, double DP, double M, double DM, double E, double DE, double F, double DF, double T, double DT) { return P - DP + M - DM + E - DE + F - DF + T - DT; }

public static double calculatePlayerDamageWithoutArtifact(double P, double DP) {
    return 0.8 * P - DP;
}

public static double calculatePlayerDamageWithPhysicalArtifact(double P, double WP, double WEP, double PDM, double DP) {
    return (P + WP + WEP) * (1 + PDM) - DP;
}

public static double calculatePlayerDamageWithMultiAttributeArtifact(double P, double WP, double WEP, double PDM, double DP, double SP) {
    return (P + WP) + WEP * (1 + PDM) - DP + SP;
}

public static double calculatePlayerMagicDamage(double WB, double WBM, double PM, double DM) {
    return WB + WBM * PM - DM;
}

public static void main(String[] args) {
    double P = 100; // 面板物理伤害
    double DP = 50; // 受击者物理防御
    double M = 80; // 面板法术伤害
    double DM = 30; // 受击者法术防御
    double E = 60; // 面板雷电伤害
    double DE = 20; // 受击者雷电防御
    double F = 50; // 面板火焰伤害
    double DF = 25; // 受击者火焰防御
    double T = 40; // 面板毒素伤害
    double DT = 15; // 受击者毒素防御

    double nonPlayerDamage = calculateNonPlayerDamage(P, DP, M, DM, E, DE, F, DF, T, DT);
    System.out.println("非玩家生物造成的伤害:" + nonPlayerDamage);

    double playerDamageWithoutArtifact = calculatePlayerDamageWithoutArtifact(P, DP);
    System.out.println("玩家造成的伤害(无法器):" + playerDamageWithoutArtifact);

    double WP = 20; // 法器物理伤害
    double WEP = 10; // 法器赋能物理伤害
    double PDM = 0.5; // 物理伤害加成倍率
    double playerDamageWithPhysicalArtifact = calculatePlayerDamageWithPhysicalArtifact(P, WP, WEP, PDM, DP);
    System.out.println("玩家造成的伤害(持有物理伤害法器):" + playerDamageWithPhysicalArtifact);

    double SP = 30; // 特殊伤害
    double playerDamageWithMultiAttributeArtifact = calculatePlayerDamageWithMultiAttributeArtifact(P, WP, WEP, PDM, DP, SP);
    System.out.println("玩家造成的伤害(持有多属性法器):" + playerDamageWithMultiAttributeArtifact);

    double WB = 50; // 法宝威能基础伤害
    double WBM = 0.8; // 法宝法术伤害加成倍率
    double PM = 70; // 面板法术伤害
    double playerMagicDamage = calculatePlayerMagicDamage(WB, WBM, PM, DM);
    System.out.println("玩家法术伤害(法宝威能):" + playerMagicDamage);

    double HP = 200; // 受击者血量
    int numHitsToKill = (int) Math.ceil(HP / nonPlayerDamage);
    System.out.println("受击者血量:" + HP);
    System.out.println("需要 " + numHitsToKill + " 下才能打死受击者");
   }
}

注变量数值可随意更改!

短评加载中..