【暗黑3导航插件】TurboHUD中文交流社区

 找回密码
 新建会员

QQ登录

只需一步,快速开始

查看: 12292|回复: 11
打印 上一主题 下一主题

关于闪避射击(回避射击)雷电宏的咨询

[复制链接]

13

主题

190

帖子

2441

积分

金牌会员

Rank: 6Rank: 6

积分
2441

雷电宏发展贡献者

跳转到指定楼层
楼主
发表于 2019-3-11 09:22:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 michael_han1986 于 2019-3-11 16:38 编辑

文件名:DemonHunterEvasiveFirePlugin.cs
代码:
[AppleScript] 纯文本查看 复制代码
namespace Turbo.Plugins.LightningMod
{
    public class DemonHunterEvasiveFirePlugin : AbstractSkillHandler, ISkillHandler
        {
        public DemonHunterEvasiveFirePlugin()
            : base(CastType.BuffSkill, CastPhase.AutoCast, CastPhase.Move, CastPhase.Attack)
        {
            Enabled = false;
        }

        public override void Load(IController hud)
        {
            base.Load(hud);
            AssignedSnoPower = Hud.Sno.SnoPowers.DemonHunter_EvasiveFire;

            CreateCastRule()
                .IfInTown().ThenNoCastElseContinue()
                .IfCastingIdentify().ThenNoCastElseContinue()
                .IfCastingPortal().ThenNoCastElseContinue() 
                .IfOnCooldown().ThenNoCastElseContinue()
                .IfCanCastBuff().ThenContinueElseNoCast() 
                .IfCanCastSimple().ThenContinueElseNoCast()
                .IfTrue(ctx => (ctx.Skill.Rune == 0 || ctx.Skill.Rune == 4) && ctx.Skill.Player.Powers.BuffIsActive(359583, 0)).ThenContinueElseNoCast()//强化硬甲或凝神射击 且 装备守心克己
                .IfEnoughMonstersNearbyCursor(ctx => 30, ctx => 1).ThenContinueElseNoCast()
                .IfSpecificBuffIsAboutToExpire(hud.Sno.SnoPowers.Generic_ItemPassiveUniqueRing735x1, 1, 30, 100).ThenCastElseContinue()
                ;
        }
    }
}


请问,能否在判断克己守心BUFF之前,额外加入一段判断憎恨值百分比的语句?
可能类似这样的,憎恨值百分比低于50%或者可以修改成40、30、20都行。
[AppleScript] 纯文本查看 复制代码
.IfTrue(ctx.Skill.Player.Stats.ResourcePctSpirit < 50).ThenCastElseContinue()

然后就是类似这样的语句,应该加在哪一行?才能保证在判断克己守心BUFF之前就执行?

目的:非减耗塔阶段、断复仇-恨意迸发时、没有带复仇-恨意迸发时、普通金币装扫图刷小米时、甚至使用旅者套时、娜掠5+3时,都要频繁的使用回憎技能,普遍是1.X~3.X秒一次,时间有浮动;
而连续释放回憎技能又会导致满憎了还在主动打(浪费了输出的时间)

