# HealthPrediction

# 说明

HealthPrediction命名空间提供了预测单位生命值的功能,可用于辅助补兵、计算伤害等场景。它能帮助玩家预测未来某个时间点的单位生命值,考虑到各种即将到来的伤害因素。

# 如何使用

#include "Noble.h"

void OnGameUpdate()
{
    // 遍历敌方小兵
    for (auto* minion : ObjectManager::GetEnemyMinions())
    {
        // 预测500毫秒后的小兵生命值
        float healthAfter500ms = HealthPrediction::GetHealthPrediction(minion, 500);
        
        // 获取英雄平A的伤害
        float myAaDamage = ObjectManager::Player()->GetAutoAttackDamage(minion);
        
        // 如果预测的生命值小于或等于我的平A伤害,且小兵不会自然死亡(生命值大于0)
        if (healthAfter500ms <= myAaDamage && healthAfter500ms > 0)
        {
            // 这个小兵可以在500毫秒后击杀,可以考虑攻击它
            Console::Add("可以击杀小兵,当前血量: %.1f, 预测血量: %.1f", 
                         minion->Health(), healthAfter500ms);
        }
    }
}

# GetHealthPrediction

float HealthPrediction::GetHealthPrediction(AIBaseClient* unit, int time, int delay = 0)

预测指定单位在给定时间后的生命值,考虑即将到来的伤害。

参数名字 参数类型 描述
unit AIBaseClient* 要预测生命值的单位
time int 未来的时间(以毫秒为单位)
delay int 可选的额外延迟(以毫秒为单位)
AIBaseClient* minion = /* 获取一个小兵 */;
// 预测400毫秒后的生命值
float predictedHealth = HealthPrediction::GetHealthPrediction(minion, 400);
Console::Add("小兵当前生命值: %.1f, 400毫秒后预测生命值: %.1f", 
             minion->Health(), predictedHealth);

# HasMinionAggro

bool HealthPrediction::HasMinionAggro(AIBaseClient* minion)

检查指定的小兵是否被其他小兵锁定为攻击目标。

参数名字 参数类型 描述
minion AIBaseClient* 要检查的小兵
AIBaseClient* minion = /* 获取一个小兵 */;
bool hasAggro = HealthPrediction::HasMinionAggro(minion);
Console::Add("小兵是否被其他小兵锁定: %s", hasAggro ? "是" : "否");

# HasTurretAggro

bool HealthPrediction::HasTurretAggro(AIBaseClient* minion)

检查指定的小兵是否被防御塔锁定为攻击目标。

参数名字 参数类型 描述
minion AIBaseClient* 要检查的小兵
AIBaseClient* minion = /* 获取一个小兵 */;
bool hasTurretAggro = HealthPrediction::HasTurretAggro(minion);
Console::Add("小兵是否被防御塔锁定: %s", hasTurretAggro ? "是" : "否");

# LaneClearHealthPrediction

float HealthPrediction::LaneClearHealthPrediction(AIBaseClient* unit, int time, int delay = 0)

专为清线模式设计的生命值预测,考虑小兵之间的相互攻击。

参数名字 参数类型 描述
unit AIBaseClient* 要预测生命值的单位
time int 未来的时间(以毫秒为单位)
delay int 可选的额外延迟(以毫秒为单位)
AIBaseClient* minion = /* 获取一个小兵 */;
// 在清线模式下预测500毫秒后的生命值
float predictedHealth = HealthPrediction::LaneClearHealthPrediction(minion, 500);

if (predictedHealth > 0 && predictedHealth < ObjectManager::Player()->GetAutoAttackDamage(minion))
{
    // 在清线模式下,这个小兵可以被平A击杀
    Console::Add("清线模式:可以击杀小兵,预测血量: %.1f", predictedHealth);
}

# TurretAggroStartTick

int HealthPrediction::TurretAggroStartTick(AIBaseClient* minion)

获取防御塔开始锁定小兵的游戏时间tick。

参数名字 参数类型 描述
minion AIBaseClient* 要检查的小兵
AIBaseClient* minion = /* 获取一个小兵 */;
if (HealthPrediction::HasTurretAggro(minion))
{
    int aggroStartTick = HealthPrediction::TurretAggroStartTick(minion);
    int currentTick = Game::GameTimeTickCount();
    int ticksSinceAggro = currentTick - aggroStartTick;
    
    Console::Add("防御塔已锁定小兵 %d 毫秒", ticksSinceAggro);
}