|
|
最近写了一个插件,准备将自动输出功能集成进来,下面是模拟WBE实现的一些方法,不全,仅够自己用,如果需要其他的自行添加。
(这里只提供了方法签名,具体源码见附件)
[Lua] 纯文本查看 复制代码 AutoCombatUtils = {};
local Lib = AutoCombatUtils;
---返回公共CD的剩余冷却时间
function Lib.GCD() end
---返回指定技能的剩余冷却时间
function Lib.CD(spellIdOrName) end
---尝试释放技能,成功返回true,失败返回false
---@param spell string|number 技能ID或名称或者宏
---@param unit string|nil 技能施放目标
---@param delay number|nil 该技能下一次是否需要延迟释放
---@return boolean 成功返回true,失败返回false
function Lib.Run(spell, unit, delay) end
---获取指定单位的血量
---@param unit string 要获取血量的目标单位
---@param p number|boolean|nil 如果不为nil则返回百分比
---@param q number|boolean|nil 如果不为nil则返回损失的血量而非剩下的血量
function Lib.UnitHealth(unit, p, q) end
---获取指定单位的buff列表
---@param unit string 要获取buff的目标单位,如果不传则获取玩家自己的buff列表
function Lib.UnitBuffList(unit) end
---获取玩家身上指定buff的层数
---@param spellIdOrName string|number buff的名字或ID
---@param fullMatch boolean|nil 如果spellIdOrName是名字,则在buff名字匹配的时候是否完整匹配,默认为true
---@return number
function Lib.PlayerBuffCount(spellIdOrName, fullMatch) end
---获取玩家身上指定buff的剩余事件
---@param spellIdOrName string|number buff的名字或ID
function Lib.PlayerBuffTime(spellIdOrName) end
---获取玩家身上指定debuff的剩余时间
---@param spellIdOrName string|number debuff的名字或ID
function Lib.PlayerDeBuffTime(spellIdOrName) end
---判断玩家身上是否有指定的buff
---@param spellIdOrName string|number buff的名字或ID
function Lib.PlayerHasBuff(spellIdOrName) end
---判断玩家身上是否有指定的debuff
---@param spellIdOrName string|number debuff的名字或ID
function Lib.PlayerHasDeBuff(spellIdOrName) end
---判断某个单位身上是否有指定的buff
---@param unit string 要判断的单位
---@param spellIdOrName string|number buff的名字或ID
function Lib.UnitHasBuff(unit, spellIdOrName) end
---获取某个单位身上指定buff的剩余时间
---@param unit string 要判断的单位
---@param spellIdOrName string|number buff的名字或ID
function Lib.UnitBuffTime(unit, spellIdOrName) end
---判断某个单位身上是否有指定的debuff
---@param unit string 要判断的单位
---@param spellIdOrName string|number debuff的名字或ID
function Lib.UnitHasDeBuff(unit, spellIdOrName) end
---获取某个单位身上指定debuff的剩余时间
---@param unit string 要判断的单位
---@param spellIdOrName string|number debuff的名字或ID
function Lib.UnitDeBuffTime(unit, spellIdOrName) end
---检查是否有指定类型的debuff
---@param types string|table Magic, Disease, Poison, Curse 分别对应: 魔法、疾病、毒药、诅咒
function Lib.PlayerHasDeBuffType(types) end
---是否正在切换地图
function Lib.MapLoading() end
---是否在战斗中
function Lib.InCombat() end
---返回周围怪物的数量
---这个只是粗略的统计,只统计攻击自己或队友的怪物
function Lib.EnemyCount() end
---开启自动攻击
function Lib.Startattack() end
---停止自动攻击
function Lib.Stopattack() end
--- 获取玩家和指定单位之间的距离
--- 注意:这个不是精确的距离,而是最小距离和最大距离中的最大距离
function Lib.GetRange(unit) end
---获取目标正在读条的法术名称
---@param unit string 目标单位
---@param interrupt number|boolean|nil 是否只返回可以打断的技能
function Lib.UnitCastSpellName(unit, interrupt) end
--- 通过名字判断是否学习了指定的法术
---@param nameOrId string|number 法术名字或法术ID
---@param isPet boolean 是否是宠物法术
---@return boolean
function Lib.IsSpellKnown(nameOrId, isPet) end
---通过符文名字获取符文的ID
---@param rune string 符文名字
---@return number 符文的ID
function Lib.GetRuneId(rune) end
---获得指定符文的数量
---正常是每种符文都是两枚,有些时候会出现多枚的情况
---@param rune string|number 符文ID或符文名字
---@return number 符文的数量
function Lib.GetRuneCount(rune) end
---返回某种符文可用数量及冷却时间。
---@param rune string|number 符文名字或符文ID
---@return number, number, number 可用数量,第一枚符文的冷却时间,第二枚符文的冷却时间
function Lib.GetRune(rune) end
---判断是否有指定的符文
---@param runes string|table 可以传多个符文(以逗号分隔),只要有一个存在就返回true
---@return boolean
function Lib.HasRune(runes) end
下面是使用该工具写的一个骑士脚本(这里只是介绍如何使用这个工具,qs的具体输出逻辑不用关心):
[Lua] 纯文本查看 复制代码
-------------------------------------------------------
-- 圣骑士输出脚本
-------------------------------------------------------
PaladinAutoCombatScript = {};
local Lib = PaladinAutoCombatScript;
-- 注册一个SPELLS_CHANGED事件,当法术发生变动(学会了新法术或遗忘了某个法术)时调用该方法更新学会的法术
function Lib:OnSpellChanged()
-- 是否学习了命令圣印
self.HasSealOfCommand = IsSpellKnown(20375);
-- 是否学习了十字军打击
self.HasCrusaderStrike = IsSpellKnown(35395);
-- 是否学习了神圣风暴
self.HasDivineStorm = IsSpellKnown(53385);
-- 是否学习了正义之锤
self.HasHammerOfTheRighteous = IsSpellKnown(53595);
-- 是否学习了光环掌握
self.HasAuraMastery = IsSpellKnown(31821);
end
-- 攻击函数
function Lib:OnAttack()
local combat = AutoCombatUtils;
local health = combat.UnitHealth("player", "%");
-- 圣洁护盾(buff持续30秒,技能无CD,可以全程开着)
if not combat.PlayerHasBuff("圣洁护盾") and combat.Run("圣洁护盾", "player", 1) then
return;
end
-- 神圣恳求(减伤效果,需要神圣恳求雕文)
if health <= 85 and
not combat.PlayerHasBuff("神圣恳求") and
combat.Run("神圣恳求", nil, 1)
then
return;
end
-- 有拯救之手雕文时对自己使用有20%减伤
if health <= 75 and
not combat.PlayerHasBuff("拯救之手") and
combat.Run("拯救之手", "player", 1)
then
return;
end
-- 圣疗术
if health <= 50 and
not combat.PlayerHasDeBuff("自律") and
combat.Run("圣疗术", "target", 600)
then
return;
end
-- 正义之怒,天赋有减伤
if not combat.PlayerHasBuff("正义之怒") and combat.Run("正义之怒") then
return;
end
-- 虔诚光环(当前服务不能用惩戒光环)
if not combat.PlayerHasBuff("虔诚光环") and combat.Run("虔诚光环") then
return;
end
-- 命令圣印(天赋没点命令圣印就加光明圣印)
if Lib.SealOfCommandAvailable then
if self.HasSealOfCommand then
if not combat.PlayerHasBuff("命令圣印") and combat.Run("命令圣印") then
return;
end
elseif not combat.PlayerHasBuff("光明圣印") and combat.Run("光明圣印") then
return;
end
end
-- 强效王者祝福
if not combat.PlayerHasBuff("强效王者祝福") and combat.Run("强效王者祝福") then
return;
end
-- 目标不在近战(十字军打击)范围内时,只尝试释放审判和驱邪术
if self.HasCrusaderStrike and IsSpellInRange("十字军打击", "target") ~= 1 then
if IsSpellInRange("驱邪术", "target") == 1 and combat.Run("驱邪术", "target", 1) then
return;
end
if IsSpellInRange("圣光审判", "target") == 1 and combat.Run("圣光审判", "target", 0.5) then
return;
end
return;
end
-- 解魔法
if combat.PlayerHasDeBuffType("Magic") and combat.Run("清洁术", "player", 1) then
return;
end
-- 解疾病和中毒
if combat.PlayerHasDeBuffType("Disease,Poison") and
(combat.Run("清洁术", "player", 1) or combat.Run("纯净术", "player", 1))
then
return;
end
--开启自动攻击
combat.Startattack();
-- 目标有无敌buff时不用技能,只平砍
if combat.UnitHasBuff("target", 1100006) then
return;
end
if combat.GCD() > 0 then
return;
end
-- 光环掌握
if self.HasAuraMastery and
combat.UnitHealth("target", "%") < 100 and
combat.Run("光环掌握", nil, 1)
then
return;
end
-- 复仇之怒
if IsUsableSpell("复仇之怒") and combat.Run("复仇之怒", nil, 1) then
return;
end
-- 神圣愤怒
if combat.Run("神圣愤怒", nil, 1) then
return;
end
-- 战争艺术(触发的buff),有这个buff后可以瞬发圣光闪现或驱邪术
if combat.PlayerHasBuff("战争艺术") and combat.Run("驱邪术", "target", 0.5) then
return;
end
-- 愤怒之锤
if IsUsableSpell("愤怒之锤") and combat.Run("愤怒之锤", "target", 0.5) then
return;
end
-- 神圣风暴(该技能有内置CD,即便是CD好了也要间隔10秒才能施放)
if self.HasDivineStorm and combat.Run("神圣风暴", nil, 10) then
return;
end
-- 十字军打击
if self.HasCrusaderStrike and combat.Run("十字军打击", "target", 0.5) then
return;
end
-- 圣光审判
if combat.Run("圣光审判", "target", 0.5) then
return;
end
-- 正义之锤(需要装备单手近战武器)
if self.HasHammerOfTheRighteous and
IsUsableSpell("正义之锤") and
combat.Run("正义之锤", "target", 0.5)
then
return;
end
-- 奉献
if combat.Run("奉献", nil, 0.5) then
return;
end
end
AutoCombatUtils源码:
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?加入我们
x
|