魔兽世界中宏的使用秘笈
广告投放★自助友情CMS落伍广告联盟晒乐广告联盟脉动广告联盟品味广告联盟
广告位可自定样式联系QQ:4285248个文字广告月20元广告联系QQ:428524广告位可自定样式
8个文字广告月20元黄金广告位每月20元广告位可自定样式联系QQ:428524广告位可自定样式
左旋肉碱、全国包邮
买二送一、无效退款

文章浏览→编程相关Php编程→魔兽世界中宏的使用秘笈

魔兽世界中宏的使用秘笈
魔兽世界中宏的使用秘笈

想见恨晚魔兽世界中宏的使用秘笈

    一:基础教程

  1.什么是宏命令?  

  一个宏可以完成一个相对比较复杂的命令.比如战斗中发布命令,如果打字当然不算麻烦,但在战斗中却很要命.浪费了时间和生命.一个简单的宏便可以用一个键来完成这一切.

  2.宏命令的设置流程:
  首先,回车,再敲/MACRO。看见了吧?会弹出一个窗口,上面有New(新建宏命令)和Complete(完成宏命令)两个按键。点New,又会弹出一个窗口,哇,花花绿绿的,里面包括了WOW几乎所有的技能图标,随你喜欢,随便选一个!它就是你设置的宏命令的图标了,给它取个名字吧!方便你用的时候好找。然后回到第一个窗口,在它上面有一个输入菜单(别告诉我找不到…它可是占了这个窗口的一半多…)在里面输入特定的内容,然后点Complete。接下来你要做的就是把这个代表你宏命令的图标用鼠标左键拉到快捷栏里,想怎么用就怎么用…

  3.怎样设置宏

  相信很多人都知道WOW中的斜杠"/"和表情命令.宏可以将这些命令按照自己对条件的设置串联起来,比如:/Kneel是让你跪下来的动作而/say就是最基础的对话动作
  我们现在用一个宏把他们串起来:

  第一行内容:“/Kneel”
  第二行内容:“/say 如果你不嫁给我,那么我就一辈子不起来…” ”
  这样你的人物就会先下跪再说:"如果你不嫁给我,那么我就一辈子不起来…"

  宏可以应用所有WOW中已经定义了的斜杠"/"和表情命令,更要命的是,宏甚至可以应用人物的魔法和技能,

  只需要在宏的定义过程中应用"/cast"命令,下面是已知的一些常用命令:

  /Assist这是个援助进攻的命令。当你的队伍同时面对几个敌人时,只要点击自己的队友(一般是队伍中的战士),然后使用这个命令,你的目标就会变成战士所选中的目标。大家集中火力消灭一个起!

  /Cast 这是个使用技能的命令。当你在宏命令里输入/Cast技能名(技能等级)或者只要按住Shift同时用鼠标点击一下你想要输入的技能的图标。例如当你是一个战士,想制作一个使用战斗怒吼的宏时,你可以输入/CastBattle Shout(Rank 1)或者是直接按住Shift点击BattleShout这个技能的图标。当然你可以在一个宏的不同行上输入几个技能,那么当你使用这个宏时,几个技能就会一起释放出来,再用不着你像章鱼一样同时按下几个键了。

  %t这个符号也许会经常出现在你的宏命令里,它是一个代码,代表你当前所选中的人名。例如,你在宏里写下这么一句。(注意:后面要加一空格。)“/g %t ,今天天气真好,有没兴趣和我一起上山采蘑菇…”
  如果你点中一位名叫苯笨的玩家,那么当你按下这个宏时,你就会说:“笨笨,今天天气真好,有没兴趣和我一起上山采蘑菇…”

  /Target 这是一个自动选择目标的命令,你可以在宏里输入/Target(xxx),那么当你按下这个宏时,你将自动选定这个叫xxx的目标。

  /in 这是一个延时命令,时间以秒为单位.同时它不支持攻击指令.格式:/in3 dance 三秒后跳舞,如/in 3 dance,就是在3秒后跳舞,
  /say start!
  /in 3 say 3s later
  /in 6 say 6s later

  二:进阶教程

  一些有用的 Macro

  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() ) thenPickupContainerItem(, );

  PickupInventoryItem( );end

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

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

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

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

  /script if (UnitName("target") ~=niland 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 scrollfaster now");

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

  /scriptAcceptQuest()

  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 (notUnitIsFriend("player","target")))

  then

  SpellTargetUnit("player");

  end;

  TargetLastEnemy();

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

  /scriptPickupInventoryItem(17);if(CursorHasItem()) thenPickupContainerItem

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

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

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

  /scriptCameraOrSelectOrMoveStart(arg1);

  想取消就再次输入

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

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

  /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(RankX)) TargetLastEnemy()

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

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

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

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

  16.术士宏

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

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

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

  CastSpellByName("Curse of Weakness(RankX)") 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 onme^_^

  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页。

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

  /scriptOpenAllBags();

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

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

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

  使用函数还不是最恐怖的,恐怖的是WOW的宏是可以用条件判断的,看下面这两个:
  /script if ( GetComboPoints() >= 3 ) thenCastSpellByName("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 /scriptMoveForwardStart(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 /scriptTurnLeftStop(arg1);ToggleAutoRun();


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

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

  还有一些有用的宏:

  切换装备,

  双手切换单手并换第二个快捷栏,快捷栏第11,12分别是一单手一盾的快捷方式
  /scriptActionButtonDown(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();

       宏——一个神秘而强大的字眼,相信所有用过的人都非常清楚。曾听说某工会一团主力成员全部用自己编写的宏来代替插件(待考证……),我个人对这个并不在行,只是想吧我所知道的一些常用的宏的运作原理在此与大家分享

       先从说话开始学。大家都知道,魔兽里的说话方式分为:频道,工会,团队,小队,大喊,说,密语。
      他们的指令则分别为:
/1 /G /RA /P /S /Y /W
用最常用的例子来说明
收符纹布宏:
/2 大量收购符纹布,1.2G/组
找FS要水宏:
/S HI,朋友,给组水好么?

看到这里,我们又想到,这样说太平淡了,如果能把对方的名字叫出来多亲切啊
所以WOW提供给了我们一个指令 %t
在我们说的话中, %t会被自动替换成你的目标的名字
比如
找牧师(以REGGIE为例)要韧宏
选中REGGIE后使用本宏:
/S HI,%t,加个韧好么?谢谢!
然后对方就会看到你对他说
HI,REGGIE,加个韧好么?
然后我们就会看到REGGIE开心地(傻傻地)给你加上了韧。

       有了这个,我们就可以在牧师开始释放复活术时(似乎所有职业中牧师最喜欢干这种事...),说上各种各样奇怪的话了。那么,先对目标释放复活术,再使用宏是不是很麻烦呢,没关系,我们可以一键完成。
/施放 复活术(等级1)
/Y 起床了,%t,太阳晒屁股了!!
你也同样可以在使用其他法术时使用这个宏,只要把法术名和等级改成相应的法术名和等级就可以了。
那么如果我说的法术名字比较长,或有个字打不来怎么办?
你可以打开法术书,shift+鼠标左击该法术,就会自动在宏中输入施放该法术的指令。那么,牧师的复活术的释放需要10秒,就说一句是不是太寒酸了呢?
       那么,我们就要用到延时函数来帮助我们了
在这里说明一下,延时函数只有在安装了魔兽小强的前提下才能使用,且不支持法术/技能的延迟释放,那就是 /inX,其中X用来输入数字。
举个例子
/施放 复活术(等级1)
/Y 起床了,%t,太阳晒屁股了!
/in 3 /Y 还不起来,真不听话。
...................
我们还可以加入动作/e
这样我们的复活术就丰富多彩了
/施放 复活术(等级1)
/E 拿出两根针在%t的头上刺了两下
/S 天灵灵,地灵灵
/in 3 /E 冲着%t的身子踢了两脚
/in 3 /S 一脚复身,一脚复魂
........................................
相信从此以后别人被你复活时都会极度郁闷!
(注:这个宏并未实践过(从不用小强...),昨天测试函数判断宏时发现语句中似乎不能再次出现"/"符号,不知道是仅限于script函数还是所有函数,请高手指教!)

       下面开始教授一些基本的动作宏:
首先,所有的动作宏都是脚本,所以大家务必记住在每一个函数的前面加上/script以说明这是一个函数动作脚本而并非要说的话。
        首先我们来分析盗贼的一键绷带不丢星宏。
/script UseAction(54,0,1)
/script TargetUnit("player")
/script TargetLastEnemy()
       首先是第一行UseAction(54,0,1),Action的意思是快捷键,第一排快捷键是1~12,第二行是13~24,依次类推,至于后面的0和1我也不知道是什么意思,但貌似不写就用不了,望高手赐教。
当然,我们也可以直接使用背包内的物品,那第一行就要改成:
/script UseContainerItem(A,B)
ContainerItem的意思是背包内的物品,Container和Item是两个分别独立的语句,但貌似一般都是一起用,至于背包内物品的坐标如下。
        首先是包裹囊的坐标A,5个包裹的坐标从左到右分别是[4][3][2][1][0]
然后是包裹内物品的坐标B
六格包的坐标是 __ __[1][2]   八格包:[1][2][3][4]
                            [3][4][5][6]                   [5][6][7][8]
其他的也一样
        然后是下一句TargetUnit("player")
这句话的意思是,选定目标:单位“玩家”(自己)
如果你的目标是玩家,那么在第二个函数生效前,绷带已经开始使用了,所以虽然我们选择了自己,但绷带已经给别人打上了,所以在使用这个宏之前,一定要确保你当前的目标不能被打绷带(除非你本来就想给他打绷带),不然白白浪费一根绷带(万一这是最后一根……)
     这里要说明一下,还有一个选定目标的指令是(以REGGIE为例)/TargetREGGIE
这个指令是将目标转换为REGGIE,用下面这个例子来说明
        比如,如果牧师在打怪时要加血,在目标是怪物的时候使用治疗术,系统会要求你选定一个单位,这个时候你点选了边上一名玩家,此时,你的目标仍然是怪物,这就是前一个指令,但后一个指令就是,你直接将目标转换为了该玩家,对于其他没什么,但对于盗贼,这样星就没了,所以盗贼朋友一定不要偷懒。
接下来是最后一句TargetLastEnemy(),这句的意思就是选中上一个敌对目标,需要说明的就是最后的(),这个表示是个单位,没用这个的话就是个错误函数。
下面介绍下练级时最常用的宏
      以战士为例
/施放 压制(等级3)
/施放 致死打击(等级4)
虽然这样并不能让这两个技能同时释放,但可以做到在有压制时就压制,没压制时就致死,你所要做的就是疯狂的按这个宏,而不用两眼死死的盯着战斗信息。这个宏同样可以用在盗贼的还击,猎人的猫鼠撕咬及其他我不知道的技能上。
       然后介绍FS的双开宏
/script UseInventoryItem(13)
/script UseInventoryItem(14)
InventoryItem(X)的意思是使用目标装备位置的物品,他们的位置分别是:
1:头盔
2:颈部
3:护肩
4:衬衣(有可以使用的衬衣么……)
5:胸甲
6:腰带
7:护腿
8:鞋子
9:手腕
10:手套
11:手指1
12:手指2
13:饰品1
14:饰品2
15:披风
16:主手
17:副手
18:远程武器
学会了InventoryItem(x)后,我们就可以一键换装了
        先教一个指令Pickup,意思是点选,下面举个例子:
/script PickupContainerItem(4,13)
/script PickupInventoryItem(16)
这样系统执行的操作就是将(4,13)里的武器换到主手(前提是那个位置的物品是武器)
我们只要不断重复编写这个函数就可以做到换全身装备
       不过这样有个问题,比如原先你的主手上的武器是主手,副手上的武器是单手,然后你想把副手上的武器换上主手,副手在换上盾。直接用先交换双手的武器在换上盾肯定是不行的,所以只有先把副手武器和盾交换,在把该武器和主手进行交换,这样我就发现在该动作中取下的装备就无法在该动作中直接再装备到身上,请高手指点。

        共享几个SS和LR用的宝宝宏
宠物攻击
/script PetAttack()
宠物释放技能
/script CastPetAction(X)
X代表该法术位于宠物技能栏的位置

 强大的一键绷带宏
/scriptTargetUnit("player");UseAction(1);TargetLastTarget();

其中(1)为绷带图标在快捷键中的位置,1代表是第一格也就是键盘!和1键

最好的一键加血宏,可变通使用,治疗波可换成清毒等 /施放 自然迅捷 /scriptSpellStopCasting(); /施放 治疗波(等级 10) /script if SpellIsTargeting()then SpellTargetUnit("player") end;
对应F键

闪电加净化 /script local q; local t;fori=0,15,1 do t=GetPlayerBuffTexture(i); if (t and string.find(t,"LightningShield")) then q=1; break; end; end; if(q ~= nil) thenCastSpellByName("净化术"); elseCastSpellByName("闪电之盾");end;

作用:如果自身有闪电盾在,那么对目标使用净化术,如果没有,给自己加闪电盾。

对应V键

治疗判断

/施放 次级治疗波(等级 6) /script ifSpellIsTargeting() then SpellTargetUnit("player")end;

作用:目标为队友,给队友使用次级治疗,目标为敌人,给自己使用治疗波。

对应C键

其它的X键对应清毒图腾,Z键对应种族技能,牛头的践踏可以换一个更加醒目的键位。

SM绝技-瞬发闪电或闪电掌握发闪电(对应A键)。

/施放 自然迅捷 /script SpellStopCasting(); /施放闪电链(等级 4) /施放 闪电箭(等级 10)

作用:瞬发闪电,如果闪电链在冷却则放闪电箭 /施放 元素掌握 /scriptSpellStopCasting(); /施放 闪电链(等级 4)

作用:静止不动一键放闪电


 一键解DEBUF宏

256字节内能实现的
牧师版
/script local s,p,i,d,t,_={["Magic"]="驱散魔法",["Disease"]="驱除疾病"};fori=1,40 do p="raid"..i;if CheckInteractDistance(p,4) thend,_,t=UnitDebuff(p,1,1);if d thenTargetUnit(p);CastSpellByName(s[t]);TargetLastTarget();break;end;end;end

完美绷带宏

很多绷带宏都不一定优先给自己绷带
或者宏要求绷带的位置特定
以下是我找来的一个绷带宏
对自己使用绷带,不管绷带放哪里都没事会自动使用。

/script for x=0,4 do fory=1,GetContainerNumSlots(x) do if GetContainerItemLink(x,y)~=nillthen if strfind(GetContainerItemLink(x,y),"绷带") thenUseContainerItem(x,y) return end end end end
/tar player

 自动绷带宏
/script UseContainerItem(3,1)
/script if ( SpellIsTargeting() ) then TargetUnit("player");end
说明:这个才是真正的智能型绷带宏,这个宏可以实现当无目标或者目标是敌人时,会不改变当前目标对自己施加绷带,但当目标是队友时,会帮队友绑绷带。网络上那个什么/target"player"
是误导人的,一点也不好用!说明一下参数:第一条的(3,1)表示从右往左数第一个背包是零开始数,数到第三个背包,把绷带放在第一位置。

        Wow魔兽台词专用宏深入研究


       例1 不会打扰队友的随机发言
*所有【】符号框起来的都是注释内容,勿写入宏里面。
【1】 /scriptayj1=”夜幕之下,没有怜悯的影子”;ayj2=”谁又能逃得掉,那股暗淡的哀伤”;suiji=random(10)
【2】 /script if suiji==1 then SendChatMessage(ayj1) else if suiji==2then SendChatMessage(ayj2)else end;end
【3】 /施放 暗影箭(等级 9)

  这是一个在网上可以找到的例子。关于第【1】行,我们要理解【=】等号的含义。编程中的等号与“等于”这个概念完全不相干,你可以理解【=】是一个装罐机,【ayj1=”夜幕之下,没有怜悯的影子”】就是把后面一段引号之间的内容,装进了一个标签为ayj1的罐头里(如你所想,ayj1正是暗影箭1的缩写),这个罐头我们将在稍后使用。中间的三个【;】属于必要格式,用来分隔三个相对独立的语句。

  同时我们使用了一个random命令,【suiji=random(10)】就意味着我们让系统产生一个1~10之间的随机数,并把这个数装进标为【suiji】的罐头里。

  第【2】行,【If XXX then YYY elseZZZ】的句式,是用来判断XXX是否成立,如果成立则执行YYY动作,如果不成立则执行ZZZ动作。这个【==】是连续两个等号,代表真正的“等于”的意义。

  【if suiji==1 thenSendChatMessage(ayj1)】翻译成中文就是,让系统察看suiji这个罐头里面的东西是不是“等于1”,如果是,就SendChatMessage——让人物说出——ayj1这个罐头里面的内容。SendChatMessage命令请注意严格按此大小写拼写。

  当然,由于suiji罐头里面有可能装1~10之间的任何一个数,所以suiji很可能不会==1,于是执行下一步【elseif suiji==2 then SendChatMessage(ayj2)elseend;end】,这里再次判断suiji是否“等于2”,如果等于2,人物将说出ayj2里面的内容。如果不“等于2”就结束这个语句。
  至于最后的end,必须和if配对出现,就像括号的左边和右边一样锁定中间的内容,说来话长,只需稍微试验几次就可以理解。

  至于最后的【3】行,记得同时打开宏编辑窗口和技能书,让光标停留在编辑宏状态,再按住shift点击技能书上的技能图标,系统会自动帮你写上这一行。

  这个三行的宏工作原理就是这样的:每运行一次,将把一个新的随机数装进suiji罐头,如果那个随机数是3~10,就没什么特别的事情,只是发出一个暗影箭,如果随机数恰好等于1,则人物会说出一句话,等于2说出另外一句话。

  把这个宏拉进技能栏,代替以前的暗影箭吧。一团团暗影箭在放出,人物在大部分时间里会保持安静,只是偶尔——各10%的情况下,会说出“夜幕之下,没有怜悯的影子”,或者“谁又能逃得掉,那股暗淡的哀伤”这样的句子来。
  想象一下在决斗中,当你以一发夜幕状态的瞬发暗影箭,或是气定神闲之后的炎爆决定胜负,再幽幽地给补上这么一句,全场是否会为之安静片刻呢?
  在raid中,你还可以调整第【1】行中【suiji=random(10)】那个数字10到30、40,这将更适合长时间大型raid环境。

  例1只是一个简单应用,用来让大家理解这一系列宏会用到的主要命令,实际上一旦你开始写自己的语录,你就会遇到这样几个问题:
1、经试验发现,一个语句中的汉字太多,也会固定造成出错,这对创造力来说是无法容忍的限制。
2、宏栏设定了256个字符的上限,换算成中文不过128个字还含标点,当你准备的发言字数稍微一多,加上语句编写的必要字符,就非常不够用了,让创作激情大打折扣。
3、你可能会希望给一个技能准备2句以上的发言,当你准备的发言超过3句之后,例1中的第【2】行将变得非常晦涩绵长,而且要把能够运行的4句发言宏扩充到5句更是几乎不可能写正确。

      例2 解决字数限制与引入ID

【新建第一个宏命名为  储存】
【1】 /script zh1="大阿图因宙半人马阿尔法星系中枢位面TS32行星泰坦世界风狼座投影面坐标3467,2853 ID=%t目标锁定完毕 召唤系统预热开始…";
【2】 /script zh2="跨行星传送系统标定目标ID=%t erro31!目标性别无法判定… 切换至人妖类通道适配器预计927毫秒后准备就绪…";
【3】 /script zh3="跨行星传送系统标定目标ID=%t erro45!目标智力水平未达到行星团联合会教科文组织要求标准…无法传送…请智力超标单位协助…正在盗取客户端参数修改权限…"

【新建第二个宏命名为 召唤】
【1】 /script z=random(3)
【2】 /script if z==1 then SendChatMessage(zh1) end
【3】 /script if z==2 then SendChatMessage(zh2) end
【4】 /script if z==3 then SendChatMessage(zh3, ”party”) end
【5】 /施放 召唤仪式

 

  显然用例1的方法我们无法做出这么多字数的台词,但现在我们制作了两个宏,一个专门用来储存发言内容,一个是执行语句,于是台词字数得到了无限扩展——虽然每一个限制了256字符,但只要需要,你可以写若干个储存宏。
  每次出家旅行杀人越货之前,登录wow之后,只需要把所有的储存宏执行一次,就可以完美保障你全天的台词需求!

  例2的【储存】宏每一行都出现了一个【%t】,这个标识在任何情况下,都会被替代成为你选中目标的ID。
  比起例1,例2【召唤】宏显得更加简单明快并且很容易扩展,对五、六句台词的随机判断都可以很容易地写出来。得益于【储存】宏已经将三句话分别装在了zh1、zh2、zh3三个罐头。【召唤】宏只需要将z牌罐头装进1~3的随机数,再加上简单的判断,我们准备好的3段台词就会分别出现。

  假设你选定了一位叫做李渔村的玩家,而正好Z随机到了“2”——人物将会说出的台词就是【跨行星传送系统标定目标ID=李渔村erro31!目标性别无法判定… 切换至人妖类通道适配器 预计927毫秒后准备就绪…】

  另外,【召唤】宏第【4】行与其他行有所不同,多出来的【,”party”】意味着这段话将对小队说出,【,”raid”】向全团,【,”guild”】自然是工会。你可以试着在所有SendChatMessage命令后面都加上这个参数看看效果。
 
        例3如何引入职业
【新建宏  储存2】
【1】 /script ayj1="夜幕之下,没有怜悯的影子";
【2】 /script ayj2="谁又能逃得掉,那股暗淡的哀伤";
【3】 /script ayj3="我放出一团流星雨落在你的头上,你会看见,前途黑茫茫";
【4】 /scriptcr1="失去与得到,那是宇宙的规则。";cr2="比死亡更恐怖的……是缠绕";cr3="要知道你的处境!";
【5】 / script jsqA=0;jsqB=0

【新建宏  缠绕】
【1】 /script ZY=UnitClass("target");z=random(3)
【2】 /script if z==1 then SendChatMessage(cr1) end
【3】 /script if z==2 then SendChatMessage(cr2) end
【4】 /script if z==3 then SendChatMessage(cr3..ZY) end
/施放 死亡缠绕(等级 3)


【储存2】里面的【1、2、3】行列和【4】行,展示了两种效果完全相同的储存方式,只是【4】行更节省字数一些。【5】行暂时放在那里,我们将在例4例5用到。

  关键在【缠绕】宏的【1】行,【ZY=UnitClass("target")】我们先用一个UnitClass命令,求得职业名称。求得谁的职业名称呢?是【("target")】——你正选定的目标。求得的这个名称将成为字符,被装进标为【ZY】的罐头里面。
  然后是【缠绕】宏的第【4】行,注意【SendChatMessage(cr3..ZY)】就巧妙在中间的那两个英文句号,其意义是让人物先说出【cr3】罐头的内容,然后紧接着——关键就是紧接着,没有换行、没有空格——说出【ZY】罐头里面的字符。
  于是当你选定一个盗贼,发出死亡缠绕——或者你愿意的任何一个技能——的瞬间,人物会说出“要知道你的处境!盗贼”这样惊人的语句来。如果你像黑夜一样长期混迹于BWL,你就会知道这是奥巴桑的台词,如果你像作者一样抵制大型副本,你就会觉得这句台词特别有见义勇为的气魄……
再次提醒,Raid期间务必将【z=random(3)】的3改到20以上以免打扰队友。

然后,还记得我们提到过的法师的唠叨吗?

      例4按照顺序发言以及适度沉默

【1】 /script if jsqA==10 then jsqA=1 elsejsqA=jsqA+1 end;
【2】 /script if jsqA==1 then SendChatMessage(zmb1) end;if jsqA==2then SendChatMessage(zmb2) end;if jsqA==3 thenSendChatMessage(zmb3) end
【3】 /施放 造食术

  首先我们已经在【储存2】里面让jsqA(也就是计数器A)存了一个数字0在里面。所以前几次运行的时候,实际上执行了【jsqA=jsqA+1】,这个语句意味着先把【jsqA】罐头的数字取出,加上1,再存回【jsqA】。
  就像图书馆的图书,每次回到图书馆都会增加一笔借阅记录一样,第【1】行每运行一次,【jsqA】都会累加1依次成为【2、3、4……】。直到它成为10的那一次,【ifjsqA==10 thenjsqA=1】就会发挥作用,让它再次变回1,实现了【jsqA】在1~10之间依序循环,而不像先前例子那样出随机数。
  第【2】行就好理解了,实际上只是把例2、例3中分行写的语句用英文分号分开,代替分行而已。可以用来节省宝贵的字数。

  例4的运行结果是,头3次做面包,会连续说出3句话,然后沉默7次,周而复始。你可以调整【ifjsqA==10 then jsqA=1】当中的10改变沉默与说话的频率。如果设定为3就会每次都发言了。
  当然别忘了在储存宏里面定义【zmb1、2、3】的内容,可以参考这样:zmb1=”我真傻,真的,我单知道玩家没有食吃,会找法师要;我却不知道会有那么多”;zmb2=”我一大早起来出了门只见玩家满地都是,唯独没有法师了。大家都说,完了,怕是改弱了”;zmb3=”现在看果然是改弱了,%t,可怜我还在这里做面包呢……”

  如此反复,你能想象在旁边等你做面包的人是什么表情吗?
       例5 随机并顺序着

【1】 /script sj=random(10);if jsqB==3 thenjsqB=1 else if sj==1 then jsqB=jsqB+1 end;end
【2】 /script if jsqB==1 and sj==1 then SendChatMessage(ayj1) end;ifjsqB==2 and sj==1 then SendChatMessage(ayj2) end;if jsqB==3 andsj==1 then SendChatMessage(ayj3) end
【3】 /施放 暗影箭

  其中【2】行的【if AAA and BBB thenCCC】意味着AAA与BBB要同时成立,才会执行CCC——任中一个不成立都不执行CCC。
  因此这里实现了用1~10的随机数【sj】来控制所有语句,【if sj==1 then jsqB=jsqB+1】决定了【jsqB】只有10%的概率累加。【if jsqB==3 and sj==1 thenSendChatMessage(ayj3)】决定了人物只有10%的概率说话。因此不但由随机数决定是否发言,而且能保证每次发言按照一定的顺序不重复地进行。

 

  最后的最后,这么费力编写出来的宏可千万别丢了,记得时常备份才是。
“通用宏”保存在:
World of WarcraftWTFAccount你的帐号 macros-cache.txt
“某角色专用宏”保存在:
World of WarcraftWTFAccount你的帐号你的服务器某角色IDmacros-cache.txt

      一些注意事项
1、把宏的图标拖到动作栏上即可使用,最好在按键设置里设置快捷键。
2、储存功能的宏必须先于执行功能的宏运行,否则尽管执行宏编些毫无错误,系统也会毫不犹豫地报错。出错之后首先检查运行顺序和两种宏当中罐头名称的一致。
3、务必确保所有命令的大小写正确,以及在语句中使用英文标点。中文标点会被看作中文字处理,只能在引号之间作为字符内容使用。
4、CWOW只支持中文法术名称。系统不会对错误的法术名称报错,只是不执行。Shift+鼠标点击技能标签,将自动输入正确的施法语句。自1.7版本之后,不提供技能等级系统将自动施放最高等级的技能。
5、每一段【/】之后的语句应当写在同一行中,注意不要有多余的回车。有时候太长的语句会被自动换行,上一行露出一段空白,那只是显示问题。最好在txt文件中编辑完成后粘贴入wow调试。
6、一个宏执行多个动作几近邪道,1.10版之后似乎便不可行。


        附送一些异常简单又异常实用的宏

/施放 真言术 盾
/script TargetUnit("player")
选定友方目标则给目标盾,选定敌方或不选定目标则给自己盾,因为不需手动切换,在决斗中非常有用。

/script UseContainerItem(1,1)
/script TargetUnit("player")
这是根据同样原理,给友方或自己绷带,需要将绷带放在1号包1号位置,请试验之。

/scriptTargetUnit("player");CastPetAction(4);TargetLastEnemy();
术士地狱犬不必改变目标就可以对自己吞噬魔法的宏。

/script UseInventoryItem(17)
使用副手装备栏物品的宏,其意义在于通过宏可以对副手物品的使用动作设置快捷键。把17改为13、14即为两个饰品栏物品。


       文末:
  宏教程到此终于结束了,wow和那么多其他游戏里,不管你扮演的是游戏中的角色,还是现实中真正的你自己。文字的可能性和文字本身的力量,从来没有像今天一样被扩充到如此大的程度。发挥你的创造力和真正的游戏精神吧,请相信我!从你键盘下流淌出来的创意,从你人物口中说出的话语,将比对面那个总是通宵刷装备一身花花绿绿的家伙,更让人印象深刻!

——你仍然有保持沉默的权利,但你所说的,终将使你与众不同!

 

      附录1:

/script if UnitClass("target")==("Maga")then
  SendChatMessage("对不起打扰了,麻烦你帮我做点水好吗?谢谢","whisper","target");
end

/ra仁慈的大地母神玛法哟,请聆听我的愿望,借于我你的力量,与我的精神结合,复活这个迷途的羔羊***吧.

/y尘归尘,土归土,xx,你安心的去吧,来人,把他拉出去埋了..........

/s %T复活吧,我的孩子

/s %T复活吧,我的奴隶

/s Arise, my champion

/y 复活吧,我的勇士!......(100个空格)
%t 喊道:为你而战,我的女士!

/Y 以魔神的名义,用我10000毫秒的生命为代价,让 %T的身体作为你强大力量的容器,出来吧,虚空中最强大的恶魔。。。

/y t%在经历了死亡的荣耀之后,我诚挚的邀请您再次回到我们中间。。

/Y 如意~如意~~随我心意~~~快快显灵~~~复活%T~~!!!

/s 天地間神聖的精靈們啊,
擁有母性的大地氣息啊,
祈求您救救在我面前的%t,
用您的慈愛寬懷,救救他吧!

/s这是一个等价交换的世界,想要得到什么东西就要付出同等的代价,我们深信这是世界的真理,同时我们也遵寻这个真理 %T复活吧~

/s %t,圣光照耀你

/y沐浴在我的力量中吧!复活吧,%t!为了部落的荣耀而战!

/s 暗影与你同在,%t!

/y 我感觉得到你的恐惧,%t!

18禁版
/s 阿弥陀佛%T施主,早说了叫你不要包二奶,现在精尽人亡了不是?,起来吧,所谓浪子回头,精不换

/表情冲上去趴在%t胸口,用力的捶打的%t胸口:“你死得好惨阿“~~(啊呀呀~~捶平了)

/y 我靠 %T 你叉开腿躺在地上的姿势淫荡了,快起来不要勾引别人~

/表情 拿出卡拉OK全套和一根辫子,对者%t的尸体,一边抽,一边唱:“天天被我抽是喜欢和必须 爱越热心越冷的关系 也许这是我。。。“

/表情拿出蜡烛和皮鞭,点燃蜡烛,把蜡烛油滴在%t的尸体上,拿起皮鞭狂抽。
/Y 起来吧 SM需要你 %t

/s 爱抚10秒,勃起后请保持活力不要萎缩

唐僧版

/s%t你确定你需要复活吗?需要吗?不需要吗?需要吗?不需要吗?需要的话.你就给我起来啊.还赖着干嘛啊.

/y你想要复活啊?%t,你要是想要复活的话你就说话嘛,你不说我怎么知道你想要复活呢,虽然你很有诚意地看着我,可是你还是要跟我说你想要复活的。你真的想要复活吗?那你就活过来吧!你不是真的想要吧?难道你真的想要吗?……

/s打雷啦,下雨拉,%T你丫快起来收衣服啦!

甜蜜版

/s %T快从地上起来吧,地上怪凉的。

/s某某某,我亲爱的睡美人儿,你怎么又睡着了?快起来吧。。”

/exxx的深情一吻吻醒了%t公主。。。。

/E大喊%T别怕,英俊潇洒人见人爱花见花开的×××来拯救你了!

/E扑在%T的身上开始人工呼吸。%T睁开了美丽的双眼,饱含热泪的扑进×××的怀抱大声说:×××你救了我,无以为报,让我嫁给你吧

/s地上很凉的,让大叔抱抱吧,亲亲XXX我的小心肝

恶搞版

/sXXX现在很虚弱,我正在对他进行急救,9.9秒后护士瑟拉德丝小姐将会赶来对他进行人工呼吸

/s%t,快,快从地上爬起来,我老婆回来了!!

/y %t表泡神仙JJ鸟。。。快起来吧。。

/s 心跳没有了?
/y 电击!

/ra%t坏掉了,xx正在修理他请坚持一会儿

/E感谢CCTV,MTV,SMG,上海文广,星空卫视,无线卫视。。。和一直支持,热爱我的FANS给我这次复活%T的机会。%T~以至高无上滴偶的名义,站起来,为偶战斗吧!


/y小强!小强你怎么了小强?小强你不能死呀!我跟你相依为命,同甘共苦,一直把你当成亲生骨肉教你养你,想不到今天,白发人送黑发人

/y哎。。。人死不能复生,为了不污染环境,为了节约自然资源,为了公会里面的广大亡灵的晚餐,我把%T料理了吧....同志门开饭了!记得骨头不要吃!临时烹调骨头太硬伤胃!

/S %t让我赐予你波西米亚小王国最高的荣誉----亲吻我的右脚。。

/Y %T你还在睡哇~难怪你没人追。。。

js版

/y 复活吧 %t 。起来记得交易我20s的种子钱

/Y%T请注意~~收费复活~~~5G一次~~~谢谢惠顾~~~

/EXXX请求%t为我冲值点卡,愿意的请点同意

/S %t你将死而复生,记住你欠我一条命。

黑手版

/y复活%T在十秒后~同意***是黑手的点确定,不同意的点取消~

恐吓版


/y T% 你想做亡灵?没门~~~

/S %t 不准去看光PP的小天使.


/y表以为装死就可以赖帐,你丫给我起来还钱......

/E用怀疑的目光打量了一下%T的尸体,冷冷的说:你在装死是不是?

/E开始用脚踩%T的×××(不雅词汇隐去。。。),嘴里喊着:叫你丫装死!

/w %t %t你还能死得更牛B一点么?

/ra 死了的都自己释放跑路,少磨磨蹭蹭!

/s %t快起来呀,不起来我叫小狗狗咬你,还要把口水弄到你满脸都是。。。

和尚道士神棍版

/s 以主的名义复活你!%T接受吧,阿门!

/s %T ,信我得永生!

/表情 正在为%T收尸.

/表情 正在为%T做法事,闲杂人等勿近.

其他版

/s My Kid =%T= ~Your World isEnding......

/Raid %t就要被复活了!起来战斗吧!为了xxx!为了xxx!

/s 亲爱的%t,是否需要……终极关怀?

/ra%t就要复活了,大家开不开心丫~ %t答:开心~xxx是最棒的~oh~yeah~
  
/ra %t表怕,妈妈来救你了

/e开始对%T回收!猪头猪头回收再造!!!

/e 暴雪不理你,9c忽悠你,还得俺救你~~~~~

/y %T,乖~奶妈疼你哦……

2合1版

2队的牧师: %t 快起来,跟我去办事

我的 %t快起来,跟xx(2t的那个柴)去办事

复杂不实用版
/script SAY={};SAY[0]= "%t,乖,起来吧~姐姐给你吃糖~";SAY[1]="%t,起来吧起来吧,不要赖皮~";SAY[2]= "%t,猪撞树上,你撞猪上了,起来起来~";SAY[3]="%t,太阳都晒PP了,起床便便啦~

 

 

      附录2:

根据等级+BUFF的宏研究
/script
r=6;
l={1,12,24,36,48,60};
t=UnitLevel("target");
if (t==0) then
   t=UnitLevel("player");
end;
if UnitIsFriend("player","target") then
   for j=r,1,-1 do
     if (t>=l[j]-10) then
        CastSpellByName("Power Word: Fortitude(Rank "..j..")");
   break;
     end;
   end;
end;


设置目标加辅助类

/script if (UnitName("target") ~= nil)then EditMacro(1, "Assist "..UnitName("target"), nil, "/assist"..UnitName("target"), 1) end
/script SaveMacros()

这个加 真言术 韧

解释:
Max_Spell_Rank = 该法术的最高级别(你目前有的)

宏1:给目标加圣言术:韧(自动根据目标级别判断)
/script l={1,12,24,36,48,60};
/script t=UnitLevel("target");
/script for i=Max_Spell_Rank,1,-1 do if (t>=l[ i]-10) then CastSpellByName("Power Word: Fortitude(Rank"..i..")");break;end;end;


宏2:给目标加暗影保护(自动根据目标级别判断)
/script l={30,42,56};
/script t=UnitLevel("target");
/script for i=Max_Spell_Rank,1,-1 do if (t>=l[ i]-10) then CastSpellByName("Shadow Protection(Rank"..i..")");break;end;end;

宏3:给目标加圣言术:盾(自动根据目标级别判断)
/script l={6,12,18,24,30,36,42,48,54,60};
/script t=UnitLevel("target");
/script for i=Max_Spell_Rank,1,-1 do if (t>=l[ i]-10) then CastSpellByName("Power Word: Shield(Rank"..i..")");break;end;end;8)");

Max_Spell_Rank ---- 这个是该法术的最高级别
比如Power Word: Fortitude(圣言术:韧)最高级别是6级,那么Max_Spell_Rank =6

注意在CastSpellByName后的括号里换成技能中文名称

 

       附录3:

宏命令里常用的函数有:

1.发送消息

1.1SendChatMessage("message","system","language","channel")
作用:发送一条聊天消息
参数:
  "message":要发送的消息
  "system":聊天消息想要发送的类型,省略时为"SAY",可使用:
       "SAY":说
       "WHISPER":密语,必须在参数"channel"中指明密语对象的名字,可配合函数UnitName("unit")使用
       "CHANNEL":频道,必须在参数"channel"中指明频道的编号,省略时为”综合”
       "GUILD":工会
       "PARTY":小队
       "RAID":组团
       "YELL":大喊
  "language":使用的语言,若无参数"channel"时可省略。
       常用:”Common”,“Orcish”,在CWOW中可使用”通用语”、”兽人语”。亦可指定WOW中使用的其它语言,准确的语言名可使用函数GetDefaultLanguage(“unit”)获得。
       参数"language"指定的语言仅对发送者生效,接受者将以其默认语言接收。

1.2 GetDefaultLanguage(“unit”)
作用:返回参数”unit”指定的单位所使用的默认语言


2.字符运算

2.1 strfind(“string”,”pattern”)
作用:在字符串”string”中寻找字符(串)”pattern”
返回值:若找到,返回2个值,开始位置、结束位置;若找不到,返回nil

2.2format(“formatstring”,value,…,…)
作用:使用value,…,…提供的值,按照”formatstring”指定的格式,建立字符串
“formatstring”中常用的格式:
       %s:字符串
       %d:整数
       %f:浮点数

3.好友/屏蔽

3.1 AddFriend("name")
作用:将指定名字的玩家加入好友列表
参数:
   "name":玩家的名字,可使用函数UnitName("unit")获得

3.2 AddIgnore("name")
作用:将指定名字的玩家加入屏蔽列表

3.3 DelIgnore("name")
作用:将指定名字的玩家从屏蔽列表中删除

3.4 AddOrDelIgnore("name")
作用:切换指定名字的玩家的屏蔽状态


4.组队

4.1 InviteToParty("unit")
作用:邀请参数”unit”指定的单位加入小队

4.2 InviteByName("name")
作用:邀请指定名字的玩家加入小队

4.3 UninviteFromParty("unit")
作用:将参数”unit”指定的单位踢出小队

4.4 UninviteByName("name")
作用:将指定名字的玩家踢出小队

所属分类:编程相关Php编程    作者:新浪博客    时间:2010-11-20 0:00:00

文章导航