所以,思路是:
1,先判断是否带技能闪避射击,符文→(ctx.Skill.Rune == 0 || ctx.Skill.Rune == 4)
2,判断憎恨百分比,且不存在减耗塔BUFF,憎恨低于X%就尝试强制使用.ThenCastElseContinue()(我选择20%)
→3,判断是否携带明彻裹腕,且不存在防御塔BUFF(请问这两个塔的BUFF能写在判断条件里面么?)
→4,判断明彻裹腕减伤是否存在,若即将消失(消失前500毫秒),且不存在防御塔BUFF,则尝试强制使用.ThenCastElseContinue()
5,判断是否携带克己守心ctx.Skill.Player.Powers.BuffIsActive(359583, 0
6,判断附近存在敌人IfEnoughMonstersNearbyCursor(ctx => 30(打技能就能回憎,打技能就能保持明彻,所以这条判断在克己守心的段落)
7,判断克己守心BUFF存在hud.Sno.SnoPowers.Generic_ItemPassiveUniqueRing735x1, 1, 30, 100,不存在则尝试强制使用.ThenCastElseContinue()
→8,判断是否存在邪秽之精(不洁套)2件效果(你的能量生成技生成 2 点额外的憎恨值和 1 点戒律值。)【注:娜掠5+3是用不到这条的,只有不洁套才会用到】
→9,判断戒律<33%(之前修改过蓄势待发的雷电宏,是MAX-30,但蓄势待发存在CD,而max-30约占总戒律34%左右,所以这里设定保留了一定余量,仅当连续使用戒律技能后,来不及回戒律导致增伤不足,而急需手动回复戒律),且不存在减耗塔BUFF,则尝试强制使用.ThenCastElseContinue()


通常,非减耗塔阶段,如果走到判断②,一般5秒内(不刻意堆减耗词缀的话)大概率会打出一次闪避射击;
再次,一般带明彻是娜掠5+3或者多重大米用的,明彻5秒、克己守心也是5秒;几乎就是5秒内必打一次闪避(前提是带明彻)
从而,判断⑦可能就无需执行了。(除非长距离周围没怪,那就要执行⑦)
当然,高减耗词缀或者存在减耗塔、防御塔BUFF的情况下,判断②、④不会被执行,而这时候就要执行判断⑦来保持克己守心了。
另外,②和③④是可以对调的,例如先判断③④,再判断②(明彻判断不通过,后面的语句还会执行吗?),不过通常情况下,执行②(回憎)的情况比较多,其次是④(带明彻),最后是⑦(对戒)。整体思路方式跟蛮子5+3先刷CD后保持对戒差不多一个意思,DH是回憎,蛮子是刷CD

请问,怎么写?怎么改?怎么插?
我在CreateCastRule()下面插入了这两行
.IfTrue(ctx => ctx.Skill.Player.Stats.ResourcePctHatred < 20).ThenCastElseContinue()//憎恨值百分比小于20%
.IfSecondaryResourceAmountIsBelow(ctx => 25).ThenCastElseContinue()//戒律值小于25,暂时无法判断不洁套的前提

貌似暂时可行,只是不知道怎么插入减耗塔BUFF和防御塔BUFF的判断,至于明彻减伤的问题,我没有装备代码和BUFF代码
[AppleScript] 纯文本查看 复制代码
            CreateCastRule()
                .IfInTown().ThenNoCastElseContinue()
                .IfCastingIdentify().ThenNoCastElseContinue()
                .IfCastingPortal().ThenNoCastElseContinue() 
                .IfOnCooldown().ThenNoCastElseContinue()
                .IfCanCastBuff().ThenContinueElseNoCast() 
                .IfTrue(ctx => ctx.Skill.Player.Stats.ResourcePctHatred < 20).ThenCastElseContinue()//憎恨值百分比小于20%
                .IfSecondaryResourceAmountIsBelow(ctx => 25).ThenCastElseContinue()//戒律值小于25,暂时无法判断不洁套的前提
                .IfTrue(ctx => (ctx.Skill.Rune == 0 || ctx.Skill.Rune == 4) && ctx.Skill.Player.Powers.BuffIsActive(359583, 0)).ThenContinueElseNoCast()//强化硬甲或凝神射击 且 装备守心克己
                .IfEnoughMonstersNearbyCursor(ctx => 30, ctx => 1).ThenContinueElseNoCast()
                .IfSpecificBuffIsAboutToExpire(hud.Sno.SnoPowers.Generic_ItemPassiveUniqueRing735x1, 1, 30, 100).ThenCastElseContinue()
                ;
        }
    }
}









111

主题

5004

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13243
QQ
沙发
发表于 2019-3-11 12:56:39 | 只看该作者
你这个比较复杂,我今天没什么时间测试
可以回答你的是插件条件流是顺序往下进行,该插入哪一行你自己根据需要判断
具体的条件我回到电脑上时给你测试了再说,你这个要判断的东西实在太多,不是三两句能写好的
比较急的问题尽量直接联系客服QQ1920784540,论坛不能及时回复

111

主题

