8.1魔兽宠物对战 可使用的自动换队插件教学
字符串选择器就是tdBattlePetScript用来查找或保存字符串的工具。在加载一个字符串前,会先使用这个工具搜索字符串的存储位置有没有合适的字符串。不同的字符串选择器就是不同的检索工具。每个字符串选择器都按照自己的格式保存或检索字符串。你可以理解为字符串存储在这些字符串选择器里。
原版字符串选择器的主要功能如下
1.支持用户调节字符串选择器的优先级,默认优先级从高到低是: Rematch , Base,Firstenemy, AllInOne。如果找到了多个字符串,优先级高的将被调用。如果使用我之前的修改版Base选择器,则更新后字符串会自动出现在firstenemy选择器中。
2.Rematch字符串选择器变化不大。字符串和rematch队伍信息一起存储。
2.Base字符串选择器以对战中敌我双方所有宠物为索引存储字符串,任何宠物位置变化都会导致索引不同。可以存储多个字符串。
3.Firstenemy 字符串选择器,以对战中敌方第一只宠物为索引存储字符串,功能和我之前修改版的Base相同。可以存储多个字符串。
3.AllInOne 字符串选择器只能存储一个字符串,无论什么队伍,什么敌人,这个字符串都可以读取出来。
4.无论使用那个字符串选择器,字符串在计算机上实际保存在wtf\Account\你的账号名或者编号\SavedVariables\tdBattlePetScript.lua这个文件中,Rematch队伍配置存放在wtf\Account\你的账号名或者编号\SavedVariables\Rematch.lua文件中。每个魔兽世界账号之间的字符串和队伍都是独立保存的。如果要迁移字符串和队伍,自行复制上述文件到其它账号下。
修改版主要是修改了以下功能点
1.为Rematch添加了3个函数:
1.1加载随机队伍函数
1.2检查队伍血量函数,支持对战不同的目标时,使用不同的血量检查函数。附件只添加了小艺和海难俘虏的特殊检查逻辑,需要支持其它NPC的要自行修改。
1.3刷新队伍函数。如果选中了加载最高血量宠物,并且满足以下2个条件之一:1选中了加载任意属性的宠物,2宠物属性完全相同,则插件会自动替换成当前血量最高的宠出战。如果没有选中加载最高血量宠物,则队伍中的成员不会被单独替换。如果队伍无效,插件会整队整队的替换。
2.支持调用不在队伍里的宠物功能,原来需要编3队的,现在只需要编一队了。检查队伍血量之前,刷新队伍函数会自动加载最高血量的宠物,然后才执行检查血量的动作。需要选择Rematch加载最高血量功能。比如:3只迷你恨光,3只黑索小炸弹,3只节点稚龙组成的末日队,以前要编成3队,现在只需要编一个队伍既可。对战时恨光或黑索死光才会换下一队。如果你的宠物属性不同,且战斗中属性不同的宠物有机会翻车的话,慎用此功能。
3.选中目标和退出对战都会重新加载队伍。
4.添加了备用队伍按照队伍尾部的数字排序功能,数字小的先上场。
血量检查函数逻辑
当目标是小艺时,只检查第一只宠物的血量,低于691判定队伍无效。
当目标是海难俘虏时,检查3只宠物,任何一只血量低于75%则队伍无效。
其他目标时,检查3只宠,血量不满就判定队伍无效。
名词解释
种子队:队伍目标和当前对战NPC ID相同的队伍称为种子队。种子队的标题去掉数字部分剩下的字符称为 队伍关键字。如果种子队的标题不含有数字,则队伍关键字提取失败,插件自动跳过换备用队和保底队的部分,强制加载种子队。如果想实现自动换队,种子队必须有且仅有一队。
备用对:队伍目标不是当前NPC ID或没有目标,但是队伍标题去掉数字后,等于 队伍关键字的队伍,称为备用队。备用队可以有0到多队。
保底队:队伍目标不是当前NPC ID或没有目标,但是队伍标题去掉数字后,不等于 队伍关键字,但是包含 队伍关键字的队伍,称为保底队。保底队可以有0或1队。
Rematch设置对自动换队流程的影响
1、Rematch - 自动加载队伍。 如果没有选中这个选项,则Rematch不会帮你加载队伍,也不会自动换队。
2、Rematch - 加载血量最高的宠物,以及 Allow Any Version(允许任意成长)选项。有3种情况:
2.1、同时选中 “加载血量最高的宠物 ” 和 “Allow Any Version(允许任意成长)”。 对每一只宠物,rematch会查找玩家拥有的同类宠物,将当前血量最高的宠物加载到队伍里。都是满血的话,通常是HH成长属性的宠物血最多。这样可能会打乱玩家的队伍,导致不同属性的宠物被换上场。如果不同属性会导致翻车的话,就会翻车。
2.2、只选中 “加载血量最高的宠物” ,不选中 “Allow Any Version(允许任意成长)” ,则Rematch会尝试只加载属性成长相同的备用宠。不同属性成长的宠物,不会纳入备选目标,无论血量多少。队伍不合格可以自动换队。
2.3、两个都不选。Rematch不会单独更换队伍中的宠物,如果队伍不合格,则整队整队的换。
3、如果属性不同会导致翻车,可以将不需要的宠放生、装笼。如果你想让不同属性的宠物上场的话,需要严格指定队伍成员,建议有2种方案:
3.1、为每只宠物分别编队,取消选中 “加载血量最高的宠物”。让Rematch整队的换。坏处是你不能偷懒,每只宠都要编队,还要注意不能重复。
3.2、将宠物换成3只属性一样的。
修改后自动换队的流程为
1.首先查询当前NPC的ID,检查Rematch保存的所有队伍,是否有种子队。如果有继续第2步。如果没有就彻底放弃加载流程。
2.刷新种子队,加载最高血量宠物。
3.检查种子队血量。如果检查通过就加载种子队并查找结束,不通过则执行第4步。
4.从种子队标题提取队伍关键字。如果提取成功,则执行第5步,不成功则执行第7步。
5.循环查找所有保存的Rematch队伍,对每个队伍执行以下动作:
5.1检查队伍是不是备用队。如果是备用队,则记录队伍信息,继续查找下一队。如果不是备用队,则检查这个队伍是不是保底队。如果是保底队,则记录队伍ID并继续检查下一队;如果不是保底队,则不记录并继续检查下一队。
5.2将备用队依据队尾的数字排序,从小到大。
5.3按顺序一个个刷新备用队,检查血量,找到合格的就加载并结束,找不到继续第6步。
6.如果第5.1步中查找到了保底队,就不检查血量,加载保底队。如果没有找到保底队,则执行第7步。
7.无视血量,加载种子队。
8.简单来说顺序就是:种子队,小数字的备用队,大数字的备用队,保底队,种子队(强制上场)。
新手务必读懂这个加载队伍的流程。对于解决队伍加载问题很有帮助。
Rematch队伍命名规则如下
1.种子队:AAA(XXX) -- AAA可以是任意字母,长度不要太长,但不能是数字。 表示括号内的内容必须有,最少有一个,括号本身不要出现在队伍名字中。 XXX是数字,位数可以不限,不同队伍位数可以不同,但不同队伍最好不要使用同一编号以便于监控。以下同样。
2.备用队:AAA(XXX) -- 备用队命名规则和种子队相同,备用队也可以有队伍目标,但不能和种子队的目标相同。
3.保底队:AAA(BBB) -- AAA必须和种子队完全相同, BBB可以是任意字母,但不能是数字。保底队也不能设定队伍目标。
命名示例:(不要输入冒号前面的字符,那是说明用的,不是队伍名字的一部分.)
种子队:霜火岭末日决战001
备用队:霜火岭末日决战002
备用队:霜火岭末日决战009
保底队:霜火岭末日决战保底
队伍关键字就是 霜火岭末日决战,这个关键字在备用队和种子队里,必须相同。
4.小技巧:种子队和备用队设置不同的队伍目标,就可以灵活切换队伍的角色,对甲目标是备用队,对乙目标是种子队。比如横扫地图虐小动物队,小动物种类繁多,每一种设置一个种子队即可。
5.备用队伍名字尾部的数字会决定上场顺序,数字小的先上场。同一个目标的队伍里,队伍名字的数字部分,去掉前面的无意义的0后,剩下的数字不能重复.
1.退出游戏,下载附件,解压,将解压后interface\addons\里的所有目录,复制到 D:\GM\World of Warcraft\_retail_\Interface\AddOns\下。这里假设你的wow安装在D:\GM\下,需要更换为你的wow的安装目录。如果没有AddOns这个目录,可以自己建立,但是名字不能错。
2.进游戏建立你自己的战队并编写字符串。
3.如图,进入对战,屏幕上方的 “VS” 字符处可以点击,字符串就是在这里录入的。
3.1、在VS上鼠标左键可以打开当前有效的字符串选择器清单,如果从字符串选择器中成功读取到了字符串,这个字符串选择器就是亮色的,否则不显示。
3.2、在VS上鼠标右键可以打开所有的字符串选择器清单,然后鼠标左键点击字符串选择器的名字,就打开了字符串输入栏,如图2.
3.3、图中Rematch字符串是我为了截图时临时添加的,实际当前运行的字符串选择器后面有个 勾勾 。
字符串选择器清单
字符串输入框
建议的字符串选择器用法
插件提供了4种字符串选择器,并且都可以保存字符串,那我到底保存在哪里合适呢?
1、Rematch 字符串选择器,适用于保存每个队伍的字符串,如果你的每个队伍的字符串都不相同的情况下,或者一个队伍和字符串打遍天下的时候。
2、Firstenemy 字符串选择器,适用于敌方第一只宠物是固定不变的时候,比如训练师,橙色宠物,打固定一个目标(如冰脊幼崽)等。设置一次字符串后,无论什么队伍和这个NPC对战,都会用同一个字符串。
3、AllInOne 字符串选择器,只能保存一个字符串,无论敌我队伍如何变化都是固定这个字符串。一般在这个选择器里,写入一个只有一行 quit 指令的字符串,用于特殊情况下自动退出对战。
4、原版Base字符串选择器,基本不用。
通常建议将字符串保存在Firstenemy里,大部分对战,敌方的第一只宠都是固定,且不同的NPC第一只宠互不相同。Rematch需要为每个队伍都设置字符串,比较繁琐,但是默认优先级高。AllInOne 又过于通用,失去了使用价值。
自定义插件的方法
以任意文本编辑器打开 Interface\Addons\Rematch\Process\PetLoading.lua 文件,找到function rematch:checkTeamHealth(team) 这个函数。
1、可以自行设置宠物低于多少血量会导致队伍失败。
if petHP < petMaxHP*1 then --修改这个1就可以了,最大只能是1,0.8意思就是剩余80%以下血量就是不合格。
2、可以设置不同的NPC不同的血量检查逻辑。
if mytarget == 9999999 then --你可以仿照这个IF自行写其它NPC的处理情况。
for i=1,1 do -- i=1,1 就是只检查第一只宠血量的意思,数字可以是1-3之间,后一个数字必须大于或等于前一个数字。每个数字代表队伍中的坑号。最多3个坑。
如果添加了其它条件,则函数架构如下,注意排版,确保end要正确配对。
if mytarget == xxxxx then -- 目标 xxxxx 的检查逻辑
.....
elseif mytarget == yyyyy then -- 目标 yyyyy 的检查逻辑
.....
else -- 没有特别写出的目标,执行的默认检查逻辑。
.....
end
方法一
1. 选中可以对战的目标NPC,随意以NPC为队伍目标创建并保存一个队伍,如果已存在这样的队伍,则不需再创建直接记下队伍名。执行 /reload 或者小退,大退让游戏保存插件数据。
2. 去WTF下打开Rematch的存档,搜索刚刚创建的队伍名,队伍前面的数字就是 NPCID
方法二
修改interface\addons\rematch\process\petloading.lua,在 mytarget = key 这一行的下一行加一句 rematch:print(mytarget)既可。这样每次对战任何NPC都会打印NPC的ID.
获得宠物ID与技能ID的宏
/run local i,j,k,l,m;for i=1,3 do j,k,l,m=C_PetJournal.GetPetLoadOutInfo(i);print(C_PetJournal.GetPetInfoByPetID(j),C_PetJournal.GetBattlePetLink(j),k,GetBattlePetAbilityHyperlink(k),l,GetBattlePetAbilityHyperlink(l),m,GetBattlePetAbilityHyperlink(m));end
注意此宏刚好255个字符,复制后是一行的,一个字都不能改.
使用此宏会在聊天栏依次打印当前加载的队伍中,1-3号坑的宠物ID,宠物链接(含名字),当前技能1-3的ID和链接(含名字).
如果你有聊天栏复制插件,则可以直接复制出来.
使用技能ID和宠物ID编写的字符串,可以独立与客户端语言而正确工作.为了便于阅读,可以在字符串里,用2个连续的"--"字符添加注释。
简单的故障诊断流程
1、备份后清空Interface目录和WTF目录,重新复制附件中的插件。
2、编队,写字符串。测试运行。
3、如果还不能换队,就可以来论坛问了。