因为历史久远的原因,我发到NFU的文章主要是多方面参考各种文档,应该来说从小白到进阶都比较完善。


目录

一、小白教程

二、进阶


本文基本上收集了以前的所有关于科普宏命令的文章,主要为了帮助一些新人看懂到底什么是宏命令,然后就可以自己上手了。

如果有些不能使用了,可能是版本不对应。


 WOW的宏就复杂而强大。它的函数就有上千种,如果都掌握,能实现许多匪夷所思的功能。 
  
    一个宏可以完成一个相对比较复杂的命令.比如战斗中发布命令,如果打字当然不算麻烦,但在战斗中却很要命.浪费了时间和生命.一个简单的宏便可以用一个键来完成这一切.
   要设置一个宏,首先按ESC键,菜单中有个设置宏命令的选项,点开,点击“新建”。我们要做的知识向其中输入一些命令,来一键实现对一些动作和技能的释放。
   相信很多人都知道WOW中的斜杠"/"和表情命令.宏可以将这些命令按照自己对条件的设置串联起来,比如:/Kneel是让你跪下来的动作而/say就是最基础的对话动作 
    我们现在用一个宏把他们串起来: 
  
    第一行内容:/Kneel
    第二行内容:/say 天哪,天窝的赔钱货都是二货…
    这样你的人物就会先下跪再说:"天哪,天窝的赔钱货都是二货…" 
  
  
   更神奇的是宏命令可以应用人物的魔法和技能。
   /Cast 这是个使用技能的命令。当你在宏命令里输入/Cast 技能名(技能等级)或者只要按住Shift同时用鼠标点击一下你想要输入的技能的图标。
  
  
   /Assist 这是个援助进攻的命令。当你的队伍同时面对几个敌人时,只要点击自己队的坦(抗怪的),然后使用这个命令,你的目标就会变成坦所选中的目标。防止打错怪OT,比如你是一个法师
  新建一个这样的宏,把它拖到技能栏里
  #showtooltip 寒冰箭
  /assist [help] 
  /cast [harm] 寒冰箭
  
  %t 这个符号也许会经常出现在你的宏命令里,它是一个代码,代表你当前所选中的人名。例如,你在宏里写下这么一句。(注意:后面要加一空格。)
   /g %t 晚晚你是个二货
  那么当你按下这个宏时,你就会在公会说:晚晚你是个二货(/g 代表公会频道,同理 /1 代表综合 /2 代表交易 /P 代表队伍 /Y代表大喊 )
   
   /Target 这是一个自动选择目标的命令,你可以在宏里输入/Target (xxx),那么当你按下这个宏时,你将自动选定这个叫xxx的目标。 
  
    /in 这是一个延时命令,时间以秒为单位.同时它不支持攻击指令.格式:/in 3 dance 三秒后跳舞,如/in 3 dance,就是在3秒后跳舞, 
    /say start! 
    /in 3 say 3s later 
    /in 6 say 6s later 


宏命令条件语

命令条件语是插入在宏命令中,使宏根据条件执行不同功能的语句。举个例子,下面这 个宏的作用是,如果是友方目标就施放回春术,如果是敌方目标就施放月火术。


#showtooltip

/cast [help]回春术;[harm]月火术


当这个宏执行时,首先检查[help]条件,判断当前目标是否是一个可以接受治 疗/增益法术的目标。如果[help]条件成立,那么就施放"回春术"并执行下一条命令,否则(即没有目标,或目标不接受有益技能)继续执行下一个子句,也就是分号后[harm]那里,再判断[harm]条件。[harm]条件和[help]条件相反,判断目标是否接受敌对法术。同上,如果条件成立就释放“月火术”并执行下 一条命令。如果条件不成立,由于后面没有其他子句,这条宏命令就算执行完了,但是什么动作都没有做。
注:如果没有写[harm]条件,实际运行效果是差不多的。不过,如果你没有目标或者当前目标 不接受任何法术,那么屏幕上将会出现错误信息,或者对于某些技能,鼠标将会变成选择施放目标的状态。