5004

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13243
QQ
板凳
发表于 2019-3-11 12:59:01 | 只看该作者
判断条件那么多,再给你个自动走路,是不是就能挂机了
比较急的问题尽量直接联系客服QQ1920784540,论坛不能及时回复

13

主题

190

帖子

2441

积分

金牌会员

Rank: 6Rank: 6

积分
2441

雷电宏发展贡献者

地板
 楼主| 发表于 2019-3-11 13:09:00 | 只看该作者
本帖最后由 michael_han1986 于 2019-3-11 17:32 编辑
TurboHUD 发表于 2019-3-11 12:59
判断条件那么多,再给你个自动走路,是不是就能挂机了

确实,我自己也觉得略微有点过分,不过想到蛮子5+3可以泄怒刷CD保持对戒,DH也能回憎回戒律保持对戒,差不多是一个意思,当然,还需要自己手动打多重,或在其他必要的时候手动打闪避(例如元素戒火元素之前,回满憎恨,在火元素期间打出更多的多重、集束箭;在冰元素之前回憎,在冰元素期间打集束箭等等)

现在暂时插入了两句
.IfTrue(ctx => ctx.Skill.Player.Stats.ResourcePctHatred < 20).ThenCastElseContinue()//憎恨值百分比小于20%
.IfSecondaryResourceAmountIsBelow(ctx => 25).ThenCastElseContinue()//戒律值小于25,暂时无法判断不洁套的前提

但是还不能判断减耗塔、护盾塔、手腕减伤、不洁套

自用或许可以,分享给大家用可能适用性还不足
[AppleScript] 纯文本查看 复制代码
[266258]
EN_266258=Pylon_Channeling
CN_266258=塔_减耗塔
TW_266258=塔_引能秘壇
            if (pwr == Hud.Sno.SnoPowers.Generic_PagesBuffInfiniteCasting.Sno){
                yield return new BuffRule(pwr) { IconIndex = 0, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = false}; //减耗塔
            }


[AppleScript] 纯文本查看 复制代码
[266254]
EN_266254=Pylon_Shield
CN_266254=塔_护盾塔
TW_266254=塔_防護秘壇
            if (pwr == Hud.Sno.SnoPowers.Generic_PagesBuffInvulnerable.Sno){
                yield return new BuffRule(pwr) { IconIndex = 0, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = false}; //护盾塔
            }


[AppleScript] 纯文本查看 复制代码
[423244]
EN_423244=Set_Unhallowed Essence(4)
CN_423244=套装_邪秽之精(4)
TW_423244=套裝_邪瀆精華(4)
                        if (pwr == 423244){
                                yield return new BuffRule(pwr) { IconIndex = 1, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = false}; //邪秽之精4件Unhallowed Essence
                        }


[AppleScript] 纯文本查看 复制代码
[441517]
EN_441517=LegendaryItems_Wraps of Clarity
CN_441517=传奇物品_明彻裹腕
TW_441517=傳奇物品_澄明裹腕
                        if (pwr == Hud.Sno.SnoPowers.WrapsOfClarity.Sno){
                                yield return new BuffRule(pwr) { IconIndex = 1, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = false}; 
                        }


找是找了,但是构成语句不会写,尬

下面是全能法戒的sno,如果能写出判断火元素(或冰、或电、或物理)期间仅保持减伤和对戒,无视憎恨的话,那么就可以把另一条关于憎恨的百分比条件写的高一些了
但如果不能将全能法戒的sno写进判断条件,那另一条关于憎恨的百分比条件就设置的低一些
[AppleScript] 纯文本查看 复制代码
                        if (pwr == Hud.Sno.SnoPowers.Cindercoat.Sno){} 
                        if (pwr == Hud.Sno.SnoPowers.CoilsOfTheFirstSpider.Sno){} 
                        if (pwr == Hud.Sno.SnoPowers.ConventionOfElements.Sno){
                                yield return new BuffRule(pwr) { IconIndex = 1, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = false};
                                yield return new BuffRule(pwr) { IconIndex = 2, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = false};
                                yield return new BuffRule(pwr) { IconIndex = 3, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = false};
                                yield return new BuffRule(pwr) { IconIndex = 4, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = false};
                                yield return new BuffRule(pwr) { IconIndex = 5, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = false};
                                yield return new BuffRule(pwr) { IconIndex = 6, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = false};
                                yield return new BuffRule(pwr) { IconIndex = 7, MinimumIconCount = 1, ShowTimeLeft = true, ShowStacks = false};
                        } 

