实时计算点数分配方案低配简化版

KFOL助手的自定义点数分配脚本,可根据当前状态实时计算点数分配方案,运行速度最快,比劣化版也要快2-3倍,60层以下精度与原版相差无几

目前为 2017-02-20 提交的版本。查看 最新版本

// ==UserScript==
// @name        实时计算点数分配方案低配简化版
// @namespace   hinomiya
// @author      hinomiya
// @homepage    read.php?tid=589364
// @include     http://*2dkf.com/kf_fw_ig_index.php*
// @include     http://*9moe.com/kf_fw_ig_index.php*
// @include     http://*kfgal.com/kf_fw_ig_index.php*
// @include     https://*.miaola.info/kf_fw_ig_index.php*
// @version     1.6
// @grant       none
// @run-at      document-end
// @trigger     start
// @description KFOL助手的自定义点数分配脚本,可根据当前状态实时计算点数分配方案,运行速度最快,比劣化版也要快2-3倍,60层以下精度与原版相差无几
// ==/UserScript==
'use strict';

// 玩家当前状态
var currentLevel; // 当前层数
var currentLife; // 当前剩余生命值
var availablePoint; // 可分配属性点
var extraPointList; // 道具加成点数列表
var itemUsedNumList; // 道具使用情况列表
var basePoints; // 基础点数对象
var enemyList;  // 各层遭遇NPC列表
var totalStrongNum; // 目前出现强化怪个数

// 基础参数(全局变量)

var playerAttackCoefficient = 5; // 玩家攻系数
var playerHPCoefficient = 20; // 玩家血系数
var playerSpeedCoefficient = 2; // 玩家速系数

var CHCardinal = 100; // 暴击率基数
var SKLCardinal = 90; // 技能率基数
var DFCardinal = 150; // 防御基数

var antiAgilityCoefficient = 3; // 灵活抵消系数
var antiInteligenceCoefficient = 3; // 智力抵消系数

var CDNum; // CD使用数量
var CDCoefficient = 0.008; // 1张CD减npc血系数
var fullCDCoefficient; // 满CD减npc攻系数

var fullRemiHP; // 满蕾米加成生命,注意在技能伤害中不等同于35点数
var fullIzayoiSpeed; // 满16夜加成攻速


// npc参数

// npc参数基础数据(全局变量)

var npcPowerStepNum = 6; // npc力量递增数值
var npcHealthStepNum = 7; // npc体质递增数值
var npcQuickStepNum = 3; // npc敏捷递增数值
var npcAgilityStepNum = 2; // npc灵活递增数值
var npcInteligenceStepNum = 2; // npc智力递增数值
var npcWillStepNum = 2; // npc意志递增数值

var npcAttackCoefficient = 3; // npc攻系数
var npcHPCoefficient = 10; // npc血系数
var npcSpeedCoefficient = 2; // npc速系数

var npcSKLAttack = 0.25; // npc技能伤害加成

// npc强化系数(全局变量) 索引:普通npc为0,boss为1,壮汉为2,记者为3, 脆弱为4,缓慢为5 (待增加代码,可根据npc数据自动计算系数)

var npcPowerIntensiveCoefficient = [1, 1.5, 2, 1, 1, 1]; // npc力量强化系数
var npcHealthIntensiveCoefficient = [1, 2, 1.5, 1, 0.5, 1]; // npc体质强化系数
var npcQuickIntensiveCoefficient = [1, 1.5, 1, 2, 1, 0.3]; // npc敏捷强化系数
var npcAgilityIntensiveCoefficient = [1, 1.2, 1, 1.5, 1, 1]; // npc灵活强化系数
var npcInteligenceIntensiveCoefficient = [1, 1.2, 1, 1.5, 1, 1]; // npc智力强化系数
var npcWillIntensiveCoefficient = [1, 1.2, 1.5, 1, 0.5, 1]; // npc意志强化系数


// 需要玩家自行调整的变量,希望提供可视化接口
var playerPropability = 0.7;   // 默认事件发生概率初始值,脸越黑设得越大
var npcPropability = 0.3; // 默认npc事件发生概率初始值,脸越黑设得越小
var recoverLevel = 2.5;  // 预计回复楼层系数,根据连续几层不碰到强化npc进行估算,脸越黑设得越小



// 数学计算用函数

function factorial(intNum) {
// 计算阶乘
    var factnum = 1;
    for (var i = 1; i <= intNum; i++) {
        factnum *= i;
    }
    return factnum;
}
function getTimesProbability(trials, happenningTimes, Probablity_s) {
// 计算概率为Probablity_s的二项分布在总次数(trials)下成功次数至少为happenningTimes的概率
    var totalProbability = 0;
    var i = trials + 1;
    while(i > happenningTimes){
        i--;
        var tempProb = (factorial(trials) / factorial(trials - i) / factorial(i)) * Math.pow(1 - Probablity_s, trials - i) * Math.pow(Probablity_s, i);
        totalProbability += tempProb;
    }
    return totalProbability;
}
function getNPCPerByPoint(propertyName, currentLevel, npcFlag, pointNum) {
// 计算玩家(npc)暴击、技能率,npcFlag,即npc强化系数中对应索引
    var propertyNum = 0.000001;
    switch (propertyName) {
        case "灵活":
            var npcAgility = Math.round(npcAgilityStepNum * (currentLevel + 1) * npcAgilityIntensiveCoefficient[npcFlag]); // npc灵活
            npcAgility = npcAgility - Math.round((npcAgility + basePoints["灵活"] + pointNum) / antiAgilityCoefficient);
            propertyNum = Math.max(Math.round(npcAgility / (npcAgility + CHCardinal) * 100) / 100, 0.000001);
            break;
        case "智力":
            pointNum = pointNum + basePoints["智力"] - Math.round((pointNum + basePoints["智力"] + Math.round(npcInteligenceStepNum * (currentLevel) * npcInteligenceIntensiveCoefficient[npcFlag])) / antiInteligenceCoefficient);
            var npcInteligence = Math.round(npcInteligenceStepNum * (currentLevel + 1) * npcInteligenceIntensiveCoefficient[npcFlag]); // npc智力
            npcInteligence = npcInteligence - Math.round((npcInteligence + basePoints["智力"] + pointNum) / antiInteligenceCoefficient);
            propertyNum = Math.max(Math.round(npcInteligence / (npcInteligence + SKLCardinal) * 100) / 100, 0.000001);
            break;
        default:
            // 出错处理
            propertyNum = 0.000001;
    }
    return propertyNum;
}

function CritBinom(trials, Probablity_s, Alpha) {
// 仿制Excel函数,计算二项分布累积概率的临界次数
    if (Alpha === 0) {
        // Alpha只能取(0,1)间的值,取1或0时应按出错处理
        return 0;
    }
    if (Alpha === 1) {
        // Alpha只能取(0,1)间的值,取1或0时应按出错处理
        return trials;
    }

    if (Probablity_s === 0 || Probablity_s === 1) {
        // Probablity_s只能取(0,1)间的值,取1或0时应按出错处理
        return 0;
    }

    var exprimentTimes = 0; // 累积概率对应的事件发生次数
    var cumulativeProb = 0; // 累积概率
    while (cumulativeProb < Alpha) {
        // 二项分布概率
        var tempProb = (factorial(trials) / factorial(trials - exprimentTimes) / factorial(exprimentTimes)) * Math.pow(1 - Probablity_s, trials - exprimentTimes) * Math.pow(Probablity_s, exprimentTimes);
        // 计算累积概率
        cumulativeProb += tempProb;
        exprimentTimes++;
    }
    exprimentTimes--;
    return exprimentTimes;
}


function getEventProbability(happenningTimes, trials, defaultProbablity) {
// 计算二项分布在总次数(trials)下成功次数至少为happenningTimes的概率大于defaultProbablity时,单次事件成功概率的临界值
    if (happenningTimes === 0) {
        // 至少发生0次概率始终为1,返回单次事件成功概率的最小值

        return 0.000001;
    }
    if (defaultProbablity === 0) {
        // defaultProbablity只能取(0,1)间的值,取1或0时应按出错处理

        return 0;
    }
    if (defaultProbablity === 1) {
        // defaultProbablity只能取(0,1)间的值,取1或0时应按出错处理

        return 1;
    }

    var eventProbability = 0; // 单次事件成功概率 * 100,取整数便于迭代
    var eventProbability1 = 0; // 二分法下限
    var eventProbability2 = 100; // 二分法上限
    while (eventProbability1 < eventProbability2) {
        // 使用二分法迭代找出合适的单次事件成功概率
        eventProbability = Math.floor((eventProbability1 + eventProbability2) / 2);
        var hTimes = trials - CritBinom(trials, 1 - eventProbability / 100, defaultProbablity); // 概率不小于defaultProbablity时,事件至少发生次数
        if (hTimes < happenningTimes) {
            // eventProbability偏小,需要将二分法下限提高
            eventProbability1 = Math.ceil((eventProbability1 + eventProbability2) / 2);
        }
        else {
            // eventProbability偏大,需要将二分法上限降低
            eventProbability2 = Math.floor((eventProbability1 + eventProbability2) / 2);
        }
    }
    eventProbability = eventProbability1;
    return eventProbability / 100;
}


// 策略计算

function getParamForNPCNextLevel(currentLevel, npcFlag, levelPoints) {
// 计算下一层npc参数,npcFlag,即npc强化系数中对应索引,返回npc参数对象

    var npcHP = Math.ceil(Math.ceil(npcHealthStepNum * (currentLevel + 1) * npcHealthIntensiveCoefficient[npcFlag]) * npcHPCoefficient * (1 - CDNum * CDCoefficient)); // npc血
    var npcAttack = Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[npcFlag]) * npcAttackCoefficient * fullCDCoefficient); // npc攻
    var npcSpeed = Math.ceil(npcQuickStepNum * (currentLevel + 1) * npcQuickIntensiveCoefficient[npcFlag]) * npcSpeedCoefficient; // npc速

    var npcAgility = Math.round(npcAgilityStepNum * (currentLevel + 1) * npcAgilityIntensiveCoefficient[npcFlag]); // npc灵活
    npcAgility = npcAgility - Math.round((npcAgility + extraPointList.get('灵活') + levelPoints["灵活"]) / antiAgilityCoefficient);
    var npcCHPer = Math.max(Math.ceil(npcAgility / (npcAgility + CHCardinal) * 100) / 100, 0.000001); // npc暴击率

    var npcInteligence = Math.round(npcInteligenceStepNum * (currentLevel + 1) * npcInteligenceIntensiveCoefficient[npcFlag]); // npc智力
    npcInteligence = npcInteligence - Math.round((npcInteligence + extraPointList.get('智力') + levelPoints["智力"]) / antiInteligenceCoefficient);
    var npcSKLPer = Math.max(Math.ceil(npcInteligence / (npcInteligence + SKLCardinal) * 100) / 100, 0.000001); // npc技能率

    var npcWill = Math.ceil(npcWillStepNum * (currentLevel + 1) * npcWillIntensiveCoefficient[npcFlag]); // npc意志
    var npcDefence = Math.round(npcWill / (npcWill + DFCardinal) * 100) / 100; // npc防

    return {"血": npcHP, "攻": npcAttack, "速": npcSpeed, "暴击率": npcCHPer, "技能率": npcSKLPer, "防": npcDefence};

}

