# Utility

# 说明

Utility命名空间提供了一些通用的工具函数,包括延迟操作、碰撞检测、技能命中判断、小兵位置预测等功能。

# 如何使用

// 使用延迟动作
Utility::DelayAction::Add(1000, &OnDelayedAction);

// 检查碰撞
if (!Utility::CollisionEnemyYasuoW(myPosition, targetPosition)) {
    // 释放技能...
}

// 获取最佳清兵位置
FarmLocation bestLocation = Utility::GetBestCircularFarmLocation(minionPositions, 250.0f, 800.0f);

# AllyYasuoInGame

bool AllyYasuoInGame

是否有友方亚索在游戏中。

if (Utility::AllyYasuoInGame) {
    // 友方亚索存在的特定逻辑
}

# CanHitSkillShot

bool CanHitSkillShot(AIBaseClient* target, Vector const& Start, Vector const& End, float LineWidth)

判断目标是否可能被直线技能命中。

参数名 参数类型 描述
target AIBaseClient* 目标单位
Start Vector const& 技能起点
End Vector const& 技能终点
LineWidth float 技能宽度
auto target = TargetSelector::GetTarget(1000.0f, eDamageType::Magical);
Vector playerPos = ObjectManager::Player()->ServerPosition();
Vector castPos = playerPos.Extend(target->ServerPosition(), 1000.0f);

if (target && Utility::CanHitSkillShot(target, playerPos, castPos, 80.0f)) {
    // 技能可能命中目标
}

# CollisionAllyYasuoW

bool CollisionAllyYasuoW(Vector const& from, Vector const& to)

检测从起点到终点的路径是否会与友方亚索的风墙碰撞。

参数名 参数类型 描述
from Vector const& 起点位置
to Vector const& 终点位置
Vector myPosition = ObjectManager::Player()->ServerPosition();
auto target = TargetSelector::GetTarget(1000.0f, eDamageType::Magical);
if (target && !Utility::CollisionAllyYasuoW(myPosition, target->ServerPosition())) {
    // 路径不会与友方亚索风墙碰撞
}

# CollisionEnemyYasuoW

bool CollisionEnemyYasuoW(Vector const& from, Vector const& to)

检测从起点到终点的路径是否会与敌方亚索的风墙碰撞。

参数名 参数类型 描述
from Vector const& 起点位置
to Vector const& 终点位置
Vector myPosition = ObjectManager::Player()->ServerPosition();
auto target = TargetSelector::GetTarget(1000.0f, eDamageType::Magical);
if (target && !Utility::CollisionEnemyYasuoW(myPosition, target->ServerPosition())) {
    // 路径不会与敌方亚索风墙碰撞
}

# DelayAction.Add

void DelayAction::Add(int time, void* fun)

添加一个延迟执行的操作。

参数名 参数类型 描述
time int 延迟执行的时间(毫秒)
fun void* 要执行的函数指针
void OnDelayedAction() {
    // 延迟执行的逻辑
}

// 1000毫秒后执行OnDelayedAction函数
Utility::DelayAction::Add(1000, &OnDelayedAction);

# EnemyYasuoInGame

bool EnemyYasuoInGame

是否有敌方亚索在游戏中。

if (Utility::EnemyYasuoInGame) {
    // 敌方亚索存在的特定逻辑
}

# GetBestCircularFarmLocation

FarmLocation GetBestCircularFarmLocation(const std::vector<Vector>& minionPositions, float width, float range)

获取最佳的圆形技能清兵位置。

参数名 参数类型 描述
minionPositions const std::vector& 小兵位置列表
width float 圆形技能的半径
range float 技能最大射程
std::vector<Vector> minionPositions;
for (auto minion : ObjectManager::GetEnemyMinions()) {
    if (minion->IsValidTarget()) {
        minionPositions.push_back(minion->ServerPosition());
    }
}

FarmLocation bestLocation = Utility::GetBestCircularFarmLocation(minionPositions, 250.0f, 800.0f);
if (bestLocation.MinionsHit > 2) {
    // 使用bestLocation.Position释放圆形技能
}

# GetBestLineFarmLocation

FarmLocation GetBestLineFarmLocation(const std::vector<Vector>& minionPositions, float width, float range)

获取最佳的直线技能清兵位置。

参数名 参数类型 描述
minionPositions const std::vector& 小兵位置列表
width float 直线技能的宽度
range float 技能最大射程
std::vector<Vector> minionPositions;
for (auto minion : ObjectManager::GetEnemyMinions()) {
    if (minion->IsValidTarget()) {
        minionPositions.push_back(minion->ServerPosition());
    }
}

FarmLocation bestLocation = Utility::GetBestLineFarmLocation(minionPositions, 80.0f, 1000.0f);
if (bestLocation.MinionsHit > 3) {
    // 使用bestLocation.Position释放直线技能
}

# GetMinionsPredictedPositions

void GetMinionsPredictedPositions(std::vector<Vector>& Output, const std::vector<AIBaseClient*>& minions, float delay, float width, float speed, Vector from, float range, bool collision, eSkillshotType stype, Vector rangeCheckFrom = Vector::Zero)

获取小兵的预测位置。

参数名 参数类型 描述
Output std::vector& 输出的预测位置列表
minions const std::vector<AIBaseClient*>& 小兵列表
delay float 技能释放延迟
width float 技能宽度
speed float 技能飞行速度
from Vector 技能释放位置
range float 技能最大射程
collision bool 是否考虑碰撞
stype eSkillshotType 技能类型
rangeCheckFrom Vector 射程检测起点(可选)
std::vector<Vector> predictedPositions;
auto minions = ObjectManager::GetEnemyMinions();
Vector playerPos = ObjectManager::Player()->ServerPosition();

Utility::GetMinionsPredictedPositions(predictedPositions, minions, 0.25f, 80.0f, 1600.0f, playerPos, 1000.0f, false, eSkillshotType::SkillshotLine);

// 使用预测位置计算最佳清兵位置
FarmLocation bestLocation = Utility::GetBestLineFarmLocation(predictedPositions, 80.0f, 1000.0f);

# IsSpellHeroCollision

bool IsSpellHeroCollision(AIBaseClient* t, Spell const& QWER, int extraWith = 50)

判断技能与英雄之间是否会发生碰撞。

参数名 参数类型 描述
t AIBaseClient* 目标英雄
QWER Spell const& 技能对象
extraWith int 额外宽度(可选)
Spell Q(eSpellSlot::Q, 900.0f);
Q.SetSkillshot(0.25f, 80.0f, 1600.0f, true, eSkillshotType::SkillshotLine);

auto target = TargetSelector::GetTarget(900.0f, eDamageType::Magical);
if (target && !Utility::IsSpellHeroCollision(target, Q)) {
    // 技能不会与其他英雄碰撞
    Q.Cast(target);
}