111

主题

5004

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13243
QQ
5#
发表于 2019-3-11 13:24:18 | 只看该作者
判断套装用Hud.Game.Me.GetSetItemCount(),夸号内的数字你可以用dump导出,然后在日志里找到你穿这件套装的部位,查看日志可以看到相关的编号
判断各种buff,你可以在BuffRuleFactory.ini里找SNO在BuffRuleFactory.cs里找Icoindex,这些都是提前找好了的,几乎包含所有BUFF。BuffRuleFactory.cs这个文件里面部分是直接用的SNO数字,部分用的是英文名,自己搜数字或技能英文名或装备英文名应该能找到
比较急的问题尽量直接联系客服QQ1920784540,论坛不能及时回复

27

主题

91

帖子

417

积分

中级会员

Rank: 3Rank: 3

积分
417

雷电宏发展贡献者

6#
发表于 2019-3-12 09:02:48 | 只看该作者
本帖最后由 goas2018 于 2019-3-12 10:30 编辑

好像不用那么复杂吧,塔啥的还要考虑进宏啊,要是冲榜高手可能需要。我自用就下面的,供参考,一点:逻辑判断action是cast or nocast那代码就终止了重新循环,只有 continue才继续下面语句。

.IfPrimaryResourceAmountIsBelow(ctx => 30).ThenCastElseContinue() //憎恨低于30
.IfEnoughMonstersNearby(ctx => 40, ctx => 1).ThenContinueElseNoCast()
.IfSpecificBuffIsAboutToExpire(hud.Sno.SnoPowers.WrapsOfClarity, 1, 30, 100).ThenCastElseContinue()//明徹buff 30-100ms要消失了
.IfTrue(ctx => ctx.Skill.Player.Powers.BuffIsActive(359583, 0)).ThenContinueElseNoCast()//装备守心克己
.IfEnoughMonstersNearbyCursor(ctx => 30, ctx => 1).ThenContinueElseNoCast()
.IfSpecificBuffIsAboutToExpire(hud.Sno.SnoPowers.Generic_ItemPassiveUniqueRing735x1, 1, 30, 100).ThenCastElseContinue();//克己buff 30-100ms要消失了

111

主题

5004

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13243
QQ
7#
发表于 2019-3-12 13:10:02 | 只看该作者
goas2018 发表于 2019-3-12 09:02
好像不用那么复杂吧,塔啥的还要考虑进宏啊,要是冲榜高手可能需要。我自用就下面的,供参考,一点:逻辑判 ...

理解的没错,顺序往下,触发nocast后终止重新循环
比较急的问题尽量直接联系客服QQ1920784540,论坛不能及时回复

111

主题

5004

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13243
QQ
8#
发表于 2019-3-12 13:12:36 | 只看该作者
michael_han1986 发表于 2019-3-11 13:09
确实,我自己也觉得略微有点过分,不过想到蛮子5+3可以泄怒刷CD保持对戒,DH也能回憎回戒律保持对戒,差 ...

全能法戒7个IconIndex代表7种不同元素buff
所以你说的这些复杂条件,都是可以实现的
比较急的问题尽量直接联系客服QQ1920784540,论坛不能及时回复

111

主题

5004

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13243
QQ
9#
发表于 2019-3-13 01:12:54 | 只看该作者
Hud.Game.Me.GetSetItemCount(254164)
是不洁套
比较急的问题尽量直接联系客服QQ1920784540,论坛不能及时回复

111

主题

5004

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13243
QQ
10#
发表于 2019-3-13 03:03:38 | 只看该作者
根据你的要求,已经更新了插件,你可以测试一下
比较急的问题尽量直接联系客服QQ1920784540,论坛不能及时回复
您需要登录后才可以回帖 登录 | 新建会员

本版积分规则

TurboHUD交流社区  

GMT+8, 2024-6-2 03:00 , Processed in 0.185532 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表