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