# AIBaseClient
# 说明
AIBaseClient类提供了AI单位相关的功能,包括AI单位的行为控制、状态获取和操作等基础功能。该类继承自GameObject类,用于控制和获取游戏中AI单位的各种属性和行为。
# 如何使用
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
bool isMoving = aiClient->IsMoving();
// 使用AI客户端进行其他操作
}
# ActionState
eGameObjectActionState ActionState()
获取当前AI单位的行动状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
eGameObjectActionState state = aiClient->ActionState();
// 使用行动状态进行判断
}
# AllShield
float AllShield()
获取AI单位的全部护盾值。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float totalShield = aiClient->AllShield();
// 处理护盾信息
}
# Armor
float Armor()
获取当前AI单位的护甲值。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float armor = aiClient->Armor();
// 使用护甲值进行计算
}
# AttackCastDelay
float AttackCastDelay()
获取当前AI单位的攻击施放延迟。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float castDelay = aiClient->AttackCastDelay();
// 使用攻击施放延迟进行计算
}
# AttackDelay
float AttackDelay()
获取当前AI单位的攻击延迟。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float delay = aiClient->AttackDelay();
// 使用攻击延迟进行计算
}
# AttackRange
float AttackRange()
获取当前AI单位的攻击范围。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float atkRange = aiClient->AttackRange();
// 使用攻击范围进行判断
}
# AttackSpeedMod
float AttackSpeedMod()
获取当前AI单位的攻击速度修正值。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float atkSpeedMod = aiClient->AttackSpeedMod();
// 使用攻击速度修正值进行计算
}
# BaseAttackDamage
float BaseAttackDamage()
获取当前AI单位的基础攻击力。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float baseAD = aiClient->BaseAttackDamage();
// 使用基础攻击力进行计算
}
# BasicAttack
SpellData* BasicAttack()
获取当前AI单位的基础攻击数据。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
SpellData* basicAttack = aiClient->BasicAttack();
// 使用基础攻击数据进行处理
}
# Buffs
std::vector<BuffInstance*>const& Buffs()
获取当前AI单位的所有Buff。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
auto& buffs = aiClient->Buffs();
for (auto buff : buffs) {
// 处理每个buff
}
}
# BuyItem
void BuyItem(int ItemID)
购买指定ID的物品。
参数名字 | 参数类型 | 描述 |
---|---|---|
ItemID | int | 物品ID |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
// 购买长剑
aiClient->BuyItem(1036);
}
# CalcDamage
double CalcDamage(AIBaseClient* target, eDamageType damageType, double amount)
计算对目标造成的伤害值。
参数名字 | 参数类型 | 描述 |
---|---|---|
target | AIBaseClient* | 目标单位 |
damageType | eDamageType | 伤害类型 |
amount | double | 伤害基础值 |
AIBaseClient* aiClient = GetAIBaseClient();
AIBaseClient* target = GetTargetUnit();
if (aiClient && target) {
double damage = aiClient->CalcDamage(target, eDamageType::Physical, 100.0);
// 使用计算的伤害值进行判断
}
# CanAttack
bool CanAttack()
判断当前AI单位是否可以攻击。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->CanAttack()) {
// 单位可以攻击
}
# CanCast
bool CanCast()
判断当前AI单位是否可以施法。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->CanCast()) {
// 单位可以施法
}
# CanMove
bool CanMove()
判断当前AI单位是否可以移动。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->CanMove()) {
// 单位可以移动
}
# CanSelect
bool CanSelect()
判断当前AI单位是否可以被选择。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->CanSelect()) {
// 单位可以被选择
}
# ChampionName
const char* ChampionName()
获取AI单位的英雄名称。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
const char* name = aiClient->ChampionName();
// 使用英雄名称进行处理
}
# ChangeSkin
void ChangeSkin(const char* model, std::uint32_t skin)
更改AI单位的皮肤。
参数名字 | 参数类型 | 描述 |
---|---|---|
model | const char* | 模型名称 |
skin | std::uint32_t | 皮肤ID |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
// 更改为ID为5的皮肤
aiClient->ChangeSkin(aiClient->ChampionName(), 5);
}
# Crit
float Crit()
获取当前AI单位的暴击几率。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float critChance = aiClient->Crit();
// 使用暴击几率进行计算
}
# CritDamageMultiplier
float CritDamageMultiplier()
获取当前AI单位的暴击伤害倍率。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float critMult = aiClient->CritDamageMultiplier();
// 使用暴击伤害倍率进行计算
}
# DashSpeed
float DashSpeed()
获取AI单位冲刺(dash)的速度。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsDashing()) {
float speed = aiClient->DashSpeed();
// 使用冲刺速度信息
}
# Direction
Vector const& Direction()
获取当前AI单位的朝向方向。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
Vector dir = aiClient->Direction();
// 使用朝向方向进行计算
}
# Distance
float Distance(AIBaseClient* anotherUnit, bool squared = false)
计算当前AI单位与另一个单位之间的距离。
参数名字 | 参数类型 | 描述 |
---|---|---|
anotherUnit | AIBaseClient* | 另一个单位 |
squared | bool | 是否返回平方距离,默认为false |
AIBaseClient* aiClient = GetAIBaseClient();
AIBaseClient* target = GetTargetUnit();
if (aiClient && target) {
float dist = aiClient->Distance(target);
if (dist < 500.0f) {
// 当距离小于500时执行操作
}
}
# Distance
float Distance(const Vector& point, bool squared = false)
计算当前AI单位与指定位置之间的距离。
参数名字 | 参数类型 | 描述 |
---|---|---|
point | Vector | 目标位置 |
squared | bool | 是否返回平方距离,默认为false |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
Vector targetPos(100.0f, 0.0f, 200.0f);
float dist = aiClient->Distance(targetPos);
if (dist < 500.0f) {
// 当距离小于500时执行操作
}
}
# FindItem
InventoryItem* FindItem(int itemId)
根据物品ID查找物品。
参数名字 | 参数类型 | 描述 |
---|---|---|
itemId | int | 物品ID |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
// 查找ID为3157的物品(沙漏)
InventoryItem* zhonya = aiClient->FindItem(3157);
if (zhonya) {
// 物品存在,进行处理
}
}
# FlatArmorMod
float FlatArmorMod()
获取当前AI单位的额外护甲值。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float bonusArmor = aiClient->FlatArmorMod();
// 使用额外护甲值进行计算
}
# FlatSpellBlockMod
float FlatSpellBlockMod()
获取当前AI单位的额外魔法抗性。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float bonusMR = aiClient->FlatSpellBlockMod();
// 使用额外魔法抗性进行计算
}
# GetAutoAttackDamage
double GetAutoAttackDamage(AIBaseClient* target, bool includePassive = false)
计算对目标的普通攻击伤害。
参数名字 | 参数类型 | 描述 |
---|---|---|
target | AIBaseClient* | 目标单位 |
includePassive | bool | 是否包含被动效果,默认为false |
AIBaseClient* aiClient = GetAIBaseClient();
AIBaseClient* target = GetTargetUnit();
if (aiClient && target) {
double aaDamage = aiClient->GetAutoAttackDamage(target, true);
// 使用计算的普通攻击伤害进行判断
}
# GetBuff
BuffInstance* GetBuff(std::uint32_t buffNameHash)
根据Buff名称的哈希值获取特定Buff实例。
参数名字 | 参数类型 | 描述 |
---|---|---|
buffNameHash | std::uint32_t | Buff名称的哈希值 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
BuffInstance* stun = aiClient->GetBuff(HashName_Buff("stunbuff"));
if (stun) {
// 处理眩晕buff
}
}
# GetBuffCaster
AIBaseClient* GetBuffCaster(std::uint32_t buffNameHash)
获取指定Buff的施放者。
参数名字 | 参数类型 | 描述 |
---|---|---|
buffNameHash | std::uint32_t | Buff名称的哈希值 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
AIBaseClient* caster = aiClient->GetBuffCaster(HashName_Buff("ignite"));
if (caster) {
// 处理点燃施放者
}
}
# GetBuffCount
int GetBuffCount(std::uint32_t buffNameHash)
获取指定Buff的层数。
参数名字 | 参数类型 | 描述 |
---|---|---|
buffNameHash | std::uint32_t | Buff名称的哈希值 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
int stacks = aiClient->GetBuffCount(HashName_Buff("twitchdeadlyvenom"));
// 使用层数进行判断
}
# GetBuffCountAlt
int GetBuffCountAlt(std::uint32_t buffNameHash)
获取指定Buff的替代层数计数。
参数名字 | 参数类型 | 描述 |
---|---|---|
buffNameHash | std::uint32_t | Buff名称的哈希值 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
int altStacks = aiClient->GetBuffCountAlt(HashName_Buff("brabumbuff"));
// 使用替代层数进行判断
}
# GetBuffEndTime
float GetBuffEndTime(std::uint32_t buffNameHash)
获取指定Buff的结束时间。
参数名字 | 参数类型 | 描述 |
---|---|---|
buffNameHash | std::uint32_t | Buff名称的哈希值 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float endTime = aiClient->GetBuffEndTime(HashName_Buff("stunbuff"));
// 使用结束时间进行判断
}
# GetIgniteDamage
double GetIgniteDamage(AIBaseClient* target)
计算点燃对目标造成的伤害。
参数名字 | 参数类型 | 描述 |
---|---|---|
target | AIBaseClient* | 目标单位 |
AIBaseClient* aiClient = GetAIBaseClient();
AIBaseClient* target = GetTargetUnit();
if (aiClient && target) {
double igniteDamage = aiClient->GetIgniteDamage(target);
// 使用计算的点燃伤害进行判断
}
# GetItem
InventoryItem* GetItem(eSpellSlot slot)
获取指定槽位的物品。
参数名字 | 参数类型 | 描述 |
---|---|---|
slot | eSpellSlot | 物品槽位 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
InventoryItem* item = aiClient->GetItem(eSpellSlot::Item1);
if (item) {
// 使用物品数据进行处理
}
}
# GetPath
void GetPath(Vector const& Start, Vector const& End, std::vector<Vector>& Output)
计算从起点到终点的路径。
参数名字 | 参数类型 | 描述 |
---|---|---|
Start | Vector | 起始位置 |
End | Vector | 目标位置 |
Output | std::vector<Vector>& | 输出参数,用于存储计算的路径 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
Vector start = aiClient->Position();
Vector end(1000.0f, 0.0f, 1000.0f);
std::vector<Vector> calculatedPath;
aiClient->GetPath(start, end, calculatedPath);
// 使用计算的路径进行处理
}
# GetSmiteDamage
double GetSmiteDamage(AIBaseClient* target)
计算惩戒对目标造成的伤害。
参数名字 | 参数类型 | 描述 |
---|---|---|
target | AIBaseClient* | 目标单位 |
AIBaseClient* aiClient = GetAIBaseClient();
AIBaseClient* jungle = GetJungleMonster();
if (aiClient && jungle) {
double smiteDamage = aiClient->GetSmiteDamage(jungle);
// 使用计算的惩戒伤害进行判断
}
# GetSpell
SpellDataInst* GetSpell(eSpellSlot slot)
获取指定槽位的技能实例。
参数名字 | 参数类型 | 描述 |
---|---|---|
slot | eSpellSlot | 技能槽位 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
SpellDataInst* qSpell = aiClient->GetSpell(eSpellSlot::Q);
if (qSpell) {
// 使用Q技能的数据进行处理
}
}
# GetSpellDamage
double GetSpellDamage(AIBaseClient* target, std::uint32_t spellNameHash)
计算技能对目标造成的伤害。
参数名字 | 参数类型 | 描述 |
---|---|---|
target | AIBaseClient* | 目标单位 |
spellNameHash | std::uint32_t | 技能名称的哈希值 |
AIBaseClient* aiClient = GetAIBaseClient();
AIBaseClient* target = GetTargetUnit();
if (aiClient && target) {
double qDamage = aiClient->GetSpellDamage(target, HashName_SpellData("AatroxQ"));
// 使用计算的技能伤害进行判断
}
# GetSpellDamage
double GetSpellDamage(AIBaseClient* target, eSpellSlot slot, int stage = 0)
计算指定槽位的技能对目标造成的伤害。
参数名字 | 参数类型 | 描述 |
---|---|---|
target | AIBaseClient* | 目标单位 |
slot | eSpellSlot | 技能槽位 |
stage | int | 技能阶段,默认为0 |
AIBaseClient* aiClient = GetAIBaseClient();
AIBaseClient* target = GetTargetUnit();
if (aiClient && target) {
double rDamage = aiClient->GetSpellDamage(target, eSpellSlot::R);
// 使用计算的R技能伤害进行判断
}
# GetSpellSlot
eSpellSlot GetSpellSlot(std::uint32_t SDataName)
根据技能数据名称获取技能槽位。
参数名字 | 参数类型 | 描述 |
---|---|---|
SDataName | std::uint32_t | 技能数据名称的哈希值 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
eSpellSlot flashSlot = aiClient->GetSpellSlot(HashName_SpellData("SummonerFlash"));
if (flashSlot != eSpellSlot::Unknown) {
// 处理闪现技能
}
}
# GetSpellState
eSpellState GetSpellState(eSpellSlot slot)
获取指定槽位技能的状态。
参数名字 | 参数类型 | 描述 |
---|---|---|
slot | eSpellSlot | 技能槽位 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
eSpellState state = aiClient->GetSpellState(eSpellSlot::R);
// 使用R技能的状态进行判断
}
# Gold
float Gold()
获取当前AI单位拥有的金币数量。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float gold = aiClient->Gold();
// 使用金币数量进行判断
}
# HPBarPosition
void HPBarPosition(Vector& Output)
获取当前AI单位生命条的屏幕位置。
参数名字 | 参数类型 | 描述 |
---|---|---|
Output | Vector& | 输出参数,用于存储生命条位置 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
Vector hpBarPos;
aiClient->HPBarPosition(hpBarPos);
// 使用生命条位置进行处理
}
# HPBarStacks
float HPBarStacks()
获取当前AI单位的生命条层数。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float hpStacks = aiClient->HPBarStacks();
// 使用生命条层数进行处理
}
# Hash
std::uint32_t Hash()
获取AI单位的哈希值。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
std::uint32_t hash = aiClient->Hash();
// 使用哈希值进行标识或比较
}
# HasBuff
bool HasBuff(std::uint32_t buffNameHash)
判断AI单位是否拥有指定的Buff。
参数名字 | 参数类型 | 描述 |
---|---|---|
buffNameHash | std::uint32_t | Buff名称的哈希值 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->HasBuff(HashName_Buff("zhonyasringshield"))) {
// 单位有中亚沙漏效果
}
# HasBuffOfType
bool HasBuffOfType(eBuffType Type)
判断AI单位是否拥有指定类型的Buff。
参数名字 | 参数类型 | 描述 |
---|---|---|
Type | eBuffType | Buff类型 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->HasBuffOfType(eBuffType::Stun)) {
// 单位有眩晕类型的buff
}
# HasBuffOfType
bool HasBuffOfType(const std::vector<eBuffType>& Types)
判断AI单位是否拥有指定类型列表中的任一Buff。
参数名字 | 参数类型 | 描述 |
---|---|---|
Types | std::vector<eBuffType> | Buff类型列表 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
std::vector<eBuffType> ccTypes = {eBuffType::Stun, eBuffType::Silence, eBuffType::Taunt};
if (aiClient->HasBuffOfType(ccTypes)) {
// 单位有控制类型的buff
}
}
# Health
float Health()
获取AI单位当前的生命值。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float health = aiClient->Health();
// 检查AI单位的生命值
}
# HealthPercent
float HealthPercent()
获取AI单位的生命值百分比。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float healthPct = aiClient->HealthPercent();
if (healthPct < 30.0f) {
// 当生命值低于30%时执行操作
}
}
# Icon
uintptr_t* Icon()
获取当前AI单位的图标指针。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
uintptr_t* icon = aiClient->Icon();
// 使用图标指针进行处理
}
# IsAsleep
bool IsAsleep()
判断当前AI单位是否处于睡眠状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsAsleep()) {
// 单位处于睡眠状态
}
# IsChanneling
bool IsChanneling()
判断当前AI单位是否正在引导技能。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsChanneling()) {
// 单位正在引导技能
}
# IsCharmed
bool IsCharmed()
判断当前AI单位是否处于魅惑状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsCharmed()) {
// 单位处于魅惑状态
}
# IsControlled
bool IsControlled()
判断当前AI单位是否处于被控制状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsControlled()) {
// 单位处于被控制状态
}
# IsCastingInterruptableSpell
int IsCastingInterruptableSpell()
判断当前AI单位是否正在施放可打断的技能。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
int priority = aiClient->IsCastingInterruptableSpell();
if (priority > 0) {
// 可以打断目标的技能,优先级为priority
}
}
返回值:
- 2 = 高优先级
- 1 = 低优先级
- 0 = 没有施放可打断技能
# IsDashing
bool IsDashing()
判断AI单位当前是否正在冲刺(dash)。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsDashing()) {
// AI单位正在冲刺中
}
# IsDisarmed
bool IsDisarmed()
判断当前AI单位是否处于缴械状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsDisarmed()) {
// 单位处于缴械状态
}
# IsEpicMonster
bool IsEpicMonster()
判断当前AI单位是否是史诗级野怪(如大龙、小龙等)。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsEpicMonster()) {
// 单位是史诗级野怪
}
# IsFacing
bool IsFacing(AIBaseClient* target)
判断当前AI单位是否面向目标单位。
参数名字 | 参数类型 | 描述 |
---|---|---|
target | AIBaseClient* | 目标单位 |
AIBaseClient* aiClient = GetAIBaseClient();
AIBaseClient* target = GetTargetUnit();
if (aiClient && target && aiClient->IsFacing(target)) {
// 当前单位正面向目标
}
# IsFeared
bool IsFeared()
判断当前AI单位是否处于恐惧状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsFeared()) {
// 单位处于恐惧状态
}
# IsFleeing
bool IsFleeing()
判断当前AI单位是否处于逃跑状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsFleeing()) {
// 单位处于逃跑状态
}
# IsGhosted
bool IsGhosted()
判断当前AI单位是否处于幽灵状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsGhosted()) {
// 单位处于幽灵状态
}
# IsInvulnerable
bool IsInvulnerable()
判断当前AI单位是否处于无敌状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsInvulnerable()) {
// 单位处于无敌状态
}
# IsLargeMonster
bool IsLargeMonster()
判断当前AI单位是否是大型野怪。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsLargeMonster()) {
// 单位是大型野怪
}
# IsMagicImmune
bool IsMagicImmune()
判断当前AI单位是否具有魔法免疫。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsMagicImmune()) {
// 单位具有魔法免疫
}
# IsMelee
bool IsMelee()
判断当前AI单位是否是近战单位。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsMelee()) {
// 单位是近战单位
}
# IsMeleeMinion
bool IsMeleeMinion()
判断当前AI单位是否是近战小兵。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsMeleeMinion()) {
// 单位是近战小兵
}
# IsMinion
bool IsMinion()
判断当前AI单位是否是小兵。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsMinion()) {
// 单位是小兵
}
# IsMoving
bool IsMoving()
判断AI单位当前是否正在移动。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsMoving()) {
// AI单位正在移动中
}
# IsMovingInSameDirection
bool IsMovingInSameDirection(AIBaseClient* target)
判断当前AI单位是否与目标单位朝相同方向移动。
参数名字 | 参数类型 | 描述 |
---|---|---|
target | AIBaseClient* | 目标单位 |
AIBaseClient* aiClient = GetAIBaseClient();
AIBaseClient* target = GetTargetUnit();
if (aiClient && target && aiClient->IsMovingInSameDirection(target)) {
// 两个单位朝相同方向移动
}
# IsPet
bool IsPet(bool includeClones = true)
判断当前AI单位是否是宠物(如蜘蛛、蚂蚱、安妮熊等)。
参数名字 | 参数类型 | 描述 |
---|---|---|
includeClones | bool | 是否包含克隆体,默认为true |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsPet()) {
// 单位是宠物
}
# IsPhysicalImmune
bool IsPhysicalImmune()
判断当前AI单位是否具有物理免疫。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsPhysicalImmune()) {
// 单位具有物理免疫
}
# IsPlant
bool IsPlant()
判断当前AI单位是否是植物(果实)。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsPlant()) {
// 单位是植物(果实)
}
# IsRanged
bool IsRanged()
判断当前AI单位是否是远程单位。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsRanged()) {
// 单位是远程单位
}
# IsRangedMinion
bool IsRangedMinion()
判断当前AI单位是否是远程小兵。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsRangedMinion()) {
// 单位是远程小兵
}
# IsReady
bool IsReady(eSpellSlot slot, int t = 0)
判断指定槽位的技能是否已准备好。
参数名字 | 参数类型 | 描述 |
---|---|---|
slot | eSpellSlot | 技能槽位 |
t | int | 额外时间(毫秒),默认为0 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsReady(eSpellSlot::R)) {
// R技能已准备好
}
# IsRooted
bool IsRooted()
判断当前AI单位是否处于定身状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsRooted()) {
// 单位处于定身状态
}
# IsSiegeMinion
bool IsSiegeMinion()
判断当前AI单位是否是炮车兵。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsSiegeMinion()) {
// 单位是炮车兵
}
# IsSilenced
bool IsSilenced()
判断当前AI单位是否处于沉默状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsSilenced()) {
// 单位处于沉默状态
}
# IsStealthed
bool IsStealthed()
判断当前AI单位是否处于隐身状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsStealthed()) {
// 单位处于隐身状态
}
# IsStunned
bool IsStunned()
判断当前AI单位是否处于眩晕状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsStunned()) {
// 单位处于眩晕状态
}
# IsSuperMinion
bool IsSuperMinion()
判断当前AI单位是否是超级兵。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsSuperMinion()) {
// 单位是超级兵
}
# IsSupressed
bool IsSupressed()
判断当前AI单位是否处于压制状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsSupressed()) {
// 单位处于压制状态
}
# IsTargetable
bool IsTargetable()
判断当前AI单位是否可被选为目标。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsTargetable()) {
// 单位可被选为目标
}
# IsTaunted
bool IsTaunted()
判断当前AI单位是否处于嘲讽状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsTaunted()) {
// 单位处于嘲讽状态
}
# IsValidTarget
bool IsValidTarget(float range = FLT_MAX, bool checkTeam = true, Vector const& from = Vector::Zero, bool ignoreInvulnerable = false)
判断AI单位是否是有效目标。
参数名字 | 参数类型 | 描述 |
---|---|---|
range | float | 检查范围,默认为最大浮点数 |
checkTeam | bool | 是否检查队伍,默认为true |
from | Vector | 检查的起始位置,默认为零向量 |
ignoreInvulnerable | bool | 是否忽略无敌状态,默认为false |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsValidTarget(800.0f)) {
// 目标有效且在800范围内
}
# IsWard
bool IsWard()
判断当前AI单位是否是眼位。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsWard()) {
// 单位是眼位
}
# IsZombie
bool IsZombie()
判断当前AI单位是否处于僵尸状态。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->IsZombie()) {
// 单位处于僵尸状态
}
# IssueOrder
bool IssueOrder(eGameObjectOrder order, AIBaseClient* unit, bool triggerEvent = true)
向AI单位发送指令,指定目标单位。
参数名字 | 参数类型 | 描述 |
---|---|---|
order | eGameObjectOrder | 指令类型 |
unit | AIBaseClient* | 目标单位 |
triggerEvent | bool | 是否触发事件,默认为true |
AIBaseClient* aiClient = GetAIBaseClient();
AIBaseClient* target = GetTargetUnit();
if (aiClient && target) {
bool success = aiClient->IssueOrder(eGameObjectOrder::AttackUnit, target);
}
# IssueOrder
bool IssueOrder(eGameObjectOrder order, Vector const& position, bool triggerEvent = true)
向AI单位发送指令,指定目标位置。
参数名字 | 参数类型 | 描述 |
---|---|---|
order | eGameObjectOrder | 指令类型 |
position | Vector | 目标位置 |
triggerEvent | bool | 是否触发事件,默认为true |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
Vector targetPos(100.0f, 0.0f, 200.0f);
bool success = aiClient->IssueOrder(eGameObjectOrder::MoveTo, targetPos);
}
# Level
int Level()
获取当前AI单位的等级。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
int level = aiClient->Level();
// 使用单位等级进行判断
}
# Mana
float Mana()
获取AI单位当前的法力值。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float mana = aiClient->Mana();
// 使用法力值信息
}
# ManaPercent
float ManaPercent()
获取AI单位的法力值百分比。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float manaPct = aiClient->ManaPercent();
if (manaPct > 50.0f) {
// 当法力值高于50%时执行操作
}
}
# ManaCost
float ManaCost(eSpellSlot slot)
获取指定技能消耗的法力值。
参数名字 | 参数类型 | 描述 |
---|---|---|
slot | eSpellSlot | 技能槽位 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float cost = aiClient->ManaCost(eSpellSlot::Q);
// 使用Q技能的法力消耗进行判断
}
# MaxHealth
float MaxHealth()
获取AI单位的最大生命值。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float maxHealth = aiClient->MaxHealth();
float currentHealth = aiClient->Health();
float healthPercentage = (currentHealth / maxHealth) * 100.0f;
}
# MaxMana
float MaxMana()
获取AI单位的最大法力值。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float maxMana = aiClient->MaxMana();
float currentMana = aiClient->Mana();
float manaPercentage = (currentMana / maxMana) * 100.0f;
}
# MoveTo
bool MoveTo(const Vector& position)
控制AI单位移动到指定位置。
参数名字 | 参数类型 | 描述 |
---|---|---|
position | Vector | 目标位置的三维坐标 |
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
Vector targetPos(100.0f, 0.0f, 200.0f);
bool success = aiClient->MoveTo(targetPos);
}
# MoveSpeed
float MoveSpeed()
获取当前AI单位的移动速度。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float ms = aiClient->MoveSpeed();
// 使用移动速度进行计算
}
# Owner
AIBaseClient* Owner()
获取当前AI单位的拥有者。如果调用此函数的对象是提伯斯(Tibbers),将返回安妮(拥有者)。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
AIBaseClient* owner = aiClient->Owner();
if (owner) {
// 处理拥有者
}
}
# Path
std::vector<Vector>const& Path()
获取当前AI单位的移动路径。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
auto& path = aiClient->Path();
if (!path.empty()) {
// 处理移动路径
}
}
# PhysicalShield
float PhysicalShield()
获取AI单位的物理护盾值。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float physShield = aiClient->PhysicalShield();
// 处理物理护盾信息
}
# Position
Vector const& Position()
获取AI单位当前的位置。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
Vector position = aiClient->Position();
// 使用位置信息
}
# ServerPosition
Vector const& ServerPosition()
获取当前AI单位在服务器上的位置。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
Vector serverPos = aiClient->ServerPosition();
// 使用服务器位置进行计算
}
# SkinId
std::uint32_t SkinId()
获取当前AI单位的皮肤ID。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
std::uint32_t skinId = aiClient->SkinId();
// 使用皮肤ID进行判断
}
# SkinName
const char* SkinName()
获取当前AI单位的皮肤名称。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
const char* skinName = aiClient->SkinName();
// 使用皮肤名称进行处理
}
# SpellBlock
float SpellBlock()
获取当前AI单位的魔法抗性。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float magicResist = aiClient->SpellBlock();
// 使用魔法抗性进行计算
}
# SpellBook
Spellbook* SpellBook()
获取当前AI单位的技能书。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
Spellbook* book = aiClient->SpellBook();
if (book) {
// 使用技能书进行处理
}
}
# StatusFlags
eGameObjectStatusFlags StatusFlags()
获取当前AI单位的状态标志。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
eGameObjectStatusFlags flags = aiClient->StatusFlags();
// 使用状态标志进行判断
}
# Stop
void Stop()
停止AI单位当前的所有行为。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
aiClient->Stop();
}
# TotalAttackDamage
float TotalAttackDamage()
获取当前AI单位的总攻击力(基础+额外)。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float totalAD = aiClient->TotalAttackDamage();
// 使用总攻击力进行计算
}
# TotalMagicalDamage
float TotalMagicalDamage()
获取当前AI单位的总法术强度。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient) {
float totalAP = aiClient->TotalMagicalDamage();
// 使用总法术强度进行计算
}
# VisibleOnScreen
bool VisibleOnScreen()
判断当前AI单位是否在屏幕上可见。
AIBaseClient* aiClient = GetAIBaseClient();
if (aiClient && aiClient->VisibleOnScreen()) {
// 单位在屏幕上可见
}