飞扬 发表于 2024-5-28 14:16:41

魔锋的加血逻辑如何改变?大佬们教教我!!

魔锋的加血逻辑有点怪!!!多个成员损失生命值达到条件时,魔锋的逻辑是优先治疗最低生命值的目标,而不是优先治疗损失生命值最多的目标。
比如设定条件为血量低于90%加血,坦克满血5万,掉血50%,还剩2万5;输出职业满血2万,掉血20%,还剩1万6。这个时候搞笑的来了,魔锋非要去治疗掉血20%的成员,就因为坦克职业现有血量比输出职业高。


例如下面这段代码,我尝试过各种修改,仍然不能做到优先治疗损失生命值最多的成员
grouptype=""
if GetNumRaidMembers()>0
then
    grouptype="raid"
else
    grouptype="party"
end

local SS=BeeGroupMinScript('BeeRange(unit)<=40 and UnitCanAssist("player",unit) and not UnitIsDeadOrGhost(unit) and BeeUnitHealth(unit,"%")<90',"BeeUnitHealth(unit)",grouptype)

if UnitExists(SS) and BeeIsRun("圣光闪现",SS)
then
    BeeRun("圣光闪现",SS)
    return
end


试过改成下面这样,还是不行。魔锋还是会优先治疗最低生命值的成员,而不是损失生命值最多的成员
grouptype=""
if GetNumRaidMembers()>0
then
    grouptype="raid"
else
    grouptype="party"
end

local SS=BeeGroupMinScript('BeeRange(unit)<=40 and UnitCanAssist("player",unit) and not UnitIsDeadOrGhost(unit) and BeeUnitHealth(unit,"%")<90',"BeeUnitHealth(unit)",grouptype)

if UnitExists(SS) and BeeUnitHealth(SS,"%")<30 and BeeIsRun("圣光闪现",SS)
then
    BeeRun("圣光闪现",SS)
    return
end
if UnitExists(SS) and BeeUnitHealth(SS,"%")<50 and BeeIsRun("圣光闪现",SS)
then
    BeeRun("圣光闪现",SS)
    return
end
if UnitExists(SS) and BeeUnitHealth(SS,"%")<80 and BeeIsRun("圣光闪现",SS)
then
    BeeRun("圣光闪现",SS)
    return
end
if UnitExists(SS) and BeeUnitHealth(SS,"%")<90 and BeeIsRun("圣光闪现",SS)
then
    BeeRun("圣光闪现",SS)
    return
end


我还试过把BeeUnitHealth(unit,"%")<90 改成BeeUnitHealth(unit,"%",1)>10,依然行不通。

飞扬 发表于 2024-5-28 14:20:57

我也参考过其他大佬写的脚本,貌似区别都不大,都是优先生命值最低的目标而不是损失生命值最多的目标。

vshrd 发表于 2024-5-28 14:22:01

自己算- -
去用官方方法拿到目标的当前血量和最大血量

飞扬 发表于 2024-5-28 14:26:49

vshrd 发表于 2024-5-28 02:22 PM
自己算- -
去用官方方法拿到目标的当前血量和最大血量

老大,我是新手,能稍微说的详细点么?感谢您!!!{:5_173:}

vshrd 发表于 2024-5-28 14:33:55

WOW API里找方法
我没记错的话应该是GetUnitMaxHealth()和GetUnitHealth()

吾奶常煽赵子龙 发表于 2024-5-28 17:55:50

本帖最后由 吾奶常煽赵子龙 于 2024-5-28 06:02 PM 编辑

自己判断:

local unit = nil;
local prefix = "";
local count = 0;

if GetNumRaidMembers() > 0 then
    prefix = "raid";
    count = 40;
elseif GetNumPartyMembers() > 0 then
    prefix = "party";
    count = GetNumPartyMembers();
end

if prefix ~= "" then
    local maxLossHealth = 0;
    for i = 1, count do
      local unitId = prefix .. i;
      if UnitExists(unitId) and not UnitIsDeadOrGhost(unitId) and UnitCanAssist("player", unitId) and BeeRange(unitId) <= 40 then
            local lossHealth = BeeUnitHealth(unitId, nil, 1);
            if lossHealth > maxLossHealth then
                maxLossHealth = lossHealth;
                unit = unitId;
            end
      end
    end
else
    if BeeUnitHealth("player", "%") < 100 then
      unit = "player"
    end
end

if unit then
    BeeRun("圣光闪现", unit)
end


BeeUnitHealth:
第二个参数:传%或1,表示以百分比方式获取血量,传nil或其他的表示获取具体的血量数值;
第三个参数:不传或传0表示获取当前血量,传1或其他值表示获取损失的血量;

7858321 发表于 2024-5-28 18:26:06

本帖最后由 7858321 于 2024-5-28 06:33 PM 编辑

我记得好像一句就解决了问题了
BeeGroupMinHealthCast(false,false,false,false,50,"<","快速治疗","raid")
快速治疗 治疗 raid(团队)血量少于50%的队友。

7858321 发表于 2024-5-28 18:31:34

