# 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);
}