Greasy Fork

Greasy Fork is available in English.

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

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

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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');

    });
}