算了,自己看吧
BeeGroupMinHealthCast

傻瓜式获得小隊或團隊裡最小數值的人物或者对其施放技能

语法
      unit=BeeGroupMinHealthCast(DeBuffs,Buff,BuffOperator,BuffCd,Health,HealthOperator,Spell,Group)

参数




DeBuffs(可选)
字符串 -
注:DeBuffs 可以有多个BUFF 用逗号【,】分开 如:"刺骨之寒,恐惧" ,一般用来判断DBUFF但也可以用来判断其他BUFF.

Buff(可选)
字符串 - 只能判断一个 BUFF 多写...那个是SB。

BuffOperator(可选)
字符串 - 比较运算符,判断比较 Buff 的CD(BuffCd),和 BuffCd 配合使用。
*如:== , <= , >= , > , < , ~= 这些。

BuffCd(可选)
数值 - 判断比较 Buff 的CD,和 BuffOperator 配合使用。

Health(可选)
数值 - 判断比较血量(百分比),和 HealthOperator 配合使用。

Spell(可选)
字符串 - 要施放的技能名称只能一个技能。多写...那个是SX。

group(必须)
字符串 - 指定獲得數值的團/隊
         "party"      - 小隊
         "partypet" - 小隊寵物
         "raid"      - 團隊
         "raidpet"   - 團隊寵物
         "arena"   - 競技場敵人小隊

*标明(可选)时如果没具体参数那么必须把参数写为 false。





返回值


當 String 表達式 的結果為 true 時
返回 unit 反之返回 nil。

當 String 表達式 的結果為 true 時
同時也返回相應全局變量可通過amgv函數獲得值
unit       -amgv("amminimum_unit")
反之返回 nil。



备注

      
參數區分大小寫


请参考






Unit 详细请看Unit的说明

例子1:local Unit = BeeGroupMinHealthCast("刺骨之寒","回春术","<=",1,35,"<","回春术","raid")

if Unit then

return true;

end
复制代码找到 raid(团队) 身上有 刺骨之寒 并且身上没 回春术 或者 回春术 效果少于1秒 并且血量底于35%的队友,对其施放回春术。


例子2:
local Unit = BeeGroupMinHealthCast(false,"回春术","<=",1,false,false,"回春术","raid")

if Unit then

return true;

end
复制代码
找到 raid(团队)身上没 回春术 或者 回春术 效果少于1秒 的队友,对其施放回春术。

*那个改下 回春术 为 力量祝福 那么就是全团补BUFF当然是从血量最少的补起。



例子3:local Unit = BeeGroupMinHealthCast("肾击,制裁之锤,深度冻结,突袭,血袭,打劫,暗影之怒,猛击,冲击波,冲击,恶魔拦截,胁迫,挤压,战争践踏,火焰冲撞,震荡波,震荡猛击,星火昏迷,疲劳诅咒,冰冻陷阱,冰冻陷阱雕文,冰霜新星,地缚术,断筋,蛛网,残废术,寒冰屏障",false,false,false,false,false,"自由之手","raid")

if Unit then

return true;

end
复制代码用 自由之手 解除团队(raid),小队(party)中了 “肾击,制裁之锤,深度冻结,突袭,血袭,打劫,暗影之怒,猛击,冲击波,冲击,恶魔拦截,胁迫,挤压,战争践踏,火焰冲撞,震荡波,震荡猛击,星火昏迷,疲劳诅咒,冰冻陷阱,冰冻陷阱雕文,冰霜新星,地缚术,断筋,蛛网,残废术,寒冰屏障” 并且血量最少的。
同理别的职业改下技能或者BUFF列表就行了。



例子4:local Unit = BeeGroupMinHealthCast(false,false,false,false,50,"<","快速治疗","raid")

if Unit then

return true;

end
复制代码快速治疗 治疗 raid(团队)血量少于50%的队友。



例子5:local Unit = BeeGroupMinHealthCast("刺骨之寒",false,false,false,false,false,false,"raid")
复制代码获得 raid(团队)中了 刺骨之寒 并且血量最低的人的人物ID。


例子6:local Unit = BeeGroupMinHealthCast(false,false,false,false,false,false,false,"raid")
复制代码获得 raid(团队)血量最低的人的人物ID。如果没人掉血那么就会返回其中某人的血量,所以使用时要判断目标血量。

7858321 发表于 2024-5-28 18:42:09

本帖最后由 7858321 于 2024-5-28 06:44 PM 编辑

或者你写的代码中的BeeUnitHealth(unit,"%")<90写成BeeUnitHealth(unit,"%",1)>50就是缺失血量大于50%

飞扬 发表于 2024-5-29 12:41:18

7858321 发表于 2024-5-28 06:42 PM
或者你写的代码中的BeeUnitHealth(unit,"%")50就是缺失血量大于50%

我还试过把BeeUnitHealth(unit,"%")<90 改成BeeUnitHealth(unit,"%",1)>10,依然行不通。
页: [1] 2
查看完整版本: 魔锋的加血逻辑如何改变?大佬们教教我!!