function getPropertyByPoint(propertyName, pointNum) {
// 因调用问题重写点数及属性计算函数
    var propertyNum = 1;
    switch (propertyName) {
        case "力量":
            propertyNum = (pointNum + basePoints["力量"]) * playerAttackCoefficient;
            break;
        case "体质":
            propertyNum = (pointNum + basePoints["体质"]) * playerHPCoefficient + fullRemiHP;
            break;
        case "敏捷":
            propertyNum = (pointNum + basePoints["敏捷"]) * playerSpeedCoefficient + fullIzayoiSpeed;
            break;
        case "意志":
            propertyNum = Math.round((pointNum + basePoints["意志"]) / ((pointNum + basePoints["意志"]) + DFCardinal) * 100) / 100;
            break;
        default:
            // 出错处理
            propertyNum = 1;
    }
    return propertyNum;
}

function getPointByProperty(propertyName, propertyNum) {
// 因调用问题重写点数及属性计算函数,防御等百分数用2位小数表示,如25%=0.25
    var pointNum = 1;
    switch (propertyName) {
        case "力量":
            pointNum = Math.max(Math.ceil(propertyNum / playerAttackCoefficient) - basePoints["力量"], 1);
            break;
        case "体质":
            pointNum = Math.max(Math.ceil((propertyNum - fullRemiHP) / playerHPCoefficient) - basePoints["体质"], 1);
            break;
        case "敏捷":
            pointNum = Math.max(Math.ceil((propertyNum - fullIzayoiSpeed) / playerSpeedCoefficient) - basePoints["敏捷"], 1);
            break;
        case "意志":
            pointNum = Math.max(Math.round(DFCardinal / (1 - propertyNum) - DFCardinal) - basePoints["意志"], 1);
            break;
        default:
            // 出错处理
            pointNum = 1;
    }
    return pointNum;

}

function getPerByPoint(propertyName, currentLevel, npcFlag, pointNum) {
// 计算玩家(npc)暴击、技能率,npcFlag,即npc强化系数中对应索引
    var propertyNum = 0.000001;
    switch (propertyName) {
        case "灵活":
            pointNum = pointNum + basePoints["灵活"] - Math.round((pointNum + basePoints["灵活"] + Math.round(npcAgilityStepNum * (currentLevel) * npcAgilityIntensiveCoefficient[npcFlag])) / antiAgilityCoefficient);
            propertyNum = Math.max(Math.round(pointNum / (pointNum + CHCardinal) * 100) / 100, 0.000001);
            break;
        case "智力":
            pointNum = pointNum + basePoints["智力"] - Math.round((pointNum + basePoints["智力"] + Math.round(npcInteligenceStepNum * (currentLevel) * npcInteligenceIntensiveCoefficient[npcFlag])) / antiInteligenceCoefficient);
            propertyNum = Math.max(Math.round(pointNum / (pointNum + SKLCardinal) * 100) / 100, 0.000001);
            break;
        default:
            // 出错处理
            propertyNum = 0.000001;
    }
    return propertyNum;

}

function getPointByPer(propertyName, currentLevel, npcFlag, propertyNum, pnflag) {
// 计算保持玩家(npc)暴击、技能率所需参数,npcFlag,即npc强化系数中对应索引,暴击率等百分数用2位小数表示,如25%=0.25;pnflag:玩家为0,npc为1
    var pointNum = 1;
    if (propertyNum < 0.01 && pnflag === 0) {
        // 不需要发动玩家暴击、技能
        return 1;
    }
    if (propertyNum > 0.99 && pnflag === 1) {
        // 不需要抑制npc暴击、技能
        return 1;
    }
    switch (propertyName) {
        case "灵活":
            var npcAgility = Math.ceil(npcAgilityStepNum * currentLevel * npcAgilityIntensiveCoefficient[npcFlag]);
            if (pnflag === 0) {
                pointNum = Math.max(Math.ceil((CHCardinal * antiAgilityCoefficient / (1 - propertyNum) - CHCardinal * antiAgilityCoefficient + npcAgility) / (antiAgilityCoefficient - 1)) - basePoints["灵活"], 1);
            }
            else if (pnflag === 1) {
                pointNum = Math.max(Math.ceil(CHCardinal * antiAgilityCoefficient + npcAgility * (antiAgilityCoefficient - 1) - CHCardinal * antiAgilityCoefficient / (1 - propertyNum)) - basePoints["灵活"], 1);
            }
            break;
        case "智力":
            var npcInteligence = Math.ceil(npcInteligenceStepNum * currentLevel * npcInteligenceIntensiveCoefficient[npcFlag]);
            if (pnflag === 0) {
                pointNum = Math.max(Math.ceil((SKLCardinal * antiInteligenceCoefficient / (1 - propertyNum) - SKLCardinal * antiInteligenceCoefficient + npcInteligence) / (antiInteligenceCoefficient - 1)) - basePoints["智力"], 1);
            }
            else if (pnflag === 1) {
                pointNum = Math.max(Math.ceil(SKLCardinal * antiInteligenceCoefficient + npcInteligence * (antiInteligenceCoefficient - 1) - SKLCardinal * antiInteligenceCoefficient / (1 - propertyNum)) - basePoints["智力"], 1);
            }
            break;
        default:
            // 出错处理
            pointNum = 1;
    }
    return pointNum;

}

function getPointForSP(propertyName, currentLevel, npcFlag, spTimes, attackTimes, defaultProbablity) {
// 暴击流或技能流加点,propertyName为灵活或智力,spTimes为暴击(技能)次数,attackTimes为总攻击次数,defaultProbablity为默认事件发生概率,函数返回相应灵活(智力)
    var spProbablity = getEventProbability(spTimes, attackTimes, defaultProbablity); // 计算玩家暴击(技能)率
    var spPoint = getPointByPer(propertyName, currentLevel, npcFlag, spProbablity, 0);
    return (spPoint);
}


function getPointAgainstSP(propertyName, currentLevel, npcFlag, spTimes, attackedTimes, defaultProbablity) {
// 封住npc暴击或技能,propertyName为灵活或智力,spTimes为暴击(技能)次数,attackedTimes为总被攻击次数,defaultProbablity为默认npc事件发生概率,函数返回相应灵活(智力)
    var spProbablity = Math.max(getEventProbability(spTimes + 1, attackedTimes, defaultProbablity) - 0.01, 0.000001); // 计算npc暴击(技能)率
    var spPoint = getPointByPer(propertyName, currentLevel, npcFlag, spProbablity, 1);
    return (spPoint);
}



function getNextLevelPointsByCHStrategy(currentLevel , currentLife , npcFlag, npcFlag2 , levelCHSStrategy){
// 通过方案参数,结合npc种类(npcFlag,即npc强化系数中对应索引),计算出下一层点数分配方案,力量只与受攻击次数相关,灵活只与暴击率相关,意志为最优加点

    var playerPower = 1; // 玩家力量点数
    var playerHealth = 1; // 玩家体质点数
    var playerQuick = 1; // 玩家敏捷点数

    // 计算玩家敏捷点数
    var npcSpeed = Math.ceil(npcQuickStepNum * npcSpeedCoefficient * (currentLevel + 1) * npcQuickIntensiveCoefficient[npcFlag]); // npc速度
    playerQuick = getPointByProperty('敏捷', npcSpeed * levelCHSStrategy["攻速比"] + 1 * npcSpeedCoefficient); // 计算玩家敏捷加点
    // 计算玩家力量点数
    var playerSpeed = getPropertyByPoint('敏捷', playerQuick); // 玩家速度

    var attackTimes = levelCHSStrategy["攻击次数"]; // 玩家攻击npc次数
    var attackedNum = levelCHSStrategy["被攻击次数"]; // 被攻击次数

    var npcHP = Math.ceil(Math.ceil(npcHealthStepNum * npcHPCoefficient * (currentLevel + 1) * npcHealthIntensiveCoefficient[npcFlag]) * (1 - CDNum * CDCoefficient)); // npc血
    var npcWill = Math.ceil(npcWillStepNum * (currentLevel + 1) * npcWillIntensiveCoefficient[npcFlag]); // npc意志
    var npcDefence = Math.round(npcWill / (npcWill + DFCardinal) * 100) / 100; // npc防
    var npcAttack = Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[npcFlag]) * npcAttackCoefficient * fullCDCoefficient); // npc攻

    var basePower = basePoints["力量"]; // 计算基础力量
    var baseInteligence = basePoints["智力"]; // 计算基础智力
    var baseHealth = basePoints["体质"]; // 计算基础体质

    playerPower = npcHP + 1 - Math.floor(playerAttackCoefficient * basePower * (1 - npcDefence)) * attackTimes;
    playerPower = Math.ceil((playerPower + attackTimes)/ (playerAttackCoefficient * (1 - npcDefence) * attackTimes));
    playerPower = Math.max(playerPower, 1); // 计算玩家力量加点

    var playerAgility = getPointByPer("灵活", currentLevel, npcFlag2, levelCHSStrategy["期望暴击率"], 0);
   // var playerAgility1 = attackedNum == 0 ? 1 : getPointAgainstSP("灵活", currentLevel, npcFlag, 0, attackedNum, npcPropability);
    // playerAgility = Math.max(playerAgility,playerAgility1);

    var playerInteligence = getPointByPer("智力", currentLevel, npcFlag2, levelCHSStrategy["期望技能率"], 0);
     // var playerInteligence1 = attackedNum == 0 ? 1 : getPointAgainstSP("智力", currentLevel, npcFlag, 0, attackedNum, npcPropability);
     // playerInteligence = Math.max(playerInteligence,playerInteligence1);

//console.log("攻击次数: " + attackTimes + " 被攻击次数 " + attackedNum);
    // 使用微分近似计算最优意志加点
    var playerWill = attackedNum == 0 ? 1 : Math.floor(Math.sqrt(DFCardinal * npcAttack / (playerHPCoefficient * extraPointList.get('耐力') / 100))) - 150;
    playerWill = Math.max(playerWill,1);
    var maxHPPlayerHealth = getPointByProperty("体质", currentLife);
    var maxPlayerHealth = basePoints["分配点"] - playerAgility - 1 - playerInteligence - playerPower - playerQuick;
    playerHealth = basePoints["分配点"] - playerAgility - playerWill - playerInteligence - playerPower - playerQuick; // 计算玩家体质加点
    if(playerHealth < maxHPPlayerHealth){
        // 意志加点已损害最大生命值,需减小至不损害最大生命值
        var diffPoint = Math.min(maxHPPlayerHealth - playerHealth,playerWill - 1);
        playerHealth += diffPoint;
        playerWill -= diffPoint;
    }
//console.log("计算体质: " + playerHealth + "  " + basePoints["分配点"] + "  " + playerAgility + "  " + playerWill + "  " + playerInteligence + "  " + playerPower + "  " + playerQuick);
    // 生成下一层分配点方案
    return {
        "力量": playerPower,
        "体质": playerHealth,
        "敏捷": playerQuick,
        "灵活": playerAgility,
        "智力": playerInteligence,
        "意志": playerWill
    };

}

