圣骑士吧 关注:123,638贴子:3,083,908

【转】关于圣骑士的'宏'汇总

只看楼主收藏回复

这是一个老帖子,鉴于对各位想用“宏”的圣骑士来说是个福音。

据说TBC,将取消IF...THEN...语句.也就是说,所有带智能判断的宏都将停止工作。

所以这些“宏”在TBC前使用效果还是很好的。

原帖:http://bbs.ngacn.com/read.php?tid=894062


1楼2007-03-31 16:49回复

    只有在危机时刻使用圣疗:
    /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)左下


    3楼2007-03-31 16:51
    回复
      2025-08-22 21:55:13
      广告
      不感兴趣
      开通SVIP免广告
      {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.xml


      <Ui xmlns="http://www.blizzard.com/wow/ui/"
      此网页不属于NGA网站,NGA不保证其安全性
      继续访问 取消 不再提示我[ http://www.blizzard.com/wow/ui/" ] xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="[url]http://www.blizzard.com/wow/ui/
      此网页不属于NGA网站,NGA不保证其安全性
      继续访问 取消 不再提示我[ http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="[url]http://www.blizzard.com/wow/ui/ ][/url]
       ..\FrameXML\UI.xsd">
      <Script file="mymacro.lua"/> -------------包含的LUA脚本文件的名字
      <Frame name="mymacro"> -----------这个不可见窗体的名字
      <Scripts> 
      <OnLoad> 
      </OnLoad> 
      <OnEvent> 
      </OnEvent> ------------以上4句和事件EVENT有关,是进入游戏加载或注册的内容,这里为空
      </Scripts> 
      </Frame>
      </Ui>
      (由于系统自动把地址改为可点,如果要复制这里的请去掉地址2边的[]号)



      还有一个文件,里面就放入函数了(LUA语法请参看:http://www.wowtc.com/bbs/read.php?tid=4998&fpage=2
      此网页不属于NGA网站,NGA不保证其安全性
      继续访问 取消 不再提示我[ http://www.wowtc.com/bbs/read.php?tid=4998&fpage=2 ])
      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()就可以实现.

      ------------------------------------------------------------
      这部分内容就写到这里.如果大家需要帮助可以联系我.

      游戏有不同的种玩法,思考是共同点.

      感谢阅读这片帖子的朋友,感谢予以我支持的朋友.

      作者:cuzfrog


      4楼2007-03-31 16:52
      回复
        过多的依赖这些宏
        会让你的技术水平下


        IP属地:浙江5楼2007-03-31 16:56
        回复
          基本上我只用复活宏。。

          还有瘟疫3的治疗喊话。以及冰龙的冰箱喊话。

          有需要的人自然喜欢


          6楼2007-03-31 17:00
          回复
            • 218.200.247.*


            7楼2007-03-31 19:10
            回复
              /施放 救赎(等级 2) 



              3。正义圣印--------审判-----------正义圣印
              /script AQ={};AQ.i=1;AQ.x=function() AQ[AQ.i]() end 
              /script AQ[1]=function() CastSpellByName("正义圣印(等级 1)"); AQ.i=2 end

              /script AQ[2]=function() CastSpellByName("审判"); AQ.i=3 end 
              /script AQ[3]=function() CastSpellByName("正义圣印(等级 1)"); AQ.i=1 end 



              4。
              /target(我的名字)
              / script UserContainerItem(3,1)
              / script UserContainerItem(3,2)
              / script UserContainerItem(3,3)
              / script UserContainerItem(3,4)
              / script UserContainerItem(3,5)


              4。
              /script if(UnitMana(我的名字)>300) then CastSpellByName(“圣光术(等级4)”) 
              /script if(UnitMana(我的名字)<300) then CastSpellByName(“圣光闪现(等级2)”)
              /script if(UnitMana(我的名字)<200) then in 10 say 我没有魔法了,其他治疗跟上!!!! 


              6.
              /script if(UnitMana(lcddbao)>1000) then CastSpellByName(“圣光术(等级8)”) 
              /script if(UnitMana(lcddbao)<1000) then CastSpellByName(“圣光术(等级4)”) 
              /script if(UnitMana(lcddbao)<1000) then in 10 say 我没有魔法了,其他治疗跟上!!!! 
              这个程序就是说当我的魔法>1000的时候用8级圣光,魔法<1000的时候用4级圣光,并且在10秒后告知大家魔法值用光

              7.
              /施放 神圣干涉 
              /script TargetUnit("player") 
              /script if ( UnitName("target") ~=nil and UnitInParty("player","target") ) then SendChatMessage("<圣光与我同在……神圣干涉 %T >", "PARTY"); end 

              在神圣干涉时说话!“圣光与我同在……神圣干涉”可以设置成任何你想说的话


              8楼2007-04-01 19:07
              回复
                失误。。。。。。。1。
                如果目标职业为法师术士或德鲁伊则使用智慧祝福,否则使用力量祝福。 
                /script class = UnitClass("target"); if ( ( class == "法师" ) or ( class == "术士" ) or ( class == "德鲁伊" ) ) then CastSpellByName("智慧祝福(等级 1)"); else CastSpellByName("力量祝福(等级 1)"); end 


                2。
                /y 复活吧,勇士!
                /施放 救赎(等级 2)


                9楼2007-04-01 19:07
                回复
                  2025-08-22 21:49:13
                  广告
                  不感兴趣
                  开通SVIP免广告
                  • 218.203.63.*
                  楼上的宏还挺RP的 呵呵


                  10楼2007-04-01 19:50
                  回复
                    • 221.212.209.*
                    /decursive
                    /script x="target";d=UnitHealthMax(x)-UnitHealth(x);
                    /script if(d>-1) then if(d<900) then CastSpellByName("圣光闪现(等级 1)") else CastSpellByName("圣光闪现(等级 6)") end;SpellTargetUnit(x);end

                    -.-


                    11楼2007-04-04 21:57
                    回复
                      /script class = UnitClass("target"); if ( ( class == "盗贼" ) or ( class == "战士" ) ) then CastSpellByName("强效力量祝福(等级 2)"); else CastSpellByName("强效智慧祝福(等级 2)"); end

                      给战士和盗贼强效力量祝福,其他职业强效智慧祝福


                      13楼2007-04-11 21:14
                      回复
                        问LS,宠物怎么办?
                        还是这个比较好

                        如果目标职业为法师术士或德鲁伊则使用智慧祝福,否则使用力量祝福。 
                        /script class = UnitClass("target"); if ( ( class == "法师" ) or ( class == "术士" ) or ( class == "德鲁伊" ) ) then CastSpellByName("智慧祝福(等级 1)"); else CastSpellByName("力量祝福(等级 1)"); end


                        14楼2007-04-11 21:15
                        回复
                          /s >>%t<<复活吧,小猪! 
                          /施放 救赎(等级 5) 
                          /安抚


                          15楼2007-04-11 21:33
                          回复
                            。。。。。。。。。。。。。。。15楼那个很好用。。。。。。。。。


                            16楼2007-04-11 21:45
                            回复
                              2025-08-22 21:43:13
                              广告
                              不感兴趣
                              开通SVIP免广告
                              我就是把几个我的常用宏放到这里来,方便查找。


                              17楼2007-04-11 21:46
                              回复