骑士刚强之道]关于骑士的'宏'汇总.在老罗的秩序之源里面,我发现关于宏的部分太少.也许是NGA和猫扑的区别吧.刚玩骑士不久,这里尽我所能贴一些出来,希望斑竹能高亮,也希望老罗可以加入秩序之源里面.
[请问如果TBC带判断的宏会被取消,那插件呢?如果TBC依然保持插件的判断功能,判断宏就依然可以工作,宏的本质是LUA脚本.姑且认为不能工作了,那更可以通过我的目录里面的第3扩展来实现一切功能]
目录: 1,入门级宏介绍,很轻易的以这个格式举一反三. 2,进阶级宏介绍,希望大家可以从里面学到这里没有的东西. 3,LUA脚本级宏扩展(准备放在2楼),感兴趣,以及渴望以宏致胜的骑士继续..
一点小要求 请关闭WOW自带的以及任何整合插件带的自我施法.
一点要提前说明的 动作分为软动作(soft)和硬动作(hard),软动作我是指没有动作行为的,如选择目标,说话等.软动作可以由任何事件(event)触发,包括:密语,进入/脱离战斗,受到伤害,受到治疗,进出副本等等.硬动作就是必须要由一个硬件事件(hardware event)触发的动作,释法,移动等都是.硬件事件仅仅包括操作计算机的人的动作.例如可以通过注册一个密语事件,让别人米你,成为你的目标,但不能给予其祝福.无公共CD的硬动作是可以和其他硬动作同时被一个硬件事件触发的;反之,一个硬件事件只能触发一个有CD的硬动作.
{入门级宏}
1,法术的自我释放,有2种方法:
/script CastSpellByName("清洁术",1) [加1参数的释法命令] /script TargetUnit("player");CastSpellByName("清洁术");TargetLastUnit() [先选择自己为目标再释法,再切换到上一个目标] (第一种略过了目标的切换是很好的方法)
2,SpellStopCasting()打断释法函数的骑士用法.
/script CastSpellByName("神恩术");SpellStopCasting();CastSpellByName("神圣震击") [防止被取散的必暴震击] /script SpellStopCasting();CastSpellByName("圣盾术") [保证按无敌时没有其他任何动作]
3,RAID中治疗保护队友的语言通知:
/script CastSpellByName("圣光术");SendChatMessage("你正处于危险之中,正在为你吟唱顶级圣光术!", "WHISPER",GetDefaultLanguage("player"),UnitName("target")) [治疗并密语队友] /script CastSpellByName("保护祝福") /RA %t <<<<已给保护祝福! [团队通知给某人保护祝福]
{进阶级宏} BLZ所提供的UI,API非常强大,可以判断很多种情况.判断由机器完成,是简化操作的一种手段.
1,要水宏:
/script if(UnitIsFriend("target","player") and UnitClass("target")=="法师") then local tf_un=UnitName("target");SendChatMessage(tf_un.."朋友你好,给点水嘛.谢谢!", "WHISPER",GetDefaultLanguage("player"),tf_un);end [这个宏含有目标友好与职业判断,点的不是法师是发不出去的,可以避免闹笑话]
2,RAID一些宏: 骑士版5秒回蓝刷血:
/script if(flt==nil) then flt=0;else local nowTime=GetTime();if(flt<=0) then CastSpellByName("圣光闪现");fst=nowTime;end;flt=1.5+5+0.1-(nowTime-fst);end [里面1.5+5+0.1为 吟唱时间+5秒回蓝+网络延迟]
BWL3号致死刷血:(仅仅是蓝不够的情况才会用到吧?)
/script for i=1,16 do if(UnitDebuff("targettarget",i)) then if(string.find(UnitDebuff("targettarget",i),"SavageBlow")) then TargetUnit("targettarget");CastSpellByName("圣光闪现");TargetLastTarget();end;end;end [选定BOSS,只有在BOSS目标身上有致死DEBUFF的时候,才开始吟唱.里面SavageBlow为致死的图表名]
防止误干涩:
/script if(UnitClass("target")=="牧师" or UnitClass("target")=="圣骑士" or UnitClass("target")=="德鲁依") then CastSpellByName("神圣干涉");end [只有当目标为3治疗职业时,才予以干涉]
只有在危机时刻使用圣疗:
/script if(UnitHealth("target")<2000) then CastSpellByName("圣疗术");SendChatMessage("对[%t]使用圣聊!");end [只有当目标生命在2000以下才使用圣疗,当然2000的具体数字可以修改]
治疗OT自动给予保护:
/script if(UnitClass("targettarget")=="牧师" or UnitClass("targettarget")=="德鲁依") then TargetUnit("targettarget");SpellStopCasting();CastSpellByName("保护祝福");else CastSpellByName("圣光闪现");SpellTargetUnit("targettarget");end [选定目标,治疗目标的目标,如果治疗OT则切换到治疗,释放保护]
根据目标职业给予力量/智慧祝福:
/script if(UnitClass("target")=="战士" or UnitClass("target")=="盗贼") then CastSpellByName("力量祝福");else CastSpellByName("智慧祝福");end
3,PVP相关(这里我将给予比较详细的介绍)
饰品和自我自由祝福:
/script if(HasFullControl()==nil) then UseInventoryItem(13);elseif(not IsShiftKeyDown()) then CastSpellByName("自由祝福",1);else CastSpellByName("自由祝福");end [当无法自我控制的时候,使用上面一个饰品;可以自我控制的时候给自己自由祝福,按下SHIFT则仅仅给目标释放自由祝福] HasFullControl()函数判断玩家是否可以自我控制,我的经验,只有恐惧和变形是标志为nil.这是一个可以把使用饰品和自我自由祝福结合起来的宏.
圣印和审判:
/script for i=1,16 do if(UnitBuff("player",i)) then if(string.find(UnitBuff("player",i),"ThunderBolt")) then CastSpellByName("审判");break;end;else CastSpellByName("正义圣印");break;end;end [如果有正义圣印,则释放审判;如果没有则释放正义圣印] 搜索玩家人物的16个BUFF位,发现则审判,没有则添加圣印,跳出循环.其中ThunderBolt是正义圣印的图标名.其他几中图标名我列在下面.这是一个可以把圣印和审判结合到一个按键上的宏. 命令InnerRage 光明HealingAura 智慧RighteousnessAura 公正SealOfWrath 十字军HolySmite
自我清洁,可解才解:
/script for i=1,16 do if(UnitDebuff("player",i,1)) then CastSpellByName("清洁术",1);elseif(UnitDebuff("player",i)==nil) then CastSpellByName("清洁术");break;end;end [当自己有可以驱散的DEBUFF,则自我清洁,如果没有,则仅仅释放清洁术] 也就是这个宏是自我优先清洁,当然可以把后面的清洁术改为其他动作.自我清洁设一个hotkey是很有必要的.
惩戒骑对抗MS/SM使用一级命令:
/script if(UnitClass("target")=="牧师" or UnitClass("target")=="萨满祭祀") then CastSpellByName("命令圣印(等级 1)");else CastSpellByName("命令圣印");end 这样被驱散了,不会心痛.当然这个也可以做到上面的圣印审判宏里面.
对应圣印更换武器:
/script CastSpellByName("命令圣印");SpellStopCasting();UseAction(twohand_slot,0,1) [这里使用了UseAction()这个函数,twohand_slot那里填入动作条代码,也需要把双手武器的图标移到对应的动作条上]
/script CastSpellByName("公正圣印");SpellStopCasting();UseAction(onehand_slot,0,1);UseAction(shield_slot,0,1) [同上]
单双手互换:
/script if(IsEquippedAction(twohand_slot)) then UseAction(onehand_slot,0,1);UseAction(shield_slot,0,1);else UseAction(twohand_slot,0,1);end [先使用IsEquippedAction()判断双手,也就是处于动作条位置的那把双手武器优先,同样需要你自己填入动作条编号] 动作条编号如下: 25-36 bar on right-side of screen, far right (top to bottom)右边 37-48 bar on right-side of screen, in one column (top to bottom)右2 49-60 lower right bar (left to right)右下 61-72 lower left bar (left to right)左下
------------------------------------------------------------------以下为新加入部分 1,无目标或者敌对目标,为自己加祝福;友好目标则为目标添加:
/script if(UnitIsFriend("player","target")==nil) then CastSpellByName("光明祝福",1);else CastSpellByName("光明祝福");end [以上以光明祝福做例]
2,战场用保护或者无敌来解除自己DEBUFF,再点则一键消除无敌/保护祝福: 无敌
/script local i for i = 0,15 do if(UnitBuff("player",i)) then if ( GetPlayerBuffTexture(i)== "Interface\\Icons\\Spell_Holy_DivineIntervention") then CancelPlayerBuff(i);break;end;else CastSpellByName("圣盾术");break;end;end 保护
/script local i for i = 0,15 do if(UnitBuff("player",i)) then if ( GetPlayerBuffTexture(i) == "Interface\\Icons\\Spell_Holy_SealOfProtection") then CancelPlayerBuff(i);break;end;else CastSpellByName("保护祝福",1);break;end;end
暂时就写以上这么多,有不对的地方或者想得不周到的地方请大家指正.2楼我将于近期贴出关于通过UI来写LUA脚本,达到扩展自己宏的方法例子等.尽请关注...
{LUA脚本级宏扩展} WOW的UI(用户接口user interface)也就是interface/Addons/目录下的插件.这些插件基本由3类文件构成: .toc 这个是说明注释 .xml 这个是WOW所用的网页框架格式的文件,窗口,按钮,界面等都是在这个文件里面完成的 .lua 这个是脚本文件,脚本代码就在这里面,也是我下面将要说的,我们所利用的文件 扩展思路: WOW里面的MACRO最多只能有255个字符,所以我们编辑比较大型的功能比较丰富的宏是不太现实的,但我们可以做到插件的.lua脚本里面去.写成一个函数.并在WOW里面直接调用这个函数,完成对宏的扩展. 例如:上述单双手武器互换的宏,我们可以做成这样一函数: function change_weapon(twohand_slot,onehand_slot,shield_slot) if(IsEquippedAction(twohand_slot)) then UseAction(onehand_slot,0,1); UseAction(shield_slot,0,1); else UseAction(twohand_slot,0,1); end end
把这个函数贴进,插件目录下面,某个插件的某个lua文件里面.我们就可以在WOW里面建一宏: /script change_weapon(twohand_slot,onehand_slot,shield_slot)
来直接调用这个函数,在宏中填入相应的动作条代码,就可以实现同样的功能. 当然我们还是更愿意,自己做.toc和.xml文件来做一个我们自己的LUA函数库: 例如:我们分别建立这些文件(可以复制其他插件的文件,再予以更名,用记事本打开) mymacro.toc
## Interface: 11200 --------------------------版本号
## Title:mymacro --------------------------名字
## Notes:我的功能函数库 ------------------注释,随便添加
mymacro.xml ----------------包含的XML文件的名字
mymacro.lua
这里可以放入任何你编好的函数,并在进入游戏时加载,便可以在宏中进行调用. 这里限于篇幅只举一个例子: 十字军+审判+命令:
function seal_combo_cross_comm()
local pb_cr=seal_is_some_buff("player","HolySmite");
local pb_co=seal_is_some_buff("player","InnerRage");
local tdb=seal_is_some_debuff("target","HolySmite");
if(not tdb) then
if(not pb_cr) then
CastSpellByName("十字军圣印");
else
if(target_ok()) then
CastSpellByName("审判");
else
SendChatMessage("No Target!");
end
end
else
if(not pb_co) then
CastSpellByName("命令圣印");
else
if(target_ok()) then
CastSpellByName("审判");
else
SendChatMessage("No Target!");
end
end
end
end
这个函数里面包含几个子函数:--判断目标身上是否有某一BUFF!111
function seal_is_some_buff(TargetOrPlayer,BuffTexture)
local buff_f=nil;
for buff_slot=1,16 do --通过BUFF标志,判断是否有对应BUFF!
if(UnitBuff(TargetOrPlayer,buff_slot)~=nil) then
if(string.find(UnitBuff(TargetOrPlayer,buff_slot),BuffTexture)) then
buff_f=1;break;
end
else
break;--无BUFF!
end
end
return buff_f;
end
--判断目标身上是否有某一DeBUFF!111
function seal_is_some_debuff(TargetOrPlayer,BuffTexture)
local buff_f=nil;
for buff_slot=1,16 do --通过BUFF标志,判断是否有对应BUFF!
if(UnitDebuff(TargetOrPlayer,buff_slot)~=nil) then
if(string.find(UnitDebuff(TargetOrPlayer,buff_slot),BuffTexture)) then
buff_f=1;break;
end
else
break;--无BUFF!
end
end
return buff_f;
end
--判断是否有可以被攻击的目标!104
function target_ok()
if(UnitExists("target") and (not UnitIsFriend("player","target"))) then
local un=UnitName("target")
return un;
else
return nil;
end
end
在WOW中只要调用主函数seal_combo_cross_comm()就可以实现. |