二:进阶教程 

  一些有用的宏参考

  1。允许你在窗口和全屏状态之间切换 

  /script SetCVar("gxWindow", 1 - GetCVar("gxWindow")); 
  /console gxRestart 

  2。对于法师,必须要有的:将“X”换为你目前的变形术等级(下同);用它替换掉变形术技能。当你在队伍之外时使用它会得到“你不在队伍中。”的信息,但在队伍中的时候其它同伴会了解到你将释放的变形术目标。 

  /p Sheeping >>> %t <<< 
  /cast Polymorph (Rank X) 

  3。作为一个术士,这是在队伍中使用的宏:首先将目标转为拖怪手或者坦克正在攻击的目标,然后命令宠物向前攻击,跟着一个虚弱诅咒。 

  /assist 队伍中的拖怪手或者坦克的名字 
  /script PetAttack(); 
  /cast Curse of Weakness (Rank X) 

  4。从背包和袋子里切换身上的武器 

  /script if ( not CursorHasItem() ) then PickupContainerItem(, ); 

  PickupInventoryItem( ); end 

  bag# - 使用哪一个袋子的物品(0、1、2、3、4。0是背包) 

  slot# - 袋子里的位置(从0至左上) 

  equip# - 16 是主要武器, 17 是副武器 

  5。这个宏治疗队伍里你指定的人,如果你不在队伍中它会治疗你自己。然后会自动将目标切换回你最后一个敌人。它同时还会使用队聊提醒队友你会治疗哪一个人。 

  /script if (UnitName("target") ~=nil and UnitIsFriend("player","target")) then 

  CastSpellByName("Heal(Rank X)") SendChatMessage("Incoming Heal to %T", "Party") else 

  TargetUnit("player") CastSpellByName("Heal(Rank X)") TargetLastEnemy(); end 

  6。加速任务显示速度 

  /script QUEST_DEscriptION_GRADIENT_CPS = 600000 
  /script RegisterForSave("QUEST_DEscriptION_GRADIENT_CPS") 
  /script DEFAULT_CHAT_FRAME:AddMessage("quest text will scroll faster now"); 

  7。消除等待接受任务的时间 

  /script AcceptQuest() 

  8。这个宏可以在路上自动护送玩家做任务。 

  /assist [player name] 
  /cast 法术(Rank X) 
  /target [player name] 
  /follow [player name] 

  9。切换主副武器,详情看第四条 

  /script PickupInventoryItem(16); PickupInventoryItem(17); 

  10。在没有目标或者目标是敌人的时候给自己加增益魔法或治疗。 


  CastSpellByName("Spell Name(Rank X)"); 

  if ((SpellIsTargeting()) and (not UnitIsFriend("player","target"))) 

  then 

  SpellTargetUnit("player"); 

  end; 

  TargetLastEnemy(); 

  11。切换双手武器与单手+盾或者双手挥舞武器 

  /script PickupInventoryItem(17);if(CursorHasItem()) then PickupContainerItem 

  (4,2);PickupContainerItem(4,1);PickupInventoryItem(16);else PickupContainerItem 

  (4,1);PickupInventoryItem(16);PickupContainerItem(4,2);PickupInventoryItem(17);end 

  12。设定“真实鼠标视野” 

  /script CameraOrSelectOrMoveStart(arg1); 

  想取消就再次输入。 

  13。切换近程技能栏和远程技能栏 

  /script CURRENT_ACTIONBAR_PAGE = 2; 
  /script ChangeActionBarPage(); 
  /cast aspectofmonkey (just use the left click) 

  /script CURRENT_ACTIONBAR_PAGE = 1; 
  /script ChangeActionBarPage(); 
  /cast aspectofhawk (just use the left click) 

  14。牧师对队友的一键加血,比如一号键给第一队友加血,二号键给第二队友加血,免除了还要鼠标确 

  定目标的操作。依次类推,从第一个人到最后一个 

  给队友1加血: 
  /script TargetUnit(GetPartyMember(1)) 
  CastSpellByName(Heal(Rank X)) TargetLastEnemy() 

  给队友2加血: 
  /script TargetUnit(GetPartyMember(2)) CastSpellByName(Heal(Rank X)) TargetLastEnemy() 

  给队友3加血: 
  /script TargetUnit(GetPartyMember(3)) CastSpellByName(Heal(Rank X)) TargetLastEnemy() 

  15。一键解决喂养宠物:这个宏会从最左边的袋子里的第一个位置拿出食物喂养宠物,如果所在的位置 

  没有食物,它会自动打开袋子。 

  /script if (not PlayerFrame.inCombat) then if (not GetContainerItemLink(4, 1)) then 

  OpenBag(4); else CastSpellByName("Feed Pet"); PickupContainerItem(4, 1); end end 

  16。术士宏 

  1)如果目标生命大于20,释放抽取生命法术,否则使用灵魂抽取。 
  /script if (UnitHealth("target")>20) then CastSpellByName("Drain Life(Rank X)") else 

  CastSpellByName("Drain Soul(Rank 2)") end; 

  2)虚弱诅咒版本 
  /script if (UnitMana("target")>0) then CastSpellByName("Curse of Tongues(Rank X)") else 

  CastSpellByName("Curse of Weakness(Rank X)") end; 


  17.先治疗自己,然后自动选中上次的敌人 
  /target Pugar //选择自己,假设自己的名字是Pugar 
  /cast Lesser Heal (Rank 1) //施展次级治疗rank1 
  /script TargetLastEnemy(); //重新选择刚刚选择的敌人 
  /script AttackTarget(); //攻击,等同于右键点击敌人 


  18.对于一个术士很有用的宏:首先将目标转为拖怪手或者坦克正在攻击的目标,然后命令宠物向前攻击 

  ,跟着一个虚弱诅咒。 
  /assist 队伍中的拖怪手或者坦克的名字 
  /script PetAttack(); 
  /cast Curse of Weakness (Rank X) 

  19.等治疗完之后提醒别人注意下自己有可能被怪打,不加延时的话,就没这个效果了。 
  /p healing %T, need 3s, don"t run away 
  /cast heal (rank 1) 
  /in 4 p cured %T 300HP,please notice the enemies turn on me^_^ 

  20.在路上自动护送朋友做任务。 

  /assist [player name] 
  /cast 法术(Rank X) 
  /target [player name] 
  /follow [player name] 

  三:高级教程 

  WOW的宏函数库可以去这两个地方查: 

 ] http://www.cosmosui.org/texts/BlizzardCommands.xml 

 ] http://www.wowwiki.com/index.php/World_of_Warcraft_API 

  函数的使用比较简单,学习过编程的都比较容易上手,基本的用法是在函数前加/script 来使用。比如 
  /script CURRENT_ACTIONBAR_PAGE = X; 
  /script ChangeActionBarPage(); 
  就是将你的快捷栏翻到第X页。 

  函数库中有许多函数都是非常有用和方便的,比如一次打开所有包包: 

  /script OpenAllBags(); 

  配合关闭包包的函数,一次关闭所有包的宏也可以实现: 

  /script CloseBag(0); 
  /script CloseBag(1); 
  /script CloseBag(2); 
  /script CloseBag(3); 
  /script CloseBag(4); 

  怎么样,下次你卖东西的时候不会一个个开包关包了吧? 

  使用函数还不是最恐怖的,恐怖的是WOW的宏是可以用条件判断的,看下面这两个: 
  /script if ( GetComboPoints() >= 3 ) then CastSpellByName("Rip(Rank 2)"); else if ( 

  UnitMana("player") >= 40 ) then CastSpellByName("Rake(Rank 1)"); end end 

  据说这个包含if,then的宏可以让盗贼实现自动根据combo点数来使用技能(未测试),其中还使用了角 

  色MANA值的调用,恐怖吧?还有这个查找spell的宏: 
  function GetSpellIdByItsName(myWantedSpell, myWantedRank) 
  local spellId = 1; 
  local spellBook = "spell"; 
  local spellName, rankName; 
  spellName, rankName = GetSpellName(spellId, spellBook); 
  while (spellName ) do 
  if ( ( spellName == myWantedSpell ) and ( ( not myWantedRank ) or ( rankName = myWantedRank 

  ) ) ) then return spellId; end 
  spellName, rankName = GetSpellName(spellId, spellBook); 
  end 
  return -1; 
  end 

  里面可以自己定义function,还使用了while,do这样的循环,是不是让你想到了N种应用的可能呢? 

  遗憾的是,目前官方似乎没有提供延时的宏,所以在战斗中使用多种有延时的技能是无法实现的(无延时的技能可以实现同时使用),类似换其他武器-使用技能或法术-换回武器这样的功能也无法实现, 

  (所谓用宏实现剑盾战士换双手武器MS再换回来是行不通的),不过使用COSMOS的朋友可以用/in 来实现非战斗指令的延时,比如 
  /in 3 say hi 就会在3秒后说句hi。 

  /in 6 /script MoveForwardStart(arg1); 
  就会在6秒后向前跑。 

  虽然法术和技能无法用/in指令来延时,但这样已经很强大了,比如,你可以编出各种运动的宏,如兜后,转身等。PVP时估计是必不可少的。 

  下面是一个玩家写的双手武器战士自动逃跑的宏: 
  /script UseContainerItem(0, 2);ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown 

  (12);ActionButtonUp(12); 
  /cast Thunder Clap(Rank 1); 
  /script TurnLeftStart(arg1); 
  /in 1 /script TurnLeftStop(arg1);ToggleAutoRun(); 


  使用这个宏的条件:在大包包第二格放了回复药,快捷栏第11,12分别是一单手一盾的快捷方式。 

  使用这个宏后,角色自动喝回复药,装备上盾,使用Thunder Clap(这三个动作同时进行),向后转180度后开自动跑步键逃走。其中技能等可以根据需要自己改。怎么样,是不是很夸张啊,哈哈。 

  还有一些有用的宏: 

  切换装备, 

  双手切换单手并换第二个快捷栏,快捷栏第11,12分别是一单手一盾的快捷方式 
  /script ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown(12);ActionButtonUp(12); 
  /script CURRENT_ACTIONBAR_PAGE = 2; 
  /script ChangeActionBarPage(); 
  单手切换双手并换回第一快捷栏,快捷栏12是一双手武器快捷方式 
  /script ActionButtonDown(12);ActionButtonUp(12); 
  /script CURRENT_ACTIONBAR_PAGE = 1; 
  /script ChangeActionBarPage();


注释信息:

#showtooltip

#showtooltip命令写在宏的第一行,在把宏拖曳到动作条后,把鼠标停留在按钮上,就可以显示该宏的详细信息。


其他重要命令

装备物品/equip
/equip 物品名称


停止施法:/stopcasting

作用非常重要,需要立刻打断目前正在施放的法术或技能,去做更重要的事时,你就需要他了。

例:术士立刻打断当前正在施放的法术,对目标使用暗影灼烧

/stopcasting

/cast 暗影灼烧


解除坐骑:/dismount

这个命令使你立刻下马,如果你在飞行坐骑上遨游星空时不小心点了……加上条件[noflying]吧

例:立刻下马,如果在飞行坐骑上宏不起作用。

/dismount [noflying]


还有一篇 《魔兽世界宏命令原理基础教学