function getNextAttackedTimes(currentLevel, npcFlag, levelPoints) {
// 通过配点参数计算攻略下一层玩家受攻击次数

    var npcParam = getParamForNPCNextLevel(currentLevel, npcFlag, levelPoints); //计算下一层npc参数

    var attackTimes = Math.ceil(npcParam["血"] / Math.floor(getPropertyByPoint("力量", levelPoints["力量"]) * (1 - npcParam["防"]))); // 计算攻击npc次数,上限为不发生暴击(技能)的情况
    var npcHP = -1;
    while (npcHP <= 0 && attackTimes > 0) {
        // 计算打倒npc所需攻击次数临界值
        npcHP = npcParam["血"];
        attackTimes--;
        var expectCriticalHitNum = attackTimes - CritBinom(attackTimes, 1 - getPerByPoint("灵活", currentLevel + 1, npcFlag, levelPoints["灵活"]), playerPropability); // 期望玩家暴击次数
        var expectSkillNum = attackTimes - CritBinom(attackTimes, 1 - getPerByPoint("智力", currentLevel + 1, npcFlag, levelPoints["智力"]), playerPropability); // 期望玩家技能次数
        var expectCHSNum = attackTimes - CritBinom(attackTimes, 1 - getPerByPoint("灵活", currentLevel + 1, npcFlag, levelPoints["灵活"]) * getPerByPoint("智力", currentLevel + 1, npcFlag, levelPoints["智力"]), playerPropability); // 期望玩家技能、暴击叠加次数
        var npcDamage = Math.floor(getPropertyByPoint("力量", levelPoints["力量"]) * (1 - npcParam["防"])) * (attackTimes + expectCriticalHitNum); //+暴击伤害
        var antiInteligence = Math.round((levelPoints["智力"] + basePoints["智力"] + Math.ceil(npcInteligenceStepNum * (currentLevel + 1) * npcInteligenceIntensiveCoefficient[npcFlag])) / antiInteligenceCoefficient);
        var sumHealthInteligence = basePoints["体质"] + levelPoints["体质"] + basePoints["智力"] + levelPoints["智力"] - antiInteligence;
        npcDamage += Math.floor(sumHealthInteligence * 5 * (1 - npcParam["防"])) * expectSkillNum; //+技能伤害
        npcDamage += Math.floor(sumHealthInteligence * 5 * (1 - npcParam["防"])) * expectCHSNum; //+暴击、技能叠加伤害
        npcHP = npcHP - npcDamage;
    }
    attackTimes++;

    return Math.floor(attackTimes * npcParam["速"] / getPropertyByPoint('敏捷', levelPoints["敏捷"]));

}

function restLifeInNextLevelByPoints(currentLevel, currentLife, npcFlag, levelPoints) {
// 通过配点参数计算攻略下一层玩家的剩余生命值,加点参数是独立存在,不依赖与npc种类,故可以随便用(计算量更大)
    if(levelPoints["体质"] < 1){
        return 0;
    }
    var npcParam = getParamForNPCNextLevel(currentLevel, npcFlag, levelPoints); //计算下一层npc参数
    var attackedTimes = getNextAttackedTimes(currentLevel, npcFlag, levelPoints); // 玩家被攻击次数
    var playerDamage = 0; // 计算受到伤害


    var expectCriticalHitNum = attackedTimes - CritBinom(attackedTimes, 1 - npcParam["暴击率"], npcPropability); // 期望npc暴击次数
    var expectSkillNum = attackedTimes - CritBinom(attackedTimes, 1 - npcParam["技能率"], npcPropability); // 期望npc技能次数
    playerDamage += Math.ceil((attackedTimes + expectCriticalHitNum) * (1 - getPropertyByPoint("意志", levelPoints["意志"])) * npcParam["攻"]); //+暴击
    playerDamage += Math.ceil((expectSkillNum * (expectSkillNum + 1) / 2 + expectSkillNum * (attackedTimes - expectSkillNum - 1)) * npcSKLAttack * npcParam["攻"]); //+技能
    if (currentLife === 0) {
        // currentLife为0表示刚开始打
        return Math.max(getPropertyByPoint("体质", levelPoints["体质"]) - playerDamage, 0);
    }
    if (currentLife <= playerDamage) {
        // 被击败,来不及回血
        return 0;
    }
    playerDamage -= Math.floor(extraPointList.get('耐力') / 100 * getPropertyByPoint("体质", levelPoints["体质"]));
    return Math.min(currentLife - playerDamage, getPropertyByPoint("体质", levelPoints["体质"]));

}



// 安全系数
var securityStrong = 0.8;  // 针对壮汉
var securitySwift = 0.5;  // 针对记者
var securityRecover = 0.6;  // 回血期

playerPropability = 0.5;   // 默认事件发生概率初始值,脸越黑设得越大
npcPropability = 0.3; // 默认npc事件发生概率初始值,脸越黑设得越小

var playerPropability0 = 0.5;   // 默认事件发生概率初始值,脸越黑设得越大
var npcPropability0 = 0.3; // 默认npc事件发生概率初始值,脸越黑设得越小
var recoverLevel = 2.5;  // 预计回复楼层系数,根据连续几层不碰到强化npc进行估算,脸越黑设得越小

var safeHP = 150;

// 策略参数

// levelCHSStrategy为自定制方案,攻速比、攻击次数与getNextLevelByCHStrategy的第一个npcFlag(npcFlag)配合,确定针对npcFlag2无暴击技能的敏捷、力量;
// 被攻击次数确定意志,及封住npc暴击技能的灵活、智力;
// 期望暴击率与getNextLevelByCHStrategy的第二个npcFlag(npcFlag2)配合,求出针对npcFlag2暴击技能的灵活、智力
var LevelCHStrategy1 = {"攻速比": 2, "攻击次数": 4, "被攻击次数": 1, "期望暴击率": 0.21, "期望技能率": 0.001};  // 自定制方案 (4刀流)
var LevelCHStrategy2 = {"攻速比": 2, "攻击次数": 2, "被攻击次数": 0, "期望暴击率": 0.001, "期望技能率": 0.001};  // 自定制方案 (2刀流)
var LevelCHStrategy3 = {"攻速比": 2, "攻击次数": 3, "被攻击次数": 0, "期望暴击率": 0.3, "期望技能率": 0.001};  // 自定制方案 (3刀流)
var LevelCHStrategy4 = {"攻速比": 2, "攻击次数": 7, "被攻击次数": 0, "期望暴击率": 0.001, "期望技能率": 0.001};  // 自定制方案 (7刀流)
var LevelCHStrategy5 = {"攻速比": 2, "攻击次数": 5, "被攻击次数": 0, "期望暴击率": 0.001, "期望技能率": 0.001};  // 自定制方案 (5刀流)
var LevelCHStrategy6 = {"攻速比": 2, "攻击次数": 6, "被攻击次数": 0, "期望暴击率": 0.001, "期望技能率": 0.001};  // 自定制方案 (6刀流)
var LevelCHStrategy7 = {"攻速比": 2, "攻击次数": 4, "被攻击次数": 1, "期望暴击率": 0.21, "期望技能率": 0.001};  // 自定制方案 (4刀流)
var LevelCHStrategy8 = {"攻速比": 2, "攻击次数": 5, "被攻击次数": 1, "期望暴击率": 0.21, "期望技能率": 0.001};  // 自定制方案 (4刀流)
var LevelCHStrategy9 = {"攻速比": 1.5, "攻击次数": 3, "被攻击次数": 1, "期望暴击率": 0.21, "期望技能率": 0.001};  // 自定制方案 (4刀流)
var LevelCHStrategy10 = {"攻速比": 1.5, "攻击次数": 4, "被攻击次数": 1, "期望暴击率": 0.21, "期望技能率": 0.001};  // 自定制方案 (4刀流)

// 对boss加点方案;
var LevelCHStrategyboss = {"攻速比": 1.25, "攻击次数": 5, "被攻击次数": 3, "期望暴击率": 0.001, "期望技能率": 0.001};  // 自定制方案 (boss5刀流)
var LevelCHStrategyboss1 = {"攻速比": 1.25, "攻击次数": 6, "被攻击次数": 3, "期望暴击率": 0.28, "期望技能率": 0.001};  // 自定制方案 (boss6刀流)
var LevelCHStrategyboss2 = {"攻速比": 1.25, "攻击次数": 7, "被攻击次数": 3, "期望暴击率": 0.5, "期望技能率": 0.001};  // 自定制方案 (boss7刀流)
var LevelCHStrategyboss3 = {"攻速比": 1.25, "攻击次数": 8, "被攻击次数": 3, "期望暴击率": 0.5, "期望技能率": 0.001};  // 自定制方案 (boss8刀流)
var LevelCHStrategyboss4 = {"攻速比": 1.333333333, "攻击次数": 5, "被攻击次数": 2, "期望暴击率": 0.34, "期望技能率": 0.001};  // 自定制方案 (boss5刀流)
var LevelCHStrategyboss5 = {"攻速比": 1.333333333, "攻击次数": 6, "被攻击次数": 2, "期望暴击率": 0.001, "期望技能率": 0.001};  // 自定制方案 (boss6刀流)
var LevelCHStrategyboss6 = {"攻速比": 1.333333333, "攻击次数": 7, "被攻击次数": 2, "期望暴击率": 0.001, "期望技能率": 0.001};  // 自定制方案 (boss7刀流)
var LevelCHStrategyboss7 = {"攻速比": 1.5, "攻击次数": 6, "被攻击次数": 1, "期望暴击率": 0.001, "期望技能率": 0.001};  // 自定制方案 (boss4刀流)
var LevelCHStrategyboss8 = {"攻速比": 1.5, "攻击次数": 5, "被攻击次数": 1, "期望暴击率": 0.001, "期望技能率": 0.001};  // 自定制方案 (boss5刀流)
var LevelCHStrategyboss9 = {"攻速比": 1.25, "攻击次数": 5, "被攻击次数": 3, "期望暴击率": 0.001, "期望技能率": 0.001};  // 自定制方案 (boss5刀流)

function getOptimalNextLevelPoints(currentLevel, currentLife, npcFlag) {
// 根据下一层各种npc数值及玩家属性及剩余生命情况,计算出最优方案参数,根据情况比较4刀、2刀、3刀的暴击流
    var npcAttackn = Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[0]) * npcAttackCoefficient * fullCDCoefficient); // 普通npc攻
    var npcAttacks1 = Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[2]) * npcAttackCoefficient * fullCDCoefficient); // 强壮npc1次攻击
    var npcAttacks2 = 2 * Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[2]) * npcAttackCoefficient * fullCDCoefficient); // 强壮npc2次攻击
    var npcAttackq = 2 * Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[3]) * npcAttackCoefficient * fullCDCoefficient); // 快速npc2次攻击
    var npcAttackb1 = 2 * Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[1]) * npcAttackCoefficient * fullCDCoefficient); // bossnpc2次攻击
    var npcAttackb2 = 2.25 * Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[1]) * npcAttackCoefficient * fullCDCoefficient); // bossnpc2次攻击
    var npcAttackb3 = 3.5 * Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[1]) * npcAttackCoefficient * fullCDCoefficient); // bossnpc3次攻击
    var npcAttackb4 = 3 * Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[1]) * npcAttackCoefficient * fullCDCoefficient); // bossnpc3次攻击
    var npcAttackb5 = 1 * Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[1]) * npcAttackCoefficient * fullCDCoefficient); // bossnpc3次攻击
    var npcAttackb6 = 3.25 * Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[1]) * npcAttackCoefficient * fullCDCoefficient); // bossnpc3次攻击

    var baseWill = basePoints["意志"] + 1;
    var baseDefence = Math.round(baseWill / (baseWill + DFCardinal) * 100) / 100; //玩家基础防
    var basedn = Math.floor(currentLife / npcAttackn * 100) / 100; // 普通npc安全防
    var basefn = getPointByProperty('意志', 1.01 - basedn); // 计算玩家对普通npc安全意志加点
 if(currentLevel % 10 == 9){
        // 针对boss加点


    var levelPoints = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss);
    var levelPoints1 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss1);
    var levelPoints2 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss2);
    var levelPoints3 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss3);
    var levelPoints4 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss4);
    var levelPoints5 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss5);
    var levelPoints6 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss6);
    var levelPoints7 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss7);
    var levelPoints8 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss8);
    var levelPoints9 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss9);

    levelPoints["灵活"] = getPointByPer("灵活", currentLevel + 1, 1, 0.2, 1);
    levelPoints["意志"] = 1;
    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
    levelPoints1["意志"] = 1;
    levelPoints1["体质"] = basePoints["分配点"] - levelPoints1["力量"] - levelPoints1["敏捷"] - levelPoints1["灵活"] - levelPoints1["智力"] - levelPoints1["意志"];
    levelPoints1["体质"] = Math.max(levelPoints1["体质"], 1);
    levelPoints1["灵活"] = Math.min(levelPoints1["灵活"], basePoints["分配点"] - levelPoints1["力量"] - levelPoints1["敏捷"] - levelPoints1["体质"] - levelPoints1["智力"] - levelPoints1["意志"]);
if(levelPoints1["体质"] >= levelPoints["体质"]){
    var levelPoints = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss1);
    levelPoints["灵活"] =  Math.max(levelPoints1["灵活"], getPointByPer("灵活", currentLevel + 1, 1, 0.11, 1));
    levelPoints1["灵活"] =  Math.max(levelPoints1["灵活"], getPointByPer("灵活", currentLevel + 1, 1, 0.11, 1));
    levelPoints1["意志"] = 1;
    levelPoints1["体质"] = basePoints["分配点"] - levelPoints1["力量"] - levelPoints1["敏捷"] - levelPoints1["灵活"] - levelPoints1["智力"] - levelPoints1["意志"];
    levelPoints1["体质"] = Math.max(levelPoints1["体质"], 1);
    levelPoints1["灵活"] = Math.min(levelPoints1["灵活"], basePoints["分配点"] - levelPoints1["力量"] - levelPoints1["敏捷"] - levelPoints1["体质"] - levelPoints1["智力"] - levelPoints1["意志"]);
    levelPoints2["意志"] = 1;
    levelPoints2["灵活"] = Math.max(levelPoints2["灵活"], getPointByPer("灵活", currentLevel + 1, 1, 0.11, 1));
    levelPoints2["体质"] = basePoints["分配点"] - levelPoints2["力量"] - levelPoints2["敏捷"] - levelPoints2["灵活"] - levelPoints2["智力"] - levelPoints2["意志"];
    levelPoints2["体质"] = Math.max(levelPoints2["体质"], 1);
    levelPoints2["灵活"] = Math.min(levelPoints2["灵活"], basePoints["分配点"] - levelPoints2["力量"] - levelPoints2["敏捷"] - levelPoints2["体质"] - levelPoints2["智力"] - levelPoints2["意志"]);
    var Probability1 = getTimesProbability(5,1,getPerByPoint("灵活", currentLevel + 1, 1, levelPoints1["灵活"])) * (1 - getTimesProbability(3,1,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints1["灵活"])));
    var Probability2 = getTimesProbability(5,2,getPerByPoint("灵活", currentLevel + 1, 1, levelPoints2["灵活"])) * (1 - getTimesProbability(3,1,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints2["灵活"])));
	    if(levelPoints2["体质"] * Probability2 >= levelPoints1["体质"] * Probability1){
		var levelPoints = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss2);
		    levelPoints["灵活"] = levelPoints2["灵活"];
		    levelPoints3["意志"] = 1;
		    levelPoints3["灵活"] = Math.max(levelPoints3["灵活"], getPointByPer("灵活", currentLevel + 1, 1, 0.001, 1));
		    levelPoints3["体质"] = basePoints["分配点"] - levelPoints3["力量"] - levelPoints3["敏捷"] - levelPoints3["灵活"] - levelPoints3["智力"] - levelPoints3["意志"];
		    levelPoints3["体质"] = Math.max(levelPoints3["体质"], 1);
		    levelPoints3["灵活"] = Math.min(levelPoints3["灵活"], basePoints["分配点"] - levelPoints3["力量"] - levelPoints3["敏捷"] - levelPoints3["体质"] - levelPoints3["智力"] - levelPoints3["意志"]);
		var Probability1 = getTimesProbability(5,3,getPerByPoint("灵活", currentLevel + 1, 1, levelPoints3["灵活"])) * (1 - getTimesProbability(3,1,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints3["灵活"])));
			if(levelPoints3["体质"] * Probability1 >= levelPoints2["体质"] * Probability2){
				var levelPoints = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss3);
				levelPoints["灵活"] = levelPoints3["灵活"];
			}
	   }
 }
    var basehp = basePoints["体质"] * 20 + fullRemiHP;
    var basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb3 /20 * 1.08 * (1 - baseDefence) - basehp / 20), 1); // 基础体质点数
    levelPoints["体质"] = Math.min(levelPoints["体质"], basehppoint);  // 对boss基础体质点
    levelPoints["体质"] = Math.max(levelPoints["体质"], 1);
    levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];



    levelPoints["意志"] = Math.max(Math.floor(levelPoints["意志"] / 2), 1);
    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb3 /20 * 1.08 * (1 - Math.round((levelPoints["意志"] + basePoints["意志"]) / (levelPoints["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
    levelPoints["体质"] = Math.min(levelPoints["体质"], basehppoint);  // 对boss基础体质点
    levelPoints["意志"] = Math.floor((basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"]- levelPoints["意志"]) / 2) + levelPoints["意志"];
    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb3 /20 * 1.08 * (1 - Math.round((levelPoints["意志"] + basePoints["意志"]) / (levelPoints["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
    levelPoints["体质"] = Math.min(levelPoints["体质"], basehppoint);  // 对boss基础体质点
    levelPoints["意志"] = Math.floor((basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"]- levelPoints["意志"]) / 2) + levelPoints["意志"];
    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb3 /20 * 1.08 * (1 - Math.round((levelPoints["意志"] + basePoints["意志"]) / (levelPoints["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
    levelPoints["体质"] = Math.min(levelPoints["体质"], basehppoint);  // 对boss基础体质点
    levelPoints["意志"] = Math.floor((basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"]- levelPoints["意志"]) / 2) + levelPoints["意志"];
    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb3 /20 * 1.08 * (1 - Math.round((levelPoints["意志"] + basePoints["意志"]) / (levelPoints["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
    levelPoints["体质"] = Math.min(levelPoints["体质"], basehppoint);  // 对boss基础体质点
    levelPoints["意志"] = Math.floor((basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"]- levelPoints["意志"]) / 2) + levelPoints["意志"];
    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb3 /20 * 1.08 * (1 - Math.round((levelPoints["意志"] + basePoints["意志"]) / (levelPoints["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
    levelPoints["体质"] = Math.min(levelPoints["体质"], basehppoint);  // 对boss基础体质点
    levelPoints["意志"] = Math.floor((basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"]- levelPoints["意志"]) / 2) + levelPoints["意志"];
    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb3 /20 * 1.08 * (1 - Math.round((levelPoints["意志"] + basePoints["意志"]) / (levelPoints["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
    levelPoints["体质"] = Math.min(levelPoints["体质"], basehppoint);  // 对boss基础体质点
    levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];



    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
    levelPoints["体质"] = Math.max(levelPoints["体质"], 1);
    levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];
    levelPoints["灵活"] = Math.max(levelPoints["灵活"], 1);
    levelPoints["力量"] = basePoints["分配点"] - levelPoints["灵活"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];

if (levelPoints["灵活"] + levelPoints["意志"] -getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb4 * 100) / 100) > 1) {
	levelPoints["意志"] = Math.max(levelPoints["意志"], getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb4 * 100) / 100)); // 安全意志
	levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];
}
if (levelPoints["灵活"] + levelPoints["意志"] -getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb6 * 100) / 100) > 1) {
	levelPoints["意志"] = Math.max(levelPoints["意志"], getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb6 * 100) / 100)); // 安全意志
	levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];
}
if (levelPoints["灵活"] + levelPoints["意志"] -getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb3 * 100) / 100) > 1) {
	levelPoints["意志"] = Math.max(levelPoints["意志"], getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb3 * 100) / 100)); // 安全意志
	levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];
}





    levelPoints4["灵活"] =  Math.max(getPointByPer("灵活", currentLevel + 1, 1, 0.34, 0), getPointByPer("灵活", currentLevel + 1, 1, 0.16, 1));
    levelPoints4["意志"] = 1;
    levelPoints4["体质"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["意志"];
    levelPoints4["体质"] = Math.max(levelPoints4["体质"], 1);
    levelPoints4["灵活"] = Math.min(levelPoints4["灵活"], basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["体质"] - levelPoints4["智力"] - levelPoints4["意志"]);
if(levelPoints4["灵活"] > 0){
    levelPoints5["灵活"] =  Math.max(getPointByPer("灵活", currentLevel + 1, 1, 0.59, 0), getPointByPer("灵活", currentLevel + 1, 1, 0.16, 1));
	    levelPoints5["意志"] = 1;
	    levelPoints5["体质"] = basePoints["分配点"] - levelPoints5["力量"] - levelPoints5["敏捷"] - levelPoints5["灵活"] - levelPoints5["智力"] - levelPoints5["意志"];
	    levelPoints5["体质"] = Math.max(levelPoints5["体质"], 1);
	    levelPoints5["灵活"] = Math.min(levelPoints5["灵活"], basePoints["分配点"] - levelPoints5["力量"] - levelPoints5["敏捷"] - levelPoints5["体质"] - levelPoints5["智力"] - levelPoints5["意志"]);
		    if(levelPoints5["灵活"] > 0){
			    var Probability1 = getTimesProbability(4,2,getPerByPoint("灵活", currentLevel + 1, 1, levelPoints5["灵活"])) * (1 - getTimesProbability(2,1,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints5["灵活"])) - getTimesProbability(2,2,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints5["灵活"])));
			    var Probability2 = getTimesProbability(4,1,getPerByPoint("灵活", currentLevel + 1, 1, levelPoints4["灵活"])) * (1 - getTimesProbability(2,1,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints4["灵活"])) - getTimesProbability(2,2,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints4["灵活"])));
				if(levelPoints5["体质"] * Probability1 >= levelPoints4["体质"] * Probability2){
					var levelPoints4 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 1, 1 , LevelCHStrategyboss5);
					levelPoints4["灵活"] = levelPoints5["灵活"];

				}

		    }
		    var basehp = basePoints["体质"] * 20 + fullRemiHP;
		    var basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb2 /20 * 1.08 * (1 - baseDefence) - basehp / 20), 1); // 基础体质点数
		    levelPoints4["体质"] = Math.min(levelPoints4["体质"], basehppoint);  // 对boss基础体质点
		    levelPoints4["意志"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["体质"];
		    levelPoints4["意志"] = Math.max(Math.floor(levelPoints4["意志"] / 2), 1);
		    levelPoints4["体质"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["意志"];
		    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb2 /20 * 1.08 * (1 - Math.round((levelPoints4["意志"] + basePoints["意志"]) / (levelPoints4["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
		    levelPoints4["体质"] = Math.min(levelPoints4["体质"], basehppoint);  // 对boss基础体质点
		    levelPoints4["意志"] = Math.floor((basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["体质"]- levelPoints4["意志"]) / 2) + levelPoints4["意志"];
		    levelPoints4["体质"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["意志"];
		    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb2 /20 * 1.08 * (1 - Math.round((levelPoints4["意志"] + basePoints["意志"]) / (levelPoints4["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
		    levelPoints4["体质"] = Math.min(levelPoints4["体质"], basehppoint);  // 对boss基础体质点
		    levelPoints4["意志"] = Math.floor((basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["体质"]- levelPoints4["意志"]) / 2) + levelPoints4["意志"];
		    levelPoints4["体质"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["意志"];
		    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb2 /20 * 1.08 * (1 - Math.round((levelPoints4["意志"] + basePoints["意志"]) / (levelPoints4["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
		    levelPoints4["体质"] = Math.min(levelPoints4["体质"], basehppoint);  // 对boss基础体质点
		    levelPoints4["意志"] = Math.floor((basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["体质"]- levelPoints4["意志"]) / 2) + levelPoints4["意志"];
		    levelPoints4["体质"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["意志"];
		    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb2 /20 * 1.08 * (1 - Math.round((levelPoints4["意志"] + basePoints["意志"]) / (levelPoints4["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
		    levelPoints4["体质"] = Math.min(levelPoints4["体质"], basehppoint);  // 对boss基础体质点
		    levelPoints4["意志"] = Math.floor((basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["体质"]- levelPoints4["意志"]) / 2) + levelPoints4["意志"];
		    levelPoints4["体质"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["意志"];
		    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb2 /20 * 1.08 * (1 - Math.round((levelPoints4["意志"] + basePoints["意志"]) / (levelPoints4["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
		    levelPoints4["体质"] = Math.min(levelPoints4["体质"], basehppoint);  // 对boss基础体质点
		    levelPoints4["意志"] = Math.floor((basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["体质"]- levelPoints4["意志"]) / 2) + levelPoints4["意志"];
		    levelPoints4["体质"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["意志"];
		    basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - npcAttackb2 /20 * 1.08 * (1 - Math.round((levelPoints4["意志"] + basePoints["意志"]) / (levelPoints4["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) - basehp / 20), 1);
		    levelPoints4["体质"] = Math.min(levelPoints4["体质"], basehppoint);  // 对boss基础体质点
		    levelPoints4["意志"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["体质"];
		    levelPoints4["意志"] = Math.max(levelPoints4["意志"], 1);
		    levelPoints4["体质"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["灵活"] - levelPoints4["智力"] - levelPoints4["意志"];

	if (levelPoints4["灵活"] + levelPoints4["意志"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb1 * 100) / 100) > 0) {
		levelPoints4["意志"] = Math.max(levelPoints4["意志"], getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb1 * 100) / 100)); // 安全意志
		levelPoints4["灵活"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["体质"] - levelPoints4["智力"] - levelPoints4["意志"];
	}

	if (levelPoints4["灵活"] + levelPoints4["意志"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb2 * 100) / 100) > 0) {
		levelPoints4["意志"] = Math.max(levelPoints4["意志"], getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb2 * 100) / 100)); // 安全意志
		levelPoints4["灵活"] = basePoints["分配点"] - levelPoints4["力量"] - levelPoints4["敏捷"] - levelPoints4["体质"] - levelPoints4["智力"] - levelPoints4["意志"];
	}


		    var restLife1 = currentLife - npcAttackb3 * (1 - (levelPoints["意志"] + basePoints["意志"])/(150 + levelPoints["意志"] + basePoints["意志"]));
		    restLife1 = Math.min(restLife1, (levelPoints["体质"] + basePoints["体质"]) * 20);  
		    var restLife2 = currentLife - npcAttackb2 * (1 - (levelPoints4["意志"] + basePoints["意志"])/(150 + levelPoints4["意志"] + basePoints["意志"]));
		    restLife2 = Math.min(restLife2, (levelPoints4["体质"] + basePoints["体质"]) * 20);  
			if(levelPoints1["力量"] === levelPoints["力量"]){
				var Probability1 = getTimesProbability(5,1,getPerByPoint("灵活", currentLevel + 1, 1, levelPoints["灵活"])) * (1 - getTimesProbability(3,1,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints["灵活"])) - getTimesProbability(3,2,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints["灵活"])) - getTimesProbability(3,3,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints["灵活"])));
			}
			if(levelPoints2["力量"] === levelPoints["力量"]){
				var Probability1 = getTimesProbability(5,2,getPerByPoint("灵活", currentLevel + 1, 1, levelPoints["灵活"])) * (1 - getTimesProbability(3,1,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints["灵活"])) - getTimesProbability(3,2,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints["灵活"])) - getTimesProbability(3,3,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints["灵活"])));
			}
			if(levelPoints3["力量"] === levelPoints["力量"]){
				var Probability1 = getTimesProbability(5,3,getPerByPoint("灵活", currentLevel + 1, 1, levelPoints["灵活"])) * (1 - getTimesProbability(3,1,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints["灵活"])) - getTimesProbability(3,2,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints["灵活"])) - getTimesProbability(3,3,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints["灵活"])));
			}
		    var Probability2 = getTimesProbability(4,1,getPerByPoint("灵活", currentLevel + 1, 1, levelPoints4["灵活"])) * (1 - getTimesProbability(2,1,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints4["灵活"])) - getTimesProbability(2,2,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints4["灵活"])));
			if(levelPoints4["力量"] === levelPoints5["力量"]){
				var Probability2 = getTimesProbability(4,2,getPerByPoint("灵活", currentLevel + 1, 1, levelPoints4["灵活"])) * (1 - getTimesProbability(2,1,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints4["灵活"])) - getTimesProbability(2,2,getNPCPerByPoint("灵活", currentLevel, 1, levelPoints4["灵活"])));
			}

			restLife1 = restLife1 - npcAttackb5 * (1 - Probability1) *(1 - (levelPoints["意志"] + basePoints["意志"])/(150 + levelPoints["意志"] + basePoints["意志"])); 
			restLife2 = restLife2 - npcAttackb5 * (1 - Probability2) * (1 - (levelPoints4["意志"] + basePoints["意志"])/(150 + levelPoints4["意志"] + basePoints["意志"]));
		    if(restLife2 > restLife1){
				levelPoints["体质"] = levelPoints4["体质"];
				levelPoints["力量"] = levelPoints4["力量"];
				levelPoints["体质"] = levelPoints4["体质"];
				levelPoints["敏捷"] = levelPoints4["敏捷"];
				levelPoints["灵活"] = levelPoints4["灵活"];
				levelPoints["智力"] = levelPoints4["智力"];
				levelPoints["意志"] = levelPoints4["意志"];
		    restLife1 = restLife2;  
		    }
		    if(restLife1 < 0){
				levelPoints["体质"] = levelPoints4["体质"];
				levelPoints["力量"] = levelPoints4["力量"];
				levelPoints["体质"] = levelPoints4["体质"];
				levelPoints["敏捷"] = levelPoints4["敏捷"];
				levelPoints["灵活"] = levelPoints4["灵活"];
				levelPoints["智力"] = levelPoints4["智力"];
				levelPoints["意志"] = levelPoints4["意志"];
		    restLife1 = restLife2;  
		    }



}


if(levelPoints1["敏捷"] === levelPoints["敏捷"]){
	var restLife1 = currentLife - npcAttackb4 * (1 - (levelPoints["意志"] + basePoints["意志"])/(150 + levelPoints["意志"] + basePoints["意志"]));

            levelPoints5["灵活"] =  Math.max(getPointByPer("灵活", currentLevel + 1, 1, 0.59, 0), getPointByPer("灵活", currentLevel + 1, 1, 0.16, 1));
	    levelPoints5["意志"] = 1;
	    levelPoints5["体质"] = basePoints["分配点"] - levelPoints5["力量"] - levelPoints5["敏捷"] - levelPoints5["灵活"] - levelPoints5["智力"] - levelPoints5["意志"];
	    levelPoints5["体质"] = Math.max(levelPoints5["体质"], 1);
	    levelPoints5["灵活"] = Math.min(levelPoints5["灵活"], basePoints["分配点"] - levelPoints5["力量"] - levelPoints5["敏捷"] - levelPoints5["体质"] - levelPoints5["智力"] - levelPoints5["意志"]);

		    if(restLife1 < 0){
				levelPoints["体质"] = levelPoints5["体质"];
				levelPoints["力量"] = levelPoints5["力量"];
				levelPoints["体质"] = levelPoints5["体质"];
				levelPoints["敏捷"] = levelPoints5["敏捷"];
				levelPoints["灵活"] = levelPoints5["灵活"];
				levelPoints["智力"] = levelPoints5["智力"];
				levelPoints["意志"] = levelPoints5["意志"];
				if (levelPoints["灵活"] + levelPoints["意志"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb1 * 100) / 100) > 0) {
					levelPoints["意志"] = Math.max(levelPoints["意志"], getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb1 * 100) / 100)); // 安全意志
					levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];
				}
				if (levelPoints["灵活"] + levelPoints["意志"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb2 * 100) / 100) > 0) {
					levelPoints["意志"] = Math.max(levelPoints["意志"], getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb2 * 100) / 100)); // 安全意志
					levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];
				}

		    }

}
if(levelPoints5["敏捷"] === levelPoints["敏捷"]){
	var restLife1 = currentLife - npcAttackb1 * (1 - (levelPoints["意志"] + basePoints["意志"])/(150 + levelPoints["意志"] + basePoints["意志"]));

            levelPoints7["灵活"] =  Math.max(getPointByPer("灵活", currentLevel + 1, 1, 0.59, 0), getPointByPer("灵活", currentLevel + 1, 1, 0.16, 1));
	    levelPoints7["意志"] = 1;
	    levelPoints7["体质"] = basePoints["分配点"] - levelPoints7["力量"] - levelPoints7["敏捷"] - levelPoints7["灵活"] - levelPoints7["智力"] - levelPoints7["意志"];
	    levelPoints7["体质"] = Math.max(levelPoints7["体质"], 1);
	    levelPoints7["灵活"] = Math.min(levelPoints7["灵活"], basePoints["分配点"] - levelPoints7["力量"] - levelPoints7["敏捷"] - levelPoints7["体质"] - levelPoints7["智力"] - levelPoints7["意志"]);

		    if(restLife1 < 0){
				levelPoints["体质"] = levelPoints7["体质"];
				levelPoints["力量"] = levelPoints7["力量"];
				levelPoints["体质"] = levelPoints7["体质"];
				levelPoints["敏捷"] = levelPoints7["敏捷"];
				levelPoints["灵活"] = levelPoints7["灵活"];
				levelPoints["智力"] = levelPoints7["智力"];
				levelPoints["意志"] = levelPoints7["意志"];
					if (getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb5 * 100) / 100) - levelPoints["意志"] < levelPoints["灵活"]) {
						levelPoints["意志"] = Math.max(levelPoints["意志"], getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackb5 * 100) / 100)); // 安全意志
						levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];
					}


		    }



}
	levelPoints["灵活"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"], 1);
	levelPoints["体质"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"], 1);
	levelPoints["意志"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["灵活"], 1);
	levelPoints["体质"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"], 1);
	levelPoints["灵活"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"], 1);
	levelPoints["意志"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["灵活"], 1);
	levelPoints["力量"] = basePoints["分配点"] - levelPoints["体质"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];



	    
	    levelPoints["敏捷"] = Math.max(levelPoints["敏捷"] - 1, 1);

	    var pointNump1 = getPropertyByPoint("意志", levelPoints["意志"]);
	    var pointNump2 = getPropertyByPoint("意志", levelPoints["意志"]);
	    while (pointNump1 === pointNump2 && levelPoints["意志"] > 0) {
		levelPoints["意志"]--;
		pointNump2 = getPropertyByPoint("意志", levelPoints["意志"]);
	       
	    }
		levelPoints["意志"]++;
				       

		levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["意志"] - levelPoints["智力"] - levelPoints["体质"];
		var point1 = levelPoints["灵活"];
		var point2 = 0;
		var point3 = 0;
		var pointNump1 = getNPCPerByPoint("灵活", currentLevel , 1, levelPoints["灵活"]);
		var pointNump2 = getNPCPerByPoint("灵活", currentLevel , 1, levelPoints["灵活"]);
		while (pointNump1 === pointNump2 && levelPoints["灵活"] > 0) {
			levelPoints["灵活"]--;
			pointNump2 = getNPCPerByPoint("灵活", currentLevel , 1, levelPoints["灵活"]);
		   
		}
		levelPoints["灵活"]++;
		point2 = point1 - levelPoints["灵活"];
		levelPoints["灵活"] = point1;
		var pointNump1 = getPerByPoint("灵活", currentLevel + 1, 1, levelPoints["灵活"]);
		var pointNump2 = getPerByPoint("灵活", currentLevel + 1, 1, levelPoints["灵活"]);
		while (pointNump1 === pointNump2 && levelPoints["灵活"] > 0) {
			levelPoints["灵活"]--;
			pointNump2 = getPerByPoint("灵活", currentLevel + 1, 1, levelPoints["灵活"]);
		   
		}
		levelPoints["灵活"]++;
		point3 = point1 - levelPoints["灵活"];
		levelPoints["灵活"] = point1 - Math.min(point2, point3);


		levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];
	    var pointNump1 = getPropertyByPoint("意志", levelPoints["意志"]);
	    var pointNump2 = getPropertyByPoint("意志", levelPoints["意志"]);
	    while (pointNump1 === pointNump2 && levelPoints["意志"] > 0) {
		levelPoints["意志"]--;
		pointNump2 = getPropertyByPoint("意志", levelPoints["意志"]);
	       
	    }
		levelPoints["意志"]++;


		
	    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];






   return levelPoints;
    }


    // 4刀暴击流
    attackFlag = 4;
    var levelPoints = getNextLevelPointsByCHStrategy(currentLevel , currentLife , npcFlag, 3 , LevelCHStrategy1);
    var levelPoints2 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , npcFlag, 0 , LevelCHStrategy2);
    var levelPoints3 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , npcFlag, 0 , LevelCHStrategy3);
    var levelPoints4 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 2, 2 , LevelCHStrategy4);
    var levelPoints5 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 2, 2 , LevelCHStrategy5);
    var levelPoints6 = getNextLevelPointsByCHStrategy(currentLevel , currentLife , 2, 2 , LevelCHStrategy6);
    var levelPoints7 = getNextLevelPointsByCHStrategy(currentLevel , currentLife ,0, 3 , LevelCHStrategy7);
    var levelPoints8 = getNextLevelPointsByCHStrategy(currentLevel , currentLife ,0, 3 , LevelCHStrategy8);
    var levelPoints9 = getNextLevelPointsByCHStrategy(currentLevel , currentLife ,0, 3 , LevelCHStrategy9);
    var levelPoints10 = getNextLevelPointsByCHStrategy(currentLevel , currentLife ,0, 3 , LevelCHStrategy10);
    var npcAttackn1 = Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[0]) * npcAttackCoefficient * fullCDCoefficient); // 普通npc攻

if(basePoints["灵活"] < 50){
     levelPoints["力量"] = levelPoints6["力量"];
     levelPoints["意志"] = 1;
     levelPoints["灵活"] = getPointByPer("灵活", currentLevel + 1, 0, 0.2, 1);
     levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
     var basehp = basePoints["体质"] * 20 + fullRemiHP;
     var basehppoint = Math.max(Math.floor(currentLife /20 * 1.08 - basehp / 20), 1); // 基础体质点数
	if (currentLevel > 0) {
	     var powerppointn = Math.max(levelPoints["体质"] - basehppoint, 0); // 对普通npc自由属性点
	    levelPoints["体质"] = Math.min(levelPoints["体质"], basehppoint);  // 对普通npc基础体质点
	    }
     levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];
     if (levelPoints["意志"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttacks2 * 100) / 100) < 0) {
	levelPoints["力量"] = levelPoints7["力量"];
	levelPoints["体质"] = levelPoints["体质"] + levelPoints6["力量"] - levelPoints7["力量"];
	levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];
     }
        if(levelPoints3["力量"] - levelPoints6["力量"] < powerppointn){
	    levelPoints["力量"] = levelPoints3["力量"];
	    levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];
			if (levelPoints["意志"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttacks1 * 100) / 100) < 0) {
			levelPoints["力量"] = levelPoints7["力量"];
			levelPoints["体质"] = levelPoints["体质"] + levelPoints6["力量"] - levelPoints7["力量"];
			levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];
			   }
			if(basePoints["灵活"] > 20){
				levelPoints["力量"] = levelPoints5["力量"];
				levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - 1 - levelPoints["智力"] - levelPoints["体质"];
				levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];
				levelPoints["意志"] = Math.max(levelPoints["意志"], 1);
				levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
				if (levelPoints["意志"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttacks1 * 100) / 100) < 0) {
					levelPoints["力量"] = levelPoints7["力量"];
					levelPoints["灵活"] = getPointByPer("灵活", currentLevel + 1, 0, 0.2, 1);
					levelPoints["意志"] = 1;
					levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
					levelPoints["体质"] = Math.min(levelPoints["体质"], basehppoint);  // 对普通npc基础体质点
				        levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];

				}

			}

	}
	var basevit = levelPoints3["灵活"] + levelPoints3["体质"];
	if(basevit > 1){
		levelPoints3["力量"] = levelPoints3["力量"];
		levelPoints3["意志"] = 1;
		levelPoints3["体质"] = Math.max(levelPoints3["体质"], 1);
		levelPoints3["灵活"] = basePoints["分配点"] - levelPoints3["力量"] - levelPoints3["敏捷"] - levelPoints3["体质"] - levelPoints3["智力"] - levelPoints3["意志"];
		var npcAttackn1 = (fullRemiHP + (levelPoints["体质"] + basePoints["体质"]) * 20) * 0.08 + currentLife - (1 - Math.round((levelPoints["意志"] + basePoints["意志"]) / (levelPoints["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) * npcAttackn;
		var npcAttackn2 = (fullRemiHP + (levelPoints3["体质"] + basePoints["体质"]) * 20) * 0.08 + currentLife - npcAttackn * (1 - getTimesProbability(2,1,getPerByPoint("灵活", currentLevel + 1, 0, levelPoints3["灵活"])));
		if(levelPoints["力量"] > levelPoints7["力量"]){
			var npcAttackn1 = (fullRemiHP + (levelPoints["体质"] + basePoints["体质"]) * 20) * 0.08 + currentLife - npcAttackn * (1 - getTimesProbability(2,1,getPerByPoint("灵活", currentLevel + 1, 0, levelPoints["灵活"])));
		}
		    npcAttackn1 = Math.min(npcAttackn1, fullRemiHP + (levelPoints["体质"] + basePoints["体质"]) * 20);
		    npcAttackn2 = Math.min(npcAttackn2, fullRemiHP + (levelPoints3["体质"] + basePoints["体质"]) * 20);

		if(npcAttackn2 >= npcAttackn1){
			levelPoints["力量"] = levelPoints3["力量"];
			levelPoints["意志"] = 1;
			levelPoints["体质"] = levelPoints3["体质"];
			levelPoints["灵活"] = levelPoints3["灵活"];
			if (levelPoints["意志"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttacks1 * 100) / 100) >= 0) {
				levelPoints["力量"] = levelPoints5["力量"];
				levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];
				levelPoints["灵活"] = Math.max(levelPoints["灵活"], 1);
				levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
			}

		}
	}

}
if(basePoints["灵活"] >= 50){
	if (basePoints["灵活"] < 60) {
	      levelPoints["灵活"] = getPointByPer("灵活", currentLevel + 1, 0, 0.24, 0);
	    }

    levelPoints["意志"] = 1;
    levelPoints["力量"] = Math.max(levelPoints["力量"], levelPoints4["力量"]); // 比较力量加点
	if (currentLevel > 49) {
	      levelPoints["灵活"] =  Math.max(getPointByPer("灵活", currentLevel + 1, 0, 0.2, 1), getPointByPer("灵活", currentLevel + 1, 0, 0.43, 0));
    levelPoints["力量"] = levelPoints7["力量"]; // 比较力量加点
	    }
    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"]; // 重新计算体质
    var basehp = basePoints["体质"] * 20 + fullRemiHP;
    var basehppoint = Math.max(Math.round(currentLife /20 * 1.08 - basehp / 20), 1); // 基础体质点数
	if (currentLevel > 0) {
		levelPoints["体质"] = Math.min(levelPoints["体质"], basehppoint);  // 对普通npc基础体质点
	}
    levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];
    var basevit = levelPoints3["灵活"] + levelPoints3["体质"];

	if (levelPoints["体质"] + levelPoints["意志"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttacks2 * 100) / 100) < 1) {
		levelPoints["力量"] = levelPoints7["力量"];
		levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];
		if (levelPoints["体质"] + levelPoints["意志"] + levelPoints["灵活"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttacks1 * 100) / 100) > 2) {
			levelPoints["意志"] = Math.max(levelPoints["意志"], getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttacks1 * 100) / 100)); // 安全意志
			levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];
			levelPoints["灵活"] = Math.max(levelPoints["灵活"], 1);
			levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
		}	

	}
	if (currentLevel > 49) {
		  levelPoints3["灵活"] = getPointByPer("灵活", currentLevel + 1, 0, 0.4, 0);
		  levelPoints3["体质"] = basePoints["分配点"] - levelPoints3["力量"] - levelPoints3["敏捷"] - levelPoints3["灵活"] - levelPoints3["智力"] - levelPoints3["意志"];
		  levelPoints5["力量"] = levelPoints3["力量"];

	}
	var basevit = levelPoints3["灵活"] + levelPoints3["体质"];
	if(basevit > 1){
		levelPoints3["力量"] = levelPoints3["力量"];
		levelPoints3["意志"] = 1;
		levelPoints3["体质"] = Math.max(levelPoints3["体质"], 1);
		levelPoints3["灵活"] = basePoints["分配点"] - levelPoints3["力量"] - levelPoints3["敏捷"] - levelPoints3["体质"] - levelPoints3["智力"] - levelPoints3["意志"];
		var npcAttackn1 = (fullRemiHP + (levelPoints["体质"] + basePoints["体质"]) * 20) * 0.08 + currentLife - (1 - getTimesProbability(2,2,getPerByPoint("灵活", currentLevel + 1, 0, levelPoints["灵活"]))) * (1 - Math.round((levelPoints["意志"] + basePoints["意志"]) / (levelPoints["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) * npcAttackn * (1 + getNPCPerByPoint("灵活", currentLevel, 1, levelPoints["灵活"]));
		var npcAttackn2 = (fullRemiHP + (levelPoints3["体质"] + basePoints["体质"]) * 20) * 0.08 + currentLife - (1 - Math.round((levelPoints3["意志"] + basePoints["意志"]) / (levelPoints3["意志"] + basePoints["意志"] + DFCardinal) * 100) / 100) * npcAttackn * (1 + getNPCPerByPoint("灵活", currentLevel, 1, levelPoints3["灵活"])) * (1 - getTimesProbability(2,1,getPerByPoint("灵活", currentLevel + 1, 0, levelPoints3["灵活"])));
		    npcAttackn1 = Math.min(npcAttackn1, fullRemiHP + (levelPoints["体质"] + basePoints["体质"]) * 20);
		    npcAttackn2 = Math.min(npcAttackn2, fullRemiHP + (levelPoints3["体质"] + basePoints["体质"]) * 20);

		if(npcAttackn2 >= npcAttackn1){
			levelPoints["力量"] = levelPoints3["力量"];
			levelPoints["意志"] = 1;
			levelPoints["体质"] = levelPoints3["体质"];
			levelPoints["灵活"] = levelPoints3["灵活"];


		}
	}
}
console.log(levelPoints);
    var restLife1 = restLifeInNextLevelByPoints(currentLevel, currentLife, npcFlag, levelPoints);
console.log("4刀流生命: " + restLife1);
    // 2刀暴击流
if(levelPoints2["体质"] >= 1){
     var restLife2 = restLifeInNextLevelByPoints(currentLevel, currentLife, npcFlag, levelPoints2);
            if(restLife1 < restLife2){
                // 2刀暴击流由于4刀
                levelPoints["力量"] = levelPoints2["力量"];
                levelPoints["体质"] = levelPoints2["体质"];
                levelPoints["敏捷"] = levelPoints2["敏捷"];
                levelPoints["灵活"] = levelPoints2["灵活"];
                levelPoints["智力"] = levelPoints2["智力"];
                levelPoints["意志"] = levelPoints2["意志"];
	    levelPoints["敏捷"] = Math.max(levelPoints["敏捷"] - 1, 1);
	    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
      return levelPoints;
                attackFlag = 2;
            }
    }
if (currentLevel > 49) {
	  levelPoints3["灵活"] = getPointByPer("灵活", currentLevel + 1, 0, 0.4, 0);
	  levelPoints3["体质"] = basePoints["分配点"] - levelPoints3["力量"] - levelPoints3["敏捷"] - levelPoints3["灵活"] - levelPoints3["智力"] - levelPoints3["意志"];
	  levelPoints5["力量"] = levelPoints3["力量"];

}
console.log(levelPoints2);
    var restLife2 = restLifeInNextLevelByPoints(currentLevel, currentLife, npcFlag, levelPoints2);
console.log("2刀流生命: " + restLife2);

console.log(levelPoints3);
    var restLife3 = restLifeInNextLevelByPoints(currentLevel, currentLife, npcFlag, levelPoints3);
console.log("3刀流生命: " + restLife3);
if(levelPoints3["体质"] >= 1){
        var restLife3 = restLifeInNextLevelByPoints(currentLevel, currentLife, npcFlag, levelPoints3);
        if(restLife3 >= restLife1){
              levelPoints["力量"] = levelPoints3["力量"];
              levelPoints["体质"] = levelPoints3["体质"];
              levelPoints["敏捷"] = levelPoints3["敏捷"];
              levelPoints["灵活"] = levelPoints3["灵活"];
              levelPoints["智力"] = levelPoints3["智力"];
              levelPoints["意志"] = levelPoints3["意志"]; 
	      var basehppoint = Math.max(Math.ceil(currentLife /20 * 1.08 - basehp / 20), 1); // 基础体质点数
	if (currentLevel > 0) {
	     var powerppointn = Math.max(levelPoints["体质"] - basehppoint, 0); // 对普通npc自由属性点
	    levelPoints["体质"] = Math.min(levelPoints["体质"], basehppoint);  // 对普通npc基础体质点
	    }
	if (powerppointn + 1 >= getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackn * 100) / 100)) {
	      levelPoints["意志"] = getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackn * 100) / 100); // 安全意志
        }

	if (levelPoints3["体质"] - basehppoint - levelPoints5["力量"] + levelPoints3["力量"] > 0) {
	      levelPoints["力量"] = levelPoints5["力量"];

	     if (levelPoints3["体质"] - basehppoint - levelPoints5["力量"] + levelPoints3["力量"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttacks1 * 100) / 100) >= 0) {
			levelPoints["意志"] = getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttacks1 * 100) / 100); // 安全意志

		}
        }

              levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["意志"] - levelPoints["智力"] - levelPoints["体质"]; 
		if (currentLevel < 49) {
		      levelPoints["灵活"] =  Math.min(levelPoints["灵活"], getPointByPer("灵活", currentLevel + 1, 3, 0.3, 0));
		}
		if (currentLevel > 49) {
			levelPoints["灵活"] =  Math.min(levelPoints["灵活"], getPointByPer("灵活", currentLevel + 1, 0, 0.46, 0) - 2);
		}
		if (currentLevel > 59) {
		      levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["意志"] - levelPoints["智力"] - levelPoints["体质"]; 
		      levelPoints["灵活"] =  Math.min(levelPoints["灵活"], getPointByPer("灵活", currentLevel + 1, 0, 0.5, 0) - 2);
		}

		if (currentLevel % 10 > 3) {
		    levelPoints["灵活"] =  Math.max(getPointByPer("灵活", currentLevel + 1, 0, 0.2, 1), getPointByPer("灵活", currentLevel + 1, 0, 0.51, 0));
		    levelPoints["灵活"] =  Math.min(levelPoints["灵活"], basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"]);
		    levelPoints["意志"] =  Math.min(getPointByProperty('意志', 0.3), basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["灵活"]);
		    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];

		}

		    levelPoints["意志"] =  Math.min(getPointByProperty('意志', 0.3), basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["灵活"]);
		    levelPoints["灵活"] =  Math.max(getPointByPer("灵活", currentLevel + 1, 0, 0.2, 1), getPointByPer("灵活", currentLevel + 1, 0, 0.51, 0));
		    levelPoints["灵活"] =  Math.min(levelPoints["灵活"], basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"]);
		    levelPoints["意志"] =  Math.min(getPointByProperty('意志', 0.5), basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["灵活"]);
		    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];
		    if (levelPoints3["体质"] - basehppoint - levelPoints5["力量"] + levelPoints3["力量"] - getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttacks1 * 100) / 100) < 0) {
				levelPoints["力量"] = levelPoints3["力量"];
				levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["意志"] - levelPoints["智力"] - levelPoints["体质"];
			}


          }
}



		levelPoints["灵活"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"], 1);
		levelPoints["体质"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"], 1);
		levelPoints["意志"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["灵活"], 1);
		levelPoints["体质"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"], 1);
		levelPoints["灵活"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"], 1);
		levelPoints["意志"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["灵活"], 1);
		levelPoints["力量"] = basePoints["分配点"] - levelPoints["体质"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];



if (levelPoints["意志"] < getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackn * 100) / 100)) {

	if(levelPoints["力量"] === levelPoints7["力量"]){
		levelPoints["意志"] = 1;
		levelPoints["灵活"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"], 1);
		var respoint1 = getTimesProbability(2,2,getPerByPoint("灵活", currentLevel + 1, 0, levelPoints["灵活"]));
	}

	if(levelPoints["力量"] > levelPoints7["力量"]){
		var respoint1 = getTimesProbability(2,1,getPerByPoint("灵活", currentLevel + 1, 0, levelPoints["灵活"]));
	}


     levelPoints3["体质"] = 1; 
     levelPoints3["意志"] = 1;
     levelPoints3["灵活"] = basePoints["分配点"] - levelPoints3["力量"] - levelPoints3["敏捷"] - levelPoints3["体质"] - levelPoints3["智力"] - levelPoints3["意志"];
		if(levelPoints3["灵活"] > 0){
		var respoint2 = getTimesProbability(2,1,getPerByPoint("灵活", currentLevel + 1, 0, levelPoints3["灵活"]));
			if(respoint2 > respoint1){
				respoint1 = respoint2;
				levelPoints["力量"] = levelPoints3["力量"];
				levelPoints["体质"] = levelPoints3["体质"];
				levelPoints["敏捷"] = levelPoints3["敏捷"];
				levelPoints["灵活"] = levelPoints3["灵活"];
				levelPoints["智力"] = levelPoints3["智力"];
				levelPoints["意志"] = levelPoints3["意志"];

			}
		}


	levelPoints["意志"] = getPointByProperty('意志', 1.01 - Math.floor(currentLife / npcAttackn * 100) / 100);

    var npcAttackn1 = Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[0]) * npcAttackCoefficient * fullCDCoefficient); // 普通npc攻
	    while (npcAttackn > 0 && levelPoints["意志"] > 0) {
		levelPoints["意志"]--;
		npcAttackn = currentLife - Math.round(npcAttackn1 * Math.round((1- (levelPoints["意志"] + basePoints["意志"]) / (levelPoints["意志"] + basePoints["意志"] + 150 )) * 100) / 100);
	       
	    }
		levelPoints["意志"]++;

     var playwill = levelPoints["意志"];
     levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];
		if(levelPoints["灵活"] < 0){
			levelPoints["意志"] = 1;
		}
     levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"];


     levelPoints7["体质"] = 1; 
     levelPoints7["意志"] = playwill;
     levelPoints7["灵活"] = basePoints["分配点"] - levelPoints7["力量"] - levelPoints7["敏捷"] - levelPoints7["体质"] - levelPoints7["智力"] - levelPoints7["意志"];

		if(levelPoints7["灵活"] > 0){
		var respoint2 = 1;
			if(respoint2 > respoint1){
				respoint1 = respoint2;
				levelPoints["力量"] = levelPoints7["力量"];
				levelPoints["体质"] = levelPoints7["体质"];
				levelPoints["敏捷"] = levelPoints7["敏捷"];
				levelPoints["灵活"] = levelPoints7["灵活"];
				levelPoints["智力"] = levelPoints7["智力"];
				levelPoints["意志"] = levelPoints7["意志"];

			}
		}

     levelPoints8["体质"] = 1; 
     levelPoints8["意志"] = playwill;
     levelPoints8["灵活"] = basePoints["分配点"] - levelPoints8["力量"] - levelPoints8["敏捷"] - levelPoints8["体质"] - levelPoints8["智力"] - levelPoints8["意志"];
		if(levelPoints8["灵活"] > 0){
		var respoint2 = (1 - getNPCPerByPoint("灵活", currentLevel, 1, levelPoints8["灵活"])) * getTimesProbability(4,1,getPerByPoint("灵活", currentLevel + 1, 0, levelPoints8["灵活"]));
			if(respoint2 > respoint1){
				respoint1 = respoint2;
				levelPoints["力量"] = levelPoints8["力量"];
				levelPoints["体质"] = levelPoints8["体质"];
				levelPoints["敏捷"] = levelPoints8["敏捷"];
				levelPoints["灵活"] = levelPoints8["灵活"];
				levelPoints["智力"] = levelPoints8["智力"];
				levelPoints["意志"] = levelPoints8["意志"];

			}
		}

     levelPoints9["体质"] = 1; 
     levelPoints9["意志"] = playwill;
     levelPoints9["灵活"] = basePoints["分配点"] - levelPoints9["力量"] - levelPoints9["敏捷"] - levelPoints9["体质"] - levelPoints9["智力"] - levelPoints9["意志"];
		if(levelPoints9["灵活"] > 0){
		var respoint2 = 1;
			if(respoint2 > respoint1){
				respoint1 = respoint2;
				levelPoints["力量"] = levelPoints9["力量"];
				levelPoints["体质"] = levelPoints9["体质"];
				levelPoints["敏捷"] = levelPoints9["敏捷"];
				levelPoints["灵活"] = levelPoints9["灵活"];
				levelPoints["智力"] = levelPoints9["智力"];
				levelPoints["意志"] = levelPoints9["意志"];

			}
		}

     levelPoints10["体质"] = 1; 
     levelPoints10["意志"] = playwill;
     levelPoints10["灵活"] = basePoints["分配点"] - levelPoints10["力量"] - levelPoints10["敏捷"] - levelPoints10["体质"] - levelPoints10["智力"] - levelPoints10["意志"];
		if(levelPoints10["灵活"] > 0){
		var respoint2 = (1 - getNPCPerByPoint("灵活", currentLevel, 1, levelPoints10["灵活"])) * getTimesProbability(3,1,getPerByPoint("灵活", currentLevel + 1, 0, levelPoints10["灵活"]));
			if(respoint2 > respoint1){
				respoint1 = respoint2;
				levelPoints["力量"] = levelPoints10["力量"];
				levelPoints["体质"] = levelPoints10["体质"];
				levelPoints["敏捷"] = levelPoints10["敏捷"];
				levelPoints["灵活"] = levelPoints10["灵活"];
				levelPoints["智力"] = levelPoints10["智力"];
				levelPoints["意志"] = levelPoints10["意志"];

			}
		}


}

	    	var point1 = levelPoints["灵活"];
		var point2 = 0;
		var point3 = 0;
		var pointNump1 = getNPCPerByPoint("灵活", currentLevel , 0, levelPoints["灵活"]);
		var pointNump2 = getNPCPerByPoint("灵活", currentLevel , 0, levelPoints["灵活"]);
		while (pointNump1 === pointNump2 && levelPoints["灵活"] > 0) {
			levelPoints["灵活"]--;
			pointNump2 = getNPCPerByPoint("灵活", currentLevel , 0, levelPoints["灵活"]);
		   
		}
		levelPoints["灵活"]++;
		point2 = point1 - levelPoints["灵活"];
		levelPoints["灵活"] = point1;
		var pointNump1 = getPerByPoint("灵活", currentLevel + 1, 0, levelPoints["灵活"]);
		var pointNump2 = getPerByPoint("灵活", currentLevel + 1, 0, levelPoints["灵活"]);
		while (pointNump1 === pointNump2 && levelPoints["灵活"] > 0) {
			levelPoints["灵活"]--;
			pointNump2 = getPerByPoint("灵活", currentLevel + 1, 0, levelPoints["灵活"]);
		   
		}
		levelPoints["灵活"]++;
		point3 = point1 - levelPoints["灵活"];
		levelPoints["灵活"] = point1 - Math.min(point2, point3);


		levelPoints["敏捷"] = Math.max(levelPoints["敏捷"] - 1, 1);


	if (levelPoints["意志"] >= getPointByProperty('意志', 1.01 - Math.floor(currentLife / Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[0]) * npcAttackCoefficient * fullCDCoefficient) * 100) / 100)) {
		levelPoints["意志"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["体质"];
	}

	    var pointNump1 = getPropertyByPoint("意志", levelPoints["意志"]);
	    var pointNump2 = getPropertyByPoint("意志", levelPoints["意志"]);
	    while (pointNump1 === pointNump2 && levelPoints["意志"] > 0) {
		levelPoints["意志"]--;
		pointNump2 = getPropertyByPoint("意志", levelPoints["意志"]);
	       
	    }
		levelPoints["意志"]++;
	if (levelPoints["意志"] < getPointByProperty('意志', 1.01 - Math.floor(currentLife / Math.ceil(Math.ceil(npcPowerStepNum * (currentLevel + 1) * npcPowerIntensiveCoefficient[0]) * npcAttackCoefficient * fullCDCoefficient) * 100) / 100)) {
		levelPoints["灵活"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["意志"] - levelPoints["智力"] - levelPoints["体质"];
	    var pointNump1 = getPerByPoint("灵活", currentLevel + 1, 0, levelPoints["灵活"]);
	    var pointNump2 = getPerByPoint("灵活", currentLevel + 1, 0, levelPoints["灵活"]);
	    while (pointNump1 === pointNump2 && levelPoints["灵活"] > 0) {
		levelPoints["灵活"]--;
		pointNump2 = getPerByPoint("灵活", currentLevel + 1, 0, levelPoints["灵活"]);
	       
	    }

		levelPoints["灵活"]++;
	}


	    levelPoints["体质"] = basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];

		levelPoints["灵活"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"], 1);
		levelPoints["体质"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"], 1);
		levelPoints["意志"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["灵活"], 1);
		levelPoints["体质"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"], 1);
		levelPoints["灵活"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["意志"], 1);
		levelPoints["意志"] = Math.max(basePoints["分配点"] - levelPoints["力量"] - levelPoints["敏捷"] - levelPoints["体质"] - levelPoints["智力"] - levelPoints["灵活"], 1);
		levelPoints["力量"] = basePoints["分配点"] - levelPoints["体质"] - levelPoints["敏捷"] - levelPoints["灵活"] - levelPoints["智力"] - levelPoints["意志"];







    return levelPoints;
}


function getDiffMinIntPoint(propertyName, pointNum){
    var diffPoints = 0;
    var newPointNum = 0;
    var propertyNum = 0;
    if(pointNum <= 1) return diffPoints;
    switch (propertyName) {
        case "灵活":
            propertyNum = Math.max(Math.round((pointNum + basePoints["灵活"]) / ((pointNum + basePoints["灵活"]) + CHCardinal) * 100) / 100 - 0.005,0);
            break;
        case "智力":
            propertyNum = Math.max(Math.round((pointNum + basePoints["智力"]) / ((pointNum + basePoints["智力"]) + SKLCardinal) * 100) / 100 - 0.005,0);
            break;
        case "意志":
            propertyNum = Math.max(Math.round((pointNum + basePoints["意志"]) / ((pointNum + basePoints["意志"]) + DFCardinal) * 100) / 100 - 0.005,0);
            break;
        default:
            // 出错处理
            propertyNum = 0;
    }
    switch (propertyName) {
        case "灵活":
            newPointNum = Math.max(Math.ceil(CHCardinal * propertyNum / (1 - propertyNum)) - basePoints["灵活"], 1);
            break;
        case "智力":
            newPointNum = Math.max(Math.ceil(SKLCardinal * propertyNum / (1 - propertyNum)) - basePoints["智力"], 1);
            break;
        case "意志":
            newPointNum = Math.max(Math.ceil(DFCardinal * propertyNum / (1 - propertyNum)) - basePoints["意志"], 1);
            break;
        default:
            // 出错处理
            diffPoints = 0;
    }
    diffPoints = pointNum - newPointNum;
    return diffPoints;
}

var attackFlag = 4;

var getCustomPoints = function (data) {
    currentLevel = data.currentLevel;
    currentLife = data.currentLife;
    availablePoint = data.availablePoint;
    extraPointList = data.extraPointList;
    itemUsedNumList = data.itemUsedNumList;
    enemyList = data.enemyList;
    basePoints = {
        "分配点": availablePoint,
        "力量": extraPointList.get('力量'),
        "体质": extraPointList.get('体质'),
        "敏捷": extraPointList.get('敏捷'),
        "灵活": extraPointList.get('灵活'),
        "智力": extraPointList.get('智力'),
        "意志": extraPointList.get('意志')
    };
    console.log(data);
    CDNum = itemUsedNumList.get('傲娇LOLI娇蛮音CD');
    fullCDCoefficient = CDNum === 30 ? 0.9 : 1;
    fullRemiHP = itemUsedNumList.get('蕾米莉亚同人漫画') === 50 ? 700 : 0;
    fullIzayoiSpeed = itemUsedNumList.get('十六夜同人漫画') === 50 ? 100 : 0;

    if (currentLevel % 10 === 9) {
         // boss楼层加点
        levelPoints = getOptimalNextLevelPoints(currentLevel, currentLife, 1);
        if (levelPoints["体质"] < 1) {
            // 搜索最优方案失败,返回当前加点
            return false;
        }
        var diffPoints = 0;
        var diffPoints1 = 0;
        //diffPoints = levelPoints["敏捷"] > 1 ? diffPoints + 1 : diffPoints;
        //levelPoints["敏捷"] = levelPoints["敏捷"] > 1 ? levelPoints["敏捷"] - 1 : levelPoints["敏捷"];

        //diffPoints1 = getDiffMinIntPoint("灵活",levelPoints["灵活"]);
        //levelPoints["灵活"] -= diffPoints1;
        //diffPoints += diffPoints1;
        //diffPoints1 = getDiffMinIntPoint("智力",levelPoints["智力"]);
        //levelPoints["智力"] -= diffPoints1;
        //diffPoints += diffPoints1;
        diffPoints1 = getDiffMinIntPoint("意志",levelPoints["意志"]);
        levelPoints["意志"] -= diffPoints1;
        diffPoints += diffPoints1;
        levelPoints["体质"] += diffPoints;

        console.log(levelPoints);
        console.log((currentLevel + 1) + "层,预计剩余生命值:" + restLifeInNextLevelByPoints(currentLevel, currentLife, 1, levelPoints));
        return levelPoints;
    }
    else {
        // 普通npc楼层加点
        var levelPoints = getOptimalNextLevelPoints(currentLevel, currentLife, 0);
        if (levelPoints["体质"] < 1) {
            // 搜索最优方案失败,返回当前加点
            return false;
        }
        var diffPoints = 0;
        var diffPoints1 = 0;
        //diffPoints = levelPoints["敏捷"] > 1 ? diffPoints + 1 : diffPoints;
        //levelPoints["敏捷"] = levelPoints["敏捷"] > 1 ? levelPoints["敏捷"] - 1 : levelPoints["敏捷"];

        //diffPoints1 = getDiffMinIntPoint("灵活",levelPoints["灵活"]);
        //levelPoints["灵活"] -= diffPoints1;
        //diffPoints += diffPoints1;
        //diffPoints1 = getDiffMinIntPoint("智力",levelPoints["智力"]);
        //levelPoints["智力"] -= diffPoints1;
        //diffPoints += diffPoints1;
        diffPoints1 = getDiffMinIntPoint("意志",levelPoints["意志"]);
        levelPoints["意志"] -= diffPoints1;
        diffPoints += diffPoints1;
        levelPoints["体质"] += diffPoints;

        console.log(levelPoints);
        console.log((currentLevel + 1) + "层," + attackFlag + "刀流,预计剩余生命值:" + restLifeInNextLevelByPoints(currentLevel, currentLife, 0, levelPoints));
        return levelPoints;
    }

};


if (location.pathname === '/kf_fw_ig_index.php') {
    $(function () {
        if (typeof Const === 'undefined' && typeof require === 'function') {
            var Const = require('./Const').default;
            Const.getCustomPoints = getCustomPoints;
        }
        else {
            var w = typeof unsafeWindow !== 'undefined' ? unsafeWindow : window;
            w.Const.getCustomPoints = getCustomPoints;
        }
        $('[name="customPointsScriptEnabled"]').prop('disabled', false).triggerHandler('click');

    });
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址