宏命令完全手册

一:基础教程

  1.什么是宏命令?
  玩过EQ的都知道一点宏的知识,比如组队时用来告诉队友你的行动,告诉目标等。最简单的比如puller 常用的: /v %t过来了,大家集中火力。 法师常用的: /v 我要催眠%t,大家不要打醒他 这些宏个性鲜明,是EQ的一大乐趣之一。

  然而EQ毕竟是N年前的游戏,宏也比较简单,和它比起来。WOW的宏就复杂和强大的多了。它的函数就有上千种,如果都掌握,能实现许多匪夷所思的功能。

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

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

  3.下面就是怎样设置宏的内容了,简单的设置大家可以看我们网站上"基础"篇的宏介绍.

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

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

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

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

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

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

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

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

  /in 这是一个延时命令,时间以秒为单位.同时它不支持攻击指令.格式:/in 3 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() ) 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 aspectofmon key (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();

几个简单的宏

1. 对自己使用绷带

/script TargetUnit("Player");
/use Mageweave Bandage
/script TargetLastEnemy();

* 这里用的时 Mageweave Bandage ,你可以改成适合你自己的绷带名
* use 是 Cosmos 支持的命令,你必须安装 Cosmos 才能使用这个宏,如果你没有 Cosmos,使用下面的宏(绷带必须放在主背包第一格)

/script TargetUnit("Player");
/script UseContainerItem(0,1);
/script TargetLastEnemy();

2. 对敌人的 Pet 使用技能
/script TargetUnitsPet("target");
/cast Blind
/script TargetLastEnemy();

* Blind 是技能名,你可以用自己的技能,这里用了盗贼的 Blind (我是盗贼啦,呵呵)

** /script 是使用 脚本 的命令,可供使用的命令参考附件
** 可以用 Shift + 点击 技能书里图标的方式在宏中添加释放技能的命令
** 可以用 Shift + 点击 物品的方式在宏中添加物品名
3. 打开所有背包

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

打开所有背包,可能
/script OpenAllBags()
一样搞定:P

热键Shift + B 也是可以的

4.战士用,双手武器切换单手武器+盾:
首先在快捷栏10、11、12(也就是0、 -、 =的位置)拖上双手武器、单手武器、盾的快捷方式;
双手武器:
/script ActionButtonDown(10);ActionButtonUp(10);
单手武器+盾:
/script ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown(12);ActionButtonUp(12);

以下命令全部中空格用下划线_来表示
%后面的都是变量

=各种命令分类收集=

参数设置
%t

切换当前目标命令
/target_%name
/assist_%name
/script_TargetLastEnemy();

游戏动作
/cast_%skillname(rank_%d)
/f
/script_UseAction(n%d, %d);

设置延迟命令
/pause_%d

聊天常用命令
/s_
/p_
/g_
/raid_

=应用部分说明=
聊天部分命令我就省略了…重点说明游戏中实际关系到游戏操作的命令

首先%t是指当前目标名称,%t大多是用在聊天中…比如:

你好,%t
我开始攻击%t,大家请注意…

Pull
/script TargetNearestEnemy();
/p Pulling %t
/script AttackTarget();
/v inc

Assist
/assist %t
/script AttackTarget();

UsePoison
/script UseContainerItem(bag,slot); PickupInventoryItem(16);
UseContainerItem(bag,slot);
PickupInventoryItem(17);
/in 1740 /script DEFAULT_CHAT_FRAME:AddMessage("Poison wearing off in one minute")

 

魔法师的生活到处充斥着羊皮纸和药水瓶,还有小妖精时不时来媚惑我~
 
 
 
 
     
 
昵称: ShakesPearE
积分: 290
来自: 中世纪
称号: 探索者
状态: 离线

2005-4-3 18:22:19
 
 【第1楼】 ShakesPearE 标题  
 
 
 
沙发喽


 

还有王法吗?还有法律吗?
 
 
 
     
 
昵称: ShakesPearE
积分: 290
来自: 中世纪
称号: 探索者
状态: 离线

2005-4-3 18:22:50
 
 【第2楼】 ShakesPearE 标题  
 
 
 
以上出现了3处明显的错误


 

还有王法吗?还有法律吗?
 
 
 
     
 
昵称: 懒蹄
积分: 190
来自: 黑龙江
称号: 勇者
状态: 离线

2005-4-3 18:23:03
 
 【第3楼】 懒蹄 标题  
 
 
 
个人觉得顶技术贴是厚道的表现


 

 
 
 
 
     
 
昵称: momoteacg
积分: 1079
来自: China
称号: 游侠
状态: 离线

2005-4-3 18:23:15
 
 【第4楼】 momoteacg 标题  
 
 
 
Advance Programming

WOW进阶讨论 (Advance Programming)

原文链接
作者: cherngje(宇桐)    
日期: 2004/12/31 02:10:07

Chapter One

玩了WOW有一段时间了,除了游戏本身所提供的基本功能之外,其他WOW的功能我都尽量的尝试.在这里我提供一下我个人的心得.

相信很多的玩家都知道,WOW有所谓的合法外挂(COSMOS),但是WOW又非常的严格的抓所谓的非法外挂,那么合法的外挂与非法的外挂差别在哪?

其实所谓的合法外挂,只是在于一些有心的玩家利用了WOW所提供的功能,以及指令,另外在WOW的游戏核心上,另外写了一些辅助性质的SCRIPT来帮助游戏介面的简易操作.至于非法外挂,就是利用任合游戏本身所没提供的功能来增加自身的利益(包括了所谓第三者程式third party program).

既然WOW本身有提供这样的功能,身为玩家的我们为什么不尽量的利用这些好处呢?有鉴于台湾玩家在获得这些资讯上的困难(因为有关于这方面的讨论,大部分都是英文),我在这里提出讨论,或许能带给台湾的玩家另外一种的游戏体验.

暴风雪在WOW的官方网站上有很明确的提到,UI的修改是玩家对于游戏整体体验中的一部分.但是什么是UI?UI修改又是什么?

UI是USER INTERFACE(使用者介面),在WOW中,所有的UI都是模组化的,每一个按钮,每一个视窗都是属于某一个模组的定义.玩家在玩游戏的时候,并不是直接的对于游戏核心下达游戏指令,而是先在UI上面的动作,然后在藉由UI的模组上下达游戏核心指令.例如我们按下游戏中攻击的按钮,WOW会先检查这个按钮的定义是什么,然后才执行这个定义下的指令.

那么修改UI的好处又是什么呢?这样说好了.WOW本身所提供的UI,其背后的定义都是最基本的,最简化的.比如说快捷键按钮的设计,以及每个指令动作.在按钮以及视窗的设计上,使以简单容易上手为主要目的.但是对于进阶玩家而言,又会觉得WOW所提供的快捷键按钮不够用,所以自己在UI上面加以修改,这样就不但可以自行决定快捷键按钮的数目,也可以把这些按钮摆在自己最喜欢的地方.

另外关于指令动作上(键盘与老鼠在UI上面的指令),WOW基本的UI设定都是一个指令一个动作.我们按一个按钮,WOW做一个动作.但是我们可以自行设定UI,达到玩家的下达一个指令,WOW同时做很多动作.

比如说,WOW给玩家在攻击上的选择是,按TAB会帮玩家找出画面上距离最近的敌人(原始设定是20码的距离范围内),然后玩家必须按攻击的按钮或是T,在这样的情况下才会攻击.玩家下达了两个指令,做了两个动作.但是在UI的修改上,我们不但可以修改画面上距离最近的敌人的距离范围(适合远距离攻击的玩家),我们还可以设定按下TAB按键,不但会自动定位距离最近的敌人,还会自动开始攻击.

在这个讨论串当中,我主要是针对指令UI上的设定提出讨论,因为关于画面上的设定已经有很多现成的选择(COSMOS).因此我将针对CLASS上面辅助型的UI设定.在藉由讨论上,让台湾的玩家们也有机会自行设计出最方便,最有效率的攻击,法术施展,以及宠物控制.

当然我绝对欢迎玩家针对任何的UI设定提出讨论,但是我不见得有能力回答.毕竟我个人比较不喜欢去研究画面的排列,所以这方面花的功夫也比较少.

Chapter Two

上一篇文章介绍了UI修改的最基本观念,在这篇文章中我将提供UI修改上的最基本的动作,工具以及资料来源.


在我们要对UI做任何的修改或是制作模组之前,我们必须先了结WOW的UI基本结构.在WOW的资料夹里面,我们可以找的一个DATA的子目录.在这个子目录里面,包括了所有WOW会运用到的档案,包括了模组,图形,字型等等.这些都压缩在所谓的MPQ档案里面.拿我个人的档案来做例子,我的MPQ档在C:Program FilesWorld of WarcraftData下面.而所有UI可以运用到的档案都压缩在interface.mpq档里.

要检查MPQ档案里面有些什么,我个人建议WinMPQ这个程式.为了避免大家担心我放病毒,在这里我建议大家自行上GOOGLE查哪里可以下载WinMPQ.

因为游戏的UI的基本设定都在interface.mpq,所以我不建议大家直接对于interface.mpq里面的档案直接修改.大家可以把所需要的档案解压出来.只要做完修改后不存回interface.mpq里面,在这样的情况下,都不会影响到基本设定.

那么大家会问修改完之后的档案该存在哪呢?首先到WOW的目录里面,然后开一个先的子目录叫做interface.以我个人的例子是C:Program FilesWorld of Warcraftinterface.然后大家可以把修改好或是制作好的档案存在这个资料夹下面.当WOW载入游戏资料的时候,WOW会自动到这个资料夹里面检查哪些模组因该载入.

虽然UI修改可以运用到WOW现有的档案,但是为了方便教学,我在这里提出的例子将不会用到WOW现有的档案.事实上,除了要做游戏画面上的设定,大部分的情况下,我们不见得要用到WOW现有的UI档案,只要我们制作模组用的都是WOW所提供的核心指令就可以了.

在制作模组之前,我先介绍一下每一个模组所需要的最基本的档案.每个模组都需要一个介绍档,toc档.定义档,xml,以及核心档,lua档.这三种档案都可以用笔记本或是任何的文书处理程式来做修改.

为了方便介绍,我举出一个简单的例子来解释这三个档案.现在让我们设计个 Hi 模组.这个模组当你执行的时候,他会在你的游戏画面上出现一个 Hi 的资讯.

因为我们这个模组叫做Hi,所以我们需要三个档案

hi.toc
hi.xml
hi.lua
(模组的名称最好与档案的名称相对应)

现在让我介绍一下hi.toc的格式:

## Interface: 4150
## Title: Hi
## Notes: just want to say hi
## OptionalDeps:
## Dependencies:
hi.xml

在## Interface:后面的数字代表了目前WOW的版本.制作模组的作者有义务维持模组支援最新版的WOW,所以每当WOW做出更新的时候,模组的制作人得检查模组是否还能工作,当确定还能工作的时候,就可以更新射个数字.更新这个数字有两个意义:第一,WOW会检查每个模组的这个数字,如果与WOW版本相辅合,那么就会载入,不然就会档掉.第二,玩家可以确定这个模组的版本是可以使用的版本.

我在这里不建议除了模组的制作人修改这个数字.因为有时候模组的设计可能很复杂,在不是制作人的情况下,很可能不知道到底没有更新的模组是否还跟最新版的WOW相容.如果玩家自行更改这个数字让它跟WOW的版本数字一样的话,WOW就会自动载入这个模组.如果模组不相容的情况下,很可能会造成游戏上的困扰.

写到这里,玩家可能会问要去哪里找WOW最新的版本数字.当执行WOW游戏的时候,在登入的画面上的最左下方,可以找到这个资讯.以目前我写这个教学的时间而言,WOW最新版所提供的资讯是Version 1.2.1 (4150).大家要用的是4150这个数字,而不是1.2.1这个数字.

在## Title:后面,模组制作人打的字元就是这个模组的名称.

在## Notes:后面,模组制作人打的字元就是这个模组的简介

## OptionalDeps:后面, 模组制作人标示出这个模组是否有其他的额外的模组可以支援这个模组.当这个地方有标示其他的模组的时候,并不代表玩家们也必须要有这个额外模组,只是有了这个额外的模组,可以让这个么模组的功能更加完整.

## Dependencies:后面, 模组制作人得标示出这个模组必须要使用的的档案(包括了必须使用到其他模组的档案,请注意,上面选择性模组的档案并不需要在这里标示).

因为这个教学模组并不需要用到其他的模组,所以只需要标示出模组定义档 hi.xml.

hi.xml的介绍:

基本上XML可以当做网页设计档案(HTML)来看,可是严格的来说,XML是拿来作为定义上或是资料传输上所使用的.如果玩家对于XML的语法以及如何运用有兴趣,可以到http://www.w3.org/XML/查询更详细的资料

现在我只介绍XML在WOW模组设计上该如何运用.

Code:
 
<Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/">
<Script file="hi.lua"/>

<Frame name="hi_core">
<Scripts>
<OnLoad>
this:RegisterEvent("VARIABLES_LOADED");
</OnLoad>
<OnEvent>
if (event == "VARIABLES_LOADED") then
hi_initialize();
end
</OnEvent>
</Scripts>
</Frame>
</Ui>


 

大家可以忽略前面几行<Ui xmlns ……… />.基本上每一个WOW模组XML档都必须要有这几行.

重要的是 <Script file="hi.lua"/> 在这里大家得定义出模组的核心档案是什么.以我们目前的例子,核心档案是hi.lua.

在 <Frame name="hi_core"> 这里定义出模组在游戏画面中要使用的的子画面的名称.这个名称必须是独一无二的,避免与其他的模组画面冲突到.

在上面的例子中我们可以看到<OnLoad>和<OnEvent>的标示,基本上<OnLoad>的意思是当WOW在载入游戏介面的时候,因该要做出什么动作.以我们的例子,我们要在WOW游戏里注册一个变数叫做"VARIABLES_LOADED".
<OnEvent>的意思是,如果发生了什么事件,那么该做出什么动作来反应.以我们的例子,如果注册"VARIABLES_LOADED"成功的话,我们就执行hi_initialize(). 当然,如果没有注册成功,也就不会有事件发生,这代表了我们的模组没有载入到游戏里面,所以我们也就没有后续动作.

hi.lua的介绍:
lua 是一个script语言.WOW所有的UI模组都是建立在这个语言之上.对于lua想要更深入的了解,请到官方网站:http://www.lua.org/manual/5.0/ 在这里可以查到所有关于lua的语法以及使用方式.

现在让我介绍我们目前的例子:

Code:
 
function hi_initialize()
SlashCmdList["HIHI"] = hi_command;
SLASH_HIHI1 = "/hihi";
SLASH_HIHI2 = "/您好";
end

function hi_command(msg)
message(msg);
end


 

大家可以看到我们写两个小function 一个叫hi_initialize 一个叫 hi_command. 在hi.xml里面,如果模组顺利在入的话hi_initialize是第一个被呼叫的.在这里我们自行设定了一些"/"指令.我想大家因该对于游戏里面的一些"/"指令并不陌生.

同样的我们也可以帮我们的模组设定这些"/"指令.
SlashCmdList["HIHI"] = hi_command; 代表的意思是如果我们么组的"/"指令被呼叫的话,我们因该执行hi_command这一个function.
SLASH_HIHI1 = "/hihi";
SLASH_HIHI2 = "/您好";
这里是帮我们的"/"指令定出名称,目前我还不确定我们是否可以自行自做出中文指令,但是我想只要可以在WOW输入中文,上面的设计就因该没问题.(所以还请可以在WOW输入中文的玩家测试一下.
这里要稍微注意的一点是SlashCmdList["HIHI"]里面的HIHI必须要和SLASH_HIHI1和SLASH_HIHI2 的HIHI依样.如果我们把HIHI改成NIHAO 那么就会变成SlashCmdList["NIHAO"], SLASH_NIHAO1, 以及SLASH_NIHAO2. 至于HIHI 或是 NIHAO 后面的 1 和 2 只是变数,代表了同样的指令,有哪些变种的指令.

当我们打入了"/hihi"或是"/您好" 就会执行下面的function
function hi_command(msg)
message(msg);
end
基本上只是在游戏画面上出现一个视窗,然后视窗上面显示我们在指令后面打入的讯息.

例如我们输入"/hihi 测试"

那么出现的视窗就会显示 "测试" 在那上面.

好了,我们写好这三个档案了.现在我们要告诉WOW载入我们的HI模组.
首先,到"C:Program FilesWorld of Warcraftinterface"这个子目录里面.如果还没有这个子目录的话,自行开一个新的.然后在这个目录里面开一个新的目录叫做"AddOns"所有玩家设计的模组都因该摆在这个目录里面.然后在"AddOns"这个目录里面在开一个目录叫做"HI".最后把我们做好的三个档案存到这个目录里面.
"C:Program FilesWorld of WarcraftinterfaceAddOnsHI"

现在我们可以测试这个模组了喔.

稍微介绍一下WOW简易管理模组的方式.如果当玩家有安装自行设计的模组的话(比如说COSMOS),在进入角色选单的时候,我们可以看到画面的左下方有一个Addons的按钮.大家可以在者里自行选择所希望开启的模组.在模组名子前面打勾,表示选择角色之后,游戏就会开始载入模组.没打勾就代表不会载入. 请注意,WOW有模组载入的上限.所果所有载入的模组用到的资源超过32MB,游戏会自动关闭.这时候就需要去管理介面关掉一些模组喔.

下一篇文章,我将教大家如何在lua档案里面运用WOW的核心指令,以及如何只使用3个档案,就可以写出很有帮助的SCRIPT.

Chapter Three

在来一系列的文章,我要教猎人的玩家如何利用模组设计,有效率的执行远距离,近距离,以及宠物攻击. 顺便介绍一些WOW的核心指令.


我想玩过网路游戏的玩家,多多少少都因该听过外挂.什么是外挂?其实就是能自动的帮助玩家执行一些指令.基本上很类似MACRO(没听过MACRO的人,因该有听过EZSCRIPT吧)

WOW本身就有提供MACRO这样的功能.只要我们在游戏中输入"MACRO"之后,我们就可以开始设计我们自己的辅助指令.但是WOW的MACRO有很多限制.第一,WOW的MACRO是半自动的,意思就是说,你一定要按下某一个键盘按键,或是老鼠按键,才能执行你所设定的MACRO.第二,游戏中的MACRO有字数上的限制.最多只能输入255个英文字元.第三,WOW的MACRO无法设定时间上面的间隔.在MACRO里面的所有的指令会被一次执行.第四,如果你所执行的很多指令中有很多都有指令冷却时间(例如魔法的COOLDOWM),那么MACRO只会执行第一个可以执行的指令.

同样的,当我们设计模组的时候,我们也同样受限于这样的限制,但是却没有255个英文字元的限定,在这样的情况下,我们可以自做更复杂的指令方式.

今天我要教大家的模组是猎人辅助模组.

WOW的猎人是属于远距离攻击的单位,最需要控制的是如何有要的利用各式的ASPECT以及宠物攻击.当近距离攻击的时候,猎人需要用到ASPECT OF MONKEY,当远距离攻击的时候,需要用到ASPECT OF HAWK. 但是我想很多人因该都会遇到,同时指示宠物攻击,玩家攻击,以及转换ASPECT的时候,会手忙脚乱.现在我们的目标是如何设计一个模组可以让我们在操作上更顺畅.

猎人辅助模组设计目标:
1:玩家主动攻击的时候,宠物也会主动攻击(WOW的基本模式是,玩家按攻击,然后还要按宠物攻击).

2:玩家与宠物永远是攻击同一个目标,以最快最有效率的方式来减少战斗画面上的危机.避免宠物与玩家通时攻击不同的敌人,造成最后的结果是玩家与宠物同时阵亡.

3:有效的辨识玩家的攻击方式,然后执行最有效率的ASPECT.例如玩家近距离攻击的时候不是在ASPECT OF HAWK的状况下.

4:有效的运用远距离攻击技能(包括了节省MANA,快速选择敌人目标等等)

好了,有了以上的目标,现在开始让我们来设计.首先,来制作模组所需要的最基本的三个档案.因为我替我的模组设计的名称叫做HunterAssistant(猎人辅助),所以我的三个基本档案叫做:
HunterAssistant.toc
HunterAssistant.xml
HunterAssistant.lua

Code:
 
HunterAssistant.toc:
## Interface: 4150
## Title: Hunter Assistant V0.1
## Notes: Macro scripts for assisting Hunter
## OptionalDeps:
## Dependencies:
HunterAssistant.xml

HunterAssistant.xml:
<?xml version="1.0" encoding="utf-8" ?>
<Ui xmlns="http://www.blizzard.com/wow/ui/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.blizzard.com/wow/ui/">
<Script file="HunterAssistant.lua"/>

<Frame name="HunterAssistantFrame">
<Scripts>
<OnLoad>
this:RegisterEvent("VARIABLES_LOADED");
</OnLoad>
<OnEvent>
if (event == "VARIABLES_LOADED") then
HunterAssistant_init();
end
</OnEvent>
</Scripts>
</Frame>
</Ui>


 

我将不在第这两个档案多做解释.有疑问的,请参考上一篇文章.毕竟我只使用的最简单的设计.


现在的重点LUA核心档.我先把档案内容列出来,然后在以另外的文章详细的解释每个指令.

HunterAssistant.lua:

Code:
 
function HunterAssistant_init()
– define slash command here
SlashCmdList["HA_HunterMarkI"] = HA_HunterMarkI;
SLASH_HA_HunterMarkI1 = "/HAHunterMarkI";
SLASH_HA_HunterMarkI2 = "/hahmi";

SlashCmdList["HA_HunterMarkII"] = HA_HunterMarkII;
SLASH_HA_HunterMarkII1 = "/HAHunterMarkII";
SLASH_HA_HunterMarkII2 = "/hahmii";

SlashCmdList["HA_AttackMelee"] = HA_AttackMelee;
SLASH_HA_AttackMelee1 = "/HAAttackMelee";
SLASH_HA_AttackMelee2 = "/haam";

SlashCmdList["HA_AttackRangeI"] = HA_AttackRangeI;
SLASH_HA_AttackRangeI1 = "/HAAttackRangeI";
SLASH_HA_AttackRangeI2 = "/haari";

SlashCmdList["HA_AttackRangeII"] = HA_AttackRangeII;
SLASH_HA_AttackRangeII1 = "/HAAttackRangeII";
SLASH_HA_AttackRangeII2 = "/haarii";

SlashCmdList["HA_StingSerpentI"] = HA_StingSerpentI;
SLASH_HA_StingSerpentI1 = "/HAStingSerpentI";
SLASH_HA_StingSerpentI2 = "/hasseri";

SlashCmdList["HA_StingSerpentII"] = HA_StingSerpentII;
SLASH_HA_StingSerpentII1 = "/HAStingSerpentII";
SLASH_HA_StingSerpentII2 = "/hasserii";

SlashCmdList["HA_StingSerpentIII"] = HA_StingSerpentIII;
SLASH_HA_StingSerpentII1 = "/HAStingSerpentIII";
SLASH_HA_StingSerpentII2 = "/hasseriii";

SlashCmdList["HunterTest"] = HunterTest_command;
SLASH_HunterTest1 = "/HunterTest";
SLASH_HunterTest2 = "/ht";
end


 


Code:
 
function HA_AttackMelee()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
CastSpellByName("Attack");
x=1
found=false;
while (UnitBuff("player",x)) do
if(string.find(UnitBuff("player",x), "Monkey")) then
found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Aspect of the Monkey");
end;
end;
end


 


Code:
 
function HA_AttackRangeI()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
CastSpellByName("Auto Shot");
x=1
found=false;
while (UnitBuff("player",x)) do
if(string.find(UnitBuff("player",x), "Raven")) then
found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Aspect of the Hawk(Rank 1)");
end;
end;
end


 


Code:
 
function HA_AttackRangeII()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
CastSpellByName("Auto Shot");
x=1
found=false;
while (UnitBuff("player",x)) do
if(string.find(UnitBuff("player",x), "Raven")) then
found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Aspect of the Hawk(Rank 2)");
end;
end;
end


 


Code:
 
function HA_HunterMarkI()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
CastSpellByName("Hunter’s Mark(Rank 1)");
end;
end


 


Code:
 
function HA_HunterMarkII()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
CastSpellByName("Hunter’s Mark(Rank 2)");
end;
end


 


Code:
 
function HA_StingSerpentI()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
x=1
found=false;
while (UnitDebuff("target",x)) do
if(string.find(UnitDebuff("target",x), "Quickshot")) then
found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Serpent Sting(Rank 1)");
end;
end;
end


 


Code:
 
function HA_StingSerpentII()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
x=1
found=false;
while (UnitDebuff("target",x)) do
if(string.find(UnitDebuff("target",x), "Quickshot")) then
found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Serpent Sting(Rank 2)");
end;
end;
end


 


Code:
 
function HA_StingSerpentIII()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
x=1
found=false;
while (UnitDebuff("target",x)) do
if(string.find(UnitDebuff("target",x), "Quickshot")) then
found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Serpent Sting(Rank 3)");
end;
end;
end


 


Code:
 
function HunterTest_command()
x=1
found=false;
while(UnitBuff("player",x)) do
if(string.find(UnitBuff("player",x), "Raven")) then
found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Aspect of the Hawk(Rank 1)");
end;
if(found) then
CastSpellByName("Aspect of the Monkey");
end;
end


 


Chapter Four
首先我要说声抱歉,因为我没注意到基地的文章发表没有办法显示"TAB"的空格.这样在查看程式码,一定会造成困扰.如果大家在看程式码会眼睛痛的时候,还请见谅.

现在,让我们研究一下HunterAssistant.lua第一段:

function HunterAssistant_init()
– define slash command here
SlashCmdList["HA_HunterMarkI"] = HA_HunterMarkI;
SLASH_HA_HunterMarkI1 = "/HAHunterMarkI";
SLASH_HA_HunterMarkI2 = "/hahmi";

SlashCmdList["HA_HunterMarkII"] = HA_HunterMarkII;
SLASH_HA_HunterMarkII1 = "/HAHunterMarkII";
SLASH_HA_HunterMarkII2 = "/hahmii";

SlashCmdList["HA_AttackMelee"] = HA_AttackMelee;
SLASH_HA_AttackMelee1 = "/HAAttackMelee";
SLASH_HA_AttackMelee2 = "/haam";

SlashCmdList["HA_AttackRangeI"] = HA_AttackRangeI;
SLASH_HA_AttackRangeI1 = "/HAAttackRangeI";
SLASH_HA_AttackRangeI2 = "/haari";

SlashCmdList["HA_AttackRangeII"] = HA_AttackRangeII;
SLASH_HA_AttackRangeII1 = "/HAAttackRangeII";
SLASH_HA_AttackRangeII2 = "/haarii";

SlashCmdList["HA_StingSerpentI"] = HA_StingSerpentI;
SLASH_HA_StingSerpentI1 = "/HAStingSerpentI";
SLASH_HA_StingSerpentI2 = "/hasseri";

SlashCmdList["HA_StingSerpentII"] = HA_StingSerpentII;
SLASH_HA_StingSerpentII1 = "/HAStingSerpentII";
SLASH_HA_StingSerpentII2 = "/hasserii";

SlashCmdList["HA_StingSerpentIII"] = HA_StingSerpentIII;
SLASH_HA_StingSerpentII1 = "/HAStingSerpentIII";
SLASH_HA_StingSerpentII2 = "/hasseriii";

SlashCmdList["HunterTest"] = HunterTest_command;
SLASH_HunterTest1 = "/HunterTest";
SLASH_HunterTest2 = "/ht";
end

附注:HA_代表的意思是HunterAssistant的缩写.

其实这里没有什么特别的.这里只是帮模组设定一些简单的"/"指令.将来我们可以直接把这些指令运用到游戏的MACRO中. 请注意的一点是,每一个指令都有一个FUNCTION相对应.另外,我每一个指令都一个全名指令,以及一个简写指令(方便使用).在指令命名设计上,我以看到指令名称就大概能猜到使用的结果是什么.还有就是每个指令前面加上HA_这样能有效的避免跟其他模组的指令冲突到.另外有几个指令后面有罗马数字,这些是代表了所使用到的猎人技能是有等级高低的.比如说HA_HunterMarkI使用的是等级1的Hunter’s Mark,HA_HunterMarkII使用的是等级2的Hunter’s Mark.

另外,我的指令排列是以英文顺序为主.这样方便我个人寻找BUG.

现在让我们继续往下看.

function HA_AttackMelee()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
CastSpellByName("Attack");
x=1
found=false;
while (UnitBuff("player",x)) do
if(string.find(UnitBuff("player",x), "Monkey")) then
found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Aspect of the Monkey");
end;
end;
end

这一个function的主要目的是近距离攻击.首先第一行是AssistUnit("pet");这代表了什么?其实这是WOW的核心指令之一.AssistUnit()的意思是帮助某一个单位的意思.这个指令可以接受不同的变数,包括玩家单位,NPC友好单位,以及宠物单位.当执行了这个指令之后,你的敌人对象就会变成你所帮助的那个单位的敌人是同一个.在这里"pet"的意思就是主角单位的宠物.

我在这里会用AssistUnit("pet")开头的原因是,当你的宠物在攻击的时候敌人的时候,你跟你的宠物所选择的敌人不见得是同一个,所以我们要确定主角跟宠物攻击的对象是同一个.

(注意:目前我这样的设计好像有点逻辑上的问题.思考逻辑到底是主角该帮主宠物还是宠物帮助主角?游戏中的基本设定是主角受到攻击,宠物就会自动帮助第一个攻击主角的敌人,可是如果好几个人攻击主角,宠物还是会先专心的把第一个敌人解决掉.所以我一开始会这样设计,专心的先帮助宠物解决掉第一个敌人.可是当遇到我就是有特殊原因要先解决掉其他的敌人的时候(例如某些特殊任务),我这样的设计反而造成困扰,因为只要我一攻击,我的对象就就转换到宠物的敌人了.所以在未来的版本中,我可能会设定另一种攻击是,宠物永远帮助主角攻击同一个敌人,使用的指令是 PetAssistUnit("Player"). "Player"就是代表主角的意思.)

下一行, if(not UnitExists("target")) then
TargetNearestEnemy();
end;
这里的意思是检查执行帮忙的指令之后(AssistUnit())到底有没有敌人?如果主角的宠物没有在战斗状态,那么我们敌人的状态就是没有选择.UnitExists("target")) 就是检查我们有没有选择任何的目标.这个也是WOW的核心指令之一. 当然如果我们有选择目标,可是目标是有好单位呢?不用担心,WOW的设计本来就是无法攻击友好单位的.那么TargetNearestEnemy()又是什么意思呢?就是自动选择距离最近的非有好单位当作目标选项.所以这一段的意思就是,如果主角跟主角的宠物都没有目标的话,帮主角动挑一个最近的非有好单位当作目标.

在来
if(UnitExists("target")) then
PetAttack();
CastSpellByName("Attack");
这里代表的是,如果有目标的话,宠物攻击,然后主角攻击.PetAttack()是宠物攻击的指令,CastSpellByName("Attack")的意思是主角施展技能,这个技能是攻击(Attack). 这些全都是WOW的核心指令喔,酷吧.

继续
x=1
found=false;
while (UnitBuff("player",x)) do

found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Aspect of the Monkey");
end;
end;
end

这里我定义了一个变数X,以及一个变数FOUND(中文是找到的意思),这两个变数不是WOW的专有变数,而是LUA的语法喔.为什么需要这两个变数?因为当我们在近距离攻击的时候,我必须要确定主角是在于ASPECT OF MONKEY 之下,有了这些变数可以方便我来做检查.

while (UnitBuff("player",x))的意思就是如果在主角的身上可以找到Buff的话. UnitBuff("player",1)会在寻找主角身上第一个buff的资料,然后传回讯息.如果没找到,就会传回一个否定的讯息.UnitBuff("player",2)就是寻找第二个buff的资料.

if(string.find(UnitBuff("player",x), "Monkey"))
string.find是lua语言上的指令,不是WOW的核心指令.这个指令的目的是寻找一个讯息中的字串是否有特殊的字元.所以这一整段的意思是找寻主角身上的buff的资讯是否有MONKEY(猴子)的字串.如果有的话,就把FOUND设定为TRUE.

if(not found) then
CastSpellByName("Aspect of the Monkey");
这一段就是如果从头到尾都没有找相关的buff的话,代表了主角没有施展"Aspect of the Monkey",所以我们就执行施展技能的指令CastSpellByName("Aspect of the Monkey").

写到这里,让我顺便提出一些要点.不晓得大家有没有发现到,在这个function里面,从头到尾只有一个指令需要冷却时间那就是CastSpellByName("Aspect of the Monkey").其他,比如说攻击,全部都不需要冷却时间.这也就是为什么这么多指令都可以转变成一个单一指令.但是因为CastSpellByName("Aspect of the Monkey")需要冷却时间,所以我把她摆在最后执行,避免错误.另外一点就是,很多人在找寻主角身上的buff资料的时候,喜欢直接用UnitBuff("player",1)却没有想到其实主角身上可能有很多的buff呢.

所以我这样的设计一定可以确保如果主角已经施展了Aspect of the Monkey,就绝对不会重复施展第二次(浪费mana喔).


至于这个function 里面的一些IF, WHILE, NOT等等的运用以及正确的语法,就请大家到LUA的官方网站去看.我就不多解释了.

在来是猎人的普通远距离攻击
function HA_AttackRangeI()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
CastSpellByName("Auto Shot");
x=1
found=false;
while (UnitBuff("player",x)) do
if(string.find(UnitBuff("player",x), "Raven")) then
found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Aspect of the Hawk(Rank 1)");
end;
end;
end

这一段其实跟近距离的普通攻击是同样的逻辑,但是CastSpellByName("Auto Shot") 这个是猎人专有的远距离自动攻击的指令.同样的这个指令可以跟其他需要冷却时间的指令同时使用.另外CastSpellByName("Aspect of the Hawk(Rank 1)") 这是执行第一级的ASPECT OF THE HAWK. 在我们模组function HA_AttackRangeII()里面就会执行第二级的ASPECT OF THE HAWK, CastSpellByName("Aspect of the Hawk(Rank 2)")


function HA_HunterMarkI()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
CastSpellByName("Hunter’s Mark(Rank 1)");
end;
end
这一段没有什么特别的,唯一的好处就是当主角开始使用MARK的技能的时候,就开始命令宠物攻击.我们不需要按两个动作.另外,Hunter’s Mark 也是有等级之分的,所以我写了其他相对应的等级指令
注意:(这个FUNCTION我还没有完全的完成,因为我没有检查是否敌人已经被MARK过了,也就是说这个指令允许重复MARK敌人,浪费MANA)

function HA_StingSerpentI()
AssistUnit("pet");
if(not UnitExists("target")) then
TargetNearestEnemy();
end;
if(UnitExists("target")) then
PetAttack();
x=1
found=false;
while (UnitDebuff("target",x)) do
if(string.find(UnitDebuff("target",x), "Quickshot")) then
found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Serpent Sting(Rank 1)");
end;
end;
end

这一个跟普通远距离攻击的指令很像,但是并不是使用普通的AUTO SHOT,而是使用了Serpent Sting.另外这一个指令不会检查主角本身是否施展了ASPECT OF HAWK.因为Serpent Sting跟aspect of the hawk都要冷却时间,两个写在一起,只会执行其中的一个,那么就一点意义都没有了.既然这样,为什么要写这一个指令?其实这个指令会检查敌人身上是否已经被施展了Serpent Sting,毕竟Serpent Sting没有加成效过,所以我们要避免重复施展Serpent Sting.而WOW的基本Serpent Sting指令是不会做这样的检查的,所以我们还得一直盯着敌人的资讯看着,避免浪费MANA.可是设计了另外的这个指令,玩家根本不用担心浪费MANA,只要想到了就执行一下,反证会自动检查,也不会中断AOTU SHOT的动作,更不会浪费MANA.另外,这个指令也有设计其他不同等级的相对应指令.

最后
function HunterTest_command()
x=1
found=false;
while(UnitBuff("player",x)) do
if(string.find(UnitBuff("player",x), "Raven")) then
found=true;
end;
x=x+1;
end;
if(not found) then
CastSpellByName("Aspect of the Hawk(Rank 1)");
end;
if(found) then
CastSpellByName("Aspect of the Monkey");
end;
end
这个指令只是我设计好玩拿来测试用的,当执行这个指令的时候,主角会交互的使用ASPECT OF MONKEY 或者 ASPECT OF HAWK.

模组的核心指令介绍到这里,下一篇文章将教玩家如何在游戏里运用这些指令.

目前我们的模组有了最基本的三个档案了.现在让我们把这三个档案放入C:Program FilesWorld of WarcraftInterfaceAddOnsHunterAssistant这个资料夹里面.然后执行游戏.

现在让我解释一下WOW上面所谓的斜线指令("/指令")该如何运用.

大家因该都清楚如何的运用感情指令,或是交谈指令.这些都是斜线指令.但是WOW还有一些斜线指令是无法直接的输入, 比如说"/attack". 基本上这是WOW官方设计的攻击指令,其背后只是很简单的呼叫了CastSpellByName("Attack"). 但是为什么我们无法直接使用这些指令呢?因为暴风雪为了避免玩家利用其他的程式来设计非法的MACRO.

怎么说呢?因为WOW的MACRO没有时间间隔设计,避免玩家设计机器人,那么玩家设计机器人就必须利用其他的程式.如果,设计机器人,机器人程式就可以直接的模拟键盘输入指令,而不会影响到玩家对于滑鼠的操做.所以WOW把很多的斜线指令的操作设定成只有在WOW的MACRO下才能使用.你设计一个MACRO以及MACRO图像按钮,你要执行这个MACRO,你就必须对这个按钮按一下,WOW才会执行这个动作.

当然,还是有其他的办法摆脱暴风雪这样的设计,但是我不会对类似这样的问题做出任和解说.因为暴风雪尽力的维护游戏免于外挂的侵入,身为玩家的我也有义务要帮助暴风雪.

有这样的限制的斜线指令包括了所有的会使用到执行特殊技能的指令.所以当我们设计的模组有用到执行特殊技能的时候,我们的斜线指令也只能在WOW下面的MACRO才能执行.(当然,我们的猎人辅助模组还是运用在MACRO下面比较好,毕竟在战斗的时候谁还有时间慢慢的的用键盘输入指令,我们又不是机器人)

要使用WOW的MACRO很简单,只要在游戏中输入"/macro"或是按下Esc 然后选择macro的选项

在macor的画面,我们必须帮macro选择一个图像按钮,替macro命名,然后输入我们想要给macro的指令.

现在让我列出猎人辅助模组的简易斜线指令:
Hunter’s Mark 包括了不同的等级
/hahmi
/hahmii

Melee Attack(近距离攻击)
/haam"

Range Attack (远距离攻击)包括了不同的等级
/haari
/haarii

Serpent Sting(远距离特技)包括了不同的等级
/hasseri
/hasserii
/hasseriii

现在我们只要把macro的图像按钮选择好,然后给个名子,最后在底下输入指令的地方,挑一个你想要执行的辅助指令输入就好了. 注意喔,一个macro只能使用模组的一个指令喔,因为就算你输入了很多个,在执行macro的时候,游戏也只会执行情中的一个而已.(冷却时间的考量)

当你设定好了macro之后,WALA~~~,你就可以把这个图形按钮抓到快捷列上面使用了~~~就像是使用任何其他的基本图形按钮依样喔.好处是,你按一次按钮,却等于其他没有用辅助模组人按好几次按钮依样喔.还会自动帮你做一些额外的检查呢.有效率了多吧.


下一次,我将教大家如何设计辅助模组可以帮大家在半自动的施展BUFF,对象也会半自动的选择队友,宠物,或是自己.


附注1:因为我个人玩了10角色,包括了联盟的每一个CLASS,在未来的日子里,我将会不定期的替自己写模组.如此同时,我也会拿上来与大家分享.但是我将不会再花这么多的时间详细解释每一个指令.除非有网友提出问题,那时我会在尽力回答.

附注2:有关WOW的核心开放给玩家使用的指令,大家可以到这个网页找到.但是这里不是完整的列表,说明也不是很清楚,不过大家将就的用噜.
http://www.wowwiki.com/World_of_Warcraft_API

附注3:最有效率的研究模组的方式,就是到官网的UI Customization的论坛参与讨论喔.也许大家会找到一些意想不到,但是又很有帮助的模组喔.我个人就已经发现有人设计了一个挖矿采要的模组,这个模组会把你最到过的挖矿以及采药的地点纪录下来,然后显示在地图上.怎么样,很有用吧.
http://forums.worldofwarcraft.com/board.aspx?fn=wow-interface-customization

Chapter Five
或许我在模组解释以及使用教学方面,因该采用更简单的例子来让大家能更容易上手.所以我决定不要直接的把我个人写好的模组拿上来,而是先的教大家如何使用WOW的MACRO,以及呼叫一些WOW的指令.

首先让我重新的介绍一下WOW的MACOR
(基本资料来源 魔兽台湾:http://www.wowtw.game.tw/)


在"魔兽台湾"的网页里,我们可以找到很清楚的MACOR中文定义以及解释:

宏[Macro]使你能够创建自己独创且非常酷的命令集,你可以通过点击一个按钮便完成一系列的命令。宏拥有许多用法。

宏的创建

输入“/macro”或者点击谈话[talk]按钮并且选择宏[Macro]选项,将会弹出一个对话框,里面记录着你现有的宏。在开始的时候里面应该没有任何宏。
点击对话框底部的”new”按钮,将会弹出另外一个对话框,其中要求你输入宏的名称并且为这个宏选择一个图标。
给你的宏命名,选择一个容易记忆的名字。例如,输入“assist[协助]”。
选择一个图标。这里我们选择的是一把剑。
点击“Okay”按钮。你现在能够在你的宏对话框里看到这个宏的名称(assist),在名称的旁边有你刚才选择的图标(剑)。
现在在assist[协助]图标上点鼠标左键加亮它。除了“new”按钮外,同时也有一个按钮用来改变你的宏的名称和图标,以便你以后想改变它的名称或者选择一个不同的图标。
一旦你的“assist”图标是加亮状态,你就可以向下移动你的鼠标指针进入“enter macro commands[输入宏命令]的区域。在这里你可以输入你想让这个宏按钮实现的命令。
输入“/assist Nebu[协助Nebu]”。
现在移动你的鼠标指针回到剑的图标(assist[协助]宏),在这个图标上压下鼠标的左键不松开。
现在拖动图标到你的动作条的空槽里去。
当你要使用这个新的宏的时候,键入这个动作按钮对应的数字或者直接右键点击按钮本身。
现在你拥有了一个宏按钮,它将在其他玩家(Nebu)攻击的时候协助他。无论何时,当Nebu攻击目标的时候,点击这个按钮后你的目标将会变为他正在攻击的目标。


以上是"魔兽台湾"给予MACRO的中文解释,以及一个很简单的例子.

现在让我们稍微加强一下上面的例子.

上面的例子里面,我们看到了MACRO的内容只有一行

/assist Nebu

现在我们来加强一下,让这个MACRO不但会协助,还会马上攻击.改过的MACRO会像底下这样.

/assist Nebu
/attack

好了,现在我们的MACRO有两行了.这个MACRO的目的是,协助Nebu(指定Nebu的敌人),然后攻击.

那么现在让我们写一个很简单以及实用的MACRO.加设Nebu是一个牧师,我们要帮Nebu写一个自动帮自己使用基本治疗的MACRO.

/target Nebu
/cast Lesser Heal(Rank 1)

以上的MACRO在执行的时候,每次都会选择Nebu作为治疗的对象.其中,/target Nebu 是选择Nebu为对象,/cast Lesser Heal(Rank 1)是对于对象施展Lesser Heal第一级的法术.

我想以上的例子因该已经很清楚的解释了基本的MACRO该如何使用.可是在在"魔兽台湾"的网页里也有提到:

宏的限制
宏是有长度限制的,如果你的信息太长了,就缩减一些!(显然)

这一点是没有错的,因为WOW的MACRO有255个英文字元的限制.我们该如何突破这个限制呢?

首先让我们先了解一下WOW的官方斜线指令.

上面那些MACRO里所用到的斜线指令,其实背后都有呼叫一些核心指令.例如:

/assist Nebu 呼叫了 AssistUnit("Nebu")
/attack 呼叫了 Attack("Target")
/target Nebu 呼叫了 TargetByName("Nebu")
/cast Lesser Heal(Rank 1) 呼叫了 CastSpellByName("Lesser Heal(Rank 1)")

这些核心指令除了可以使用官方的斜线指令来呼叫之外,我们还有其他几种方式来使用这些核心指令.

第一种方式,直接在MACRO里使用这些核心指令.要直接使用这些核心指令,我们必须用到一个斜线指令叫做/Script.

以下是把上面的MACRO例子改成使用核心指令的方式.
第一个MACRO 帮助Nebu攻击敌人
/Script AssistUnit("Nebu");
/Script Attack("Target");
第二个MACRO选择Nebu作为治疗的对象
/Script TargetByName("Nebu");
/Script CastSpellByName("Lesser Heal(Rank 1)");


要注意的一点是,当使用了/Script的时候,MACRO的每一行指令都要有";"作为结尾.

直接使用核心指令的好处是什么?因为WOW并没有帮每一个核心指令写对应的斜线指令,而很多的核心指令的功能却是非常强大的.

核心指令除了能直接利用在MACRO之外,另一个用途就是可以使用在模组里面使用.关于使用上的例子,大家可以参考我前几篇文章所提供的猎人辅助模组.在这里我们就可以利用模组所提供的斜线指令来变相的突破了MACRO上面的字元限制了.

希望这一篇文章能更容易的让大家了解斜线指令,核心指令,MACRO,以及模组的用途.

>※littlethe(东周小星星)提到:
>我是个programmer,
>macro在程式中是指巨集指令,
>若我没有弄错的话,
>这个macro是不是用于制定"连续动作"用的?
>
>按个键,
>人物就会做出连续预设动作,
>
>若是这样,
>那wow可还真特别,
>开放玩家编写macro,
>
>等我拿到wow时,
>要好好的来玩看看

恩~没有错喔

可是WOW本身的MACRO有很多的限制.可是如果玩家使用非游戏本身的MACRO来玩WOW,暴风雪就可以砍此玩家的帐号.

WOW本身的MACRO先天上就没有时间的设计.也就是说,MACRO里面所有的动作指令,通通当作及时指令(当然,非常严格的来说还是会有先后顺序上的差别,可是时间上的差别只有不到0.1秒.)这样的设计是避免玩家制作机器人.

另外,WOW很多的技能有冷却时间,如果把多个有冷却时间的技能写入MACRO,那么MACRO只会执行第一个达到条件的技能,其他有冷却时间的技能都会被忽略.
>※littlethe(东周小星星)提到:
>虾米??
>那这样的话,
>那岂不就不能使用连续法术了?
>法术也有cast time不是么?
>还是wow的法术都是direct的?
>哇累…
>本来想说能不能来个先闪电再插补血丈后嗜血之类的


WOW的技能大约能分为三种,即时的,有冷却时间的,需要施展时间的.

即时的就是可以一直连续使用.

有冷却时间的就是在使用过后,有一个时间限制是不能使用同一招.另外,使用这种技能之后,还会有大约不到一秒的时间无法使用任何其他的技能.

需要施展时间的,当使用的时候,在技能完全施展之前,无法使用任何其他的技能,除非先取消掉.

所以只要是有被时间限制上的技能,在MACRO里,就只有一个可以被驱动,而且最好是摆在MACRO的最后一行.如果摆在太前面,那么很可能就会使得后面的即时技能被挡掉.

>※willllee(balmung)提到:
>那可以用macro来配合其他程式吗?


使用任何不是魔兽纪元本身所提供的功能来执行游戏,都违反了魔兽纪元的使用条约.所以我无法在这里回答您所提出的其他的相关问题.


但是有一点可以确定的是,魔兽纪元所提供的核心指令,已经可以做出广大的环境判断了.包括判定血量多少,队友以及其宠物的状态,敌人的状态,等等.

目前官方论坛上已经有很多的模组能提供类似的功能.包括当自身血量低于某百分比,执行动作的时候,会先帮自己补血(魔法或是物件,取决于是否在战斗中),以及根据队友的血量百分比来决定宠物会先帮助哪个队友攻击.

如果有兴趣的网友,甚至可以写出根据敌人的状态做出不同的攻击或是反应的模组.

基本上,这些都可以只用到核心指令来达到的.

 

魔法师的生活到处充斥着羊皮纸和药水瓶,还有小妖精时不时来媚惑我~
 
 
 
 
     
 
昵称: mwxp
积分: 111
来自: 
称号: 勇者
状态: 离线

2005-4-3 18:23:22
 
 【第5楼】 mwxp 标题  
 
 
 
看不懂……


 

 
 
 
 
     
 
昵称: momoteacg
积分: 1079
来自: China
称号: 游侠
状态: 离线

2005-4-3 18:23:48
 
 【第6楼】 momoteacg 标题  
 
 
 
Commands and emotions

1. 常用指令

2. 队长指令

3. 聊天指令

4. 聊天频道指令

5. 公会指令

6. 表情指令

1. 常用指令

/help
列出常用指令帮助
/assist [名字]
协助你当前所选择的目标,或者指定的目标
/cast spell
施放指定的法术,可以包含法术的等级。比如: "/cast Slow Fall", "/cast Polymorph(Rank 2)"
/afk [文字]
开启AFK模式显示你要离开一会儿,再输一次/afk关闭AFK模式。
/combatlog
导出你的战斗信息到(wow目录)LogsPlayerCombatLog.txt 文件里。
/dnd [文字]
开启DND模式表示“请勿打扰”,再输一次/dnd关闭DND模式。
/duel [名字]
要求与你锁定的目标决斗,或者要求与指定的目标决斗。
/yield
(/forfeit) 在决斗时投降。
/emote 文字
(/em, /me) 表示接下来的文字是动作。
/exit
退出游戏。
/follow
(/f) 自动跟随当前目标。
/ignore 名字
忽略目标玩家。
/inspect
(/ins) 查看目标玩家的装备。
/logout
(/camp) 坐下并且登出。
/macro
打开宏设置界面。
/macrohelp
给出关于设置宏的帮助。
/played
显示你游戏人物的在线时间。
/pvp
在接下来的5分钟内开启PVP模式。
/raid 文字
(/r) 在RAID频道里说话。
/random 数字 [数字2]
(/rnd, /rand) 扔出一个从1到某个数字范围内的随机数字,或者是两个数字范围之间的随机数字。
/remfriend 名字
(/removefriend) 把一个好友从你的好友列表里去掉。
/split 数量
把一部分的钱平均分给你的队友。
/target 名字
(/tar) 从当前目标转向你所指定的玩家。
/time
显示当前游戏的服务器时间。
/trade
(/tr) 与当前选择的目标交易
/who [文字[ 文字2...]] [数字[-数字2]] [r-"种族"] [c-"职业"] [z-"区域"] [g-"公会"]
如果没有添加任何后缀的话,列出在当前区域与你等级相近的所有在线玩家。文字指定玩家的名字,公会,职业,种族或者所在的区域;数字表示指定列出玩家的等级范围。
/bug
提交出错报告。
/suggest
提交建议。
/note 文字
提交一条信息。
/script LUA-command
用于UI设计者。
/console command
用于一些游戏的内部指令,比如"gxrestart", "reloadui" and "quit".
/console 设置名 [新设置]
用于调整游戏设置。

2.队长指令

/invite [名字]
(/inv) 邀请目标玩家到你的队伍里。
/uninvite [名字]
(/un) 从你的队伍里移除目标玩家。
/ffa
把掠夺方式设置成“自由掠夺”。
/master [名字]
指定目标玩家在“计划分配”的掠夺方式中担当分配者。
/roundrobin
把掠夺方式设置成”轮流掠夺“。

3. 聊天指令

/guild 文字
(/g) 在公会频道内说话。
/party 文字
(/p) 在队伍频道内说话。
/reply 文字
(/r, R) 回复最后一个玩家给你的密语。
/say 文字
(/s) 跟周围的玩家说话。
/yell 文字
(/shout) 喊叫(比/say传的距离要远)
/whisper 名字 信息
(/w, /tell) 给目标玩家密语。

播放一段声音!每种语音都有两到三种变化。而且你的角色不同,语音也不一样。
/v help
/v inc
/v charge
/v flee
/v attack
/v oom
/v fol
/v wait
/v heal
/v cheer
/v fire
/v rasp

4. 聊天频道指令

/chat
(/chathelp) 列出聊天指令。
/join 频道 [密码]
(/chan, /channel) 加入(或者创建)一个特殊聊天频道。
/leave 频道|#
(/chatleave, /chatexit) 离开这个特殊聊天频道,或者离开指定号码的聊天频道。
/# 文字
(/c, /csay) 在聊天频道内说话,#表示所要说话的频道号码。
/announcements 频道|#
(/ann) 开启/关闭指定聊天频道的公告。
/ban 频道|# 名字
禁止目标玩家进入指定的频道。
/unban 频道|# 名字
解除目标玩家的禁令。
/chatlist
(/chatwho, /chatinfo) 列出所有的聊天频道和他们的号码。
/chatinvite 频道|# 名字
(/cinvite) 邀请目标玩家到一个指令的聊天频道里。
/ckick 频道|# 名字
把目标玩家从指定频道中踢出去。
/moderator 频道|# 名字
(/mod) 把目标玩家设成指定聊天频道的管理员。
/unmoderator 频道|# 名字
(/unmod) 解除目标玩家在指定聊天频道里的管理员身份。
/moderate 频道|#
开启指定聊天频道的管理模式。
/mute 频道|# 名字
(/squelch, /unvoice) 把目标玩家在指定的聊天频道里禁言。
/unmute 频道|# 名字
(/unsquelch, /voice) 解除目标玩家在指定的聊天频道里的禁言。
/password 频道|# [密码]
(/pass) 设置,改变或者去除聊天频道的密码。
/owner 频道|# [名字]
显示或者改变所建立的聊天频道名字。

5. 公会指令

/ginfo
给出关于你的公会的基本信息。
/g 文字
(/guild) 在公会频道里说话
/o 文字
对所有公会里的管理员说话。
/ginvite 名字
(/guildinvite) 邀请目标玩家加入到你的公会里。
/gremove 名字
(/guildremove) 从你的公会里移除目标玩家。
/gpromote 名字
(/guildpromote) 提升在你公会里的目标玩家公会等级。
/gdemote 名字
(/guilddemote) 降低在你公会里的目标玩家公会等级。
/gmotd 信息
(/guildmotd) 设置今天的公会公告。
/gquit
(/guildquit) 离开你的公会。
/groster
(/guildroster) 给出整个公会成员的列表(只限管理员和会长使用)。
/gleader name
(/guildleader) 把目标玩家设为会长(只限会长使用)。
/gdisband
(/guilddisband) 解散公会(只限会长使用)。

1. 表情指令

/Agree (同意)
/Amaze (吃惊)
/Angry (愤怒)
/Apology (道歉)
/Applaud (喝彩)
/Bashful (害羞)
/Beckon (招手)
/Beg (跪求)
/Bite (啃咬)
/Bleed (流血)
/Blink (眨眼)
/Bush (埋伏)
/Bonk (巨响)
/Bored (无聊)
/Bounce (蹦跳)
/Brb (即回)
/Boggle (犹豫)
/Bow (鞠躬)
/Burp (打嗝)
/Bye (再见)
/Cackle (尖笑)
/Calm (平静)
/Cheer (欢呼)
/Chicken (小鸡)
/Chuckle (轻笑)
/Clap (鼓掌)
/Cold (冷酷)
/Comfort (安慰)
/Confused (迷惑)
/Congratulate (恭喜)
/Cough (咳嗽)
/Cower (胆怯)
/Crack (响指)
/Cringe (畏缩)
/Cry (哭泣)
/Cuddle (拥抱)
/Curious (好奇)
/Curtsey (行礼)
/Dance (跳舞)
/Drink (喝酒)
/Drool (口水)
/Duck (闪避)
/Eat (进食)
/Eye (鸡眼)
/Fart (放屁)
/Fidget (烦躁)
/Flex (肌肉)
/Frown (皱眉)
/Gasp (喘气)
/Gaze (凝视)
/Giggle (傻笑)
/Glare (怒视)
/Gloat (得意)
/Greet (问候)
/Grin (嬉笑)
/Groan (呻吟)
/Grovel (曲膝)
/Guffaw (狂笑)
/Hail (致敬)
/Happy (欢乐)
/Hello (哈罗)
/Hug (紧拥)
/Hungry (饥饿)
/Insult (侮辱)
/Introduce (介绍)
/Jk (玩笑)
/Kiss (飞吻)
/Kneel (跪拜)
/Laugh (大笑)
/Laydown (躺下)
/Lick (添舌)
/Listen (聆听)
/Lock (上锁)
/Massage (按摩)
/Moan (呜咽)
/Moon (裸臀)
/Mourn (哀悼)
/No (否定)
/Nod (点头)
/Nosepick (挖鼻)
/Panic (恐慌)
/Peer (偷窥)
/Plead (恳求)
/Point (指点)
/Poke (手戳)
/Ponder (沉思)
/Pounce (突袭)
/Play (游戏)
/Praise (赞美)
/Purr (猫叫)
/Puzzle (为难)
/Raise (举手)
/Ready (就绪)
/Roar (怒吼)
/Rofl (爆笑)
/Rude (粗鲁)
/Salute (敬礼)
/Scratch (抓痒)
/Sexy (性感)
/Shake (颤抖)
/Shimmy (摆动)
/Shiver (打颤)
/Shoo (驱赶)
/Shout (呼喊)
/Shrug (耸肩)
/Shy (害羞)
/Sigh (叹息)
/Sit (坐下)
/Slap (耳光)
/Sleep (睡觉)
/Smirk (假笑)
/Smile (微笑)
/Snarl (怒骂)
/Sniff (吸气)
/Snicker (窃笑)
/Snub (斥责)
/Sooth (抚慰)
/Spit (吐出)
/Stand (站立)
/Stare (盯视)
/Stink (臭味)
/Surprised (惊讶)
/Surrender (投降)
/Talk (谈话)
/Talkex (兴奋)
/Talkq (彷徨)
/Taunt (嘲弄)
/Tap (轻拍)
/Tease (挑逗)
/Thank (感谢)
/Thirsty (口渴)
/Threaten (恐吓)
/Tickle (挠痒)
/Tired (疲倦)
/Veto (否决)
/Victory (胜利)
/Violin (提琴)
/Wave (挥手)
/Welcome (欢迎)
/Whine (牢骚)
/Whistle (口哨)
/Work (工作)
/Yawn (呵欠)

 

魔法师的生活到处充斥着羊皮纸和药水瓶,还有小妖精时不时来媚惑我~
 
 
 
 
     
 
昵称: momoteacg
积分: 1079
来自: China
称号: 游侠
状态: 离线

2005-4-3 18:24:13
 
 【第7楼】 momoteacg 标题  
 
 
 
[译]德鲁伊的宏

原作者:Ashnod
翻译:Cyril

版本更新:Hiu (3月9日)
原帖地址:美国官方论坛德鲁伊职业讨论区,点击浏览
————————————————————————————

随着你的德鲁伊等级增加就会发现,高级的状态魔法不能用于低级的玩家,或者你需要节省魔法值来应付一些特别的情况。虽然现在有插件可以实现这个目的,但是这篇文章主要是为了那些不喜欢插件而想用简单的宏命令来实现魔法效用最大化的玩家。

如何设置宏

输入/macro
按“新建”
起个名字
选个图标
如果你打开了这篇文章,你就可以高亮一个下面的模版,拷贝—粘贴到宏命令框里,然后替换变量。要多加东西就随便你啦
你的宏建好后,就可以通过把图标拉到快捷栏或者用/macro <宏名字>来使用它。

关键词

Spell_Rank = 你目前魔法或技能的最高等级,用数字来替换
Spell_Name = 魔法的全称


月之火(把Spell_Rank替换为你目前拥有的最高等级):

/script r=Spell_Rank; if (UnitName("target") ~=nil) and (string.find(UnitName("target"),"Totem"))~=nil then CastSpellByName("Moonfire(Rank 1)") else CastSpellByName("Moonfire(Rank "..r..")"); end

60级德鲁伊的例子:

/script r=10; if (UnitName("target") ~=nil) and (string.find(UnitName("target"),"Totemf"))~=nil then CastSpellByName("Moonfire(Rank 1)") else CastSpellByName("Moonfire(Rank "..r..")"); end

另一个月之火的宏(图腾破坏,作者Darke):

/target First 5-10 characters of Totem name

/target First 5-10 characters of Totem name

/target First 5-10 characters of Totem name

/target First 5-10 characters of Totem name

/cast Moonfire(Rank 1)


图腾名称列表(译注:来自原文的回帖部分)

– Air
"Nature Resistance Totem",
"Windwall Totem",
"Windfury Totem",
"Grace of Air Totem",
"Grounding Totem"

– Earth
"Stoneclaw Totem",
"Earthbind Totem",
"Tremor Totem",
"Strength of Earth Totem",
"Stoneskin Totem"

– Water
"Fire Resistance Totem",
"Poison Cleansing Totem",
"Disease Cleansing Totem",
"Healing Stream Totem",
"Mana Spring Totem"

– Fire
"Frost Resistance Totem",
"Flametongue Totem",
"Magma Totem",
"Fire Nova Totem",
"Searing Totem"

(译注:前一个宏是如果目标名字是图腾,那么放出来的魔法就是1级的月之火;不是图腾就放7级的月之火。后一个宏是自动选择一个图腾并释放1级月之火。当然如果用汉语客户端,就要把英文名字相应的换为中文名字,下同)

野性印记:

/script r=Spell_Rank;l={1,10,20,30,40,50,60};if not UnitIsFriend("player","target")then TargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) then CastSpellByName("Mark of The Wild(Rank "..i..")");break;end;end


60级德鲁伊的例子:

/script r=7;l={1,10,20,30,40,50,60};if not UnitIsFriend("player","target")then TargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) then CastSpellByName("Mark of The Wild(Rank "..i..")");break;end;end


荆棘:

/script r=Spell_Rank;l={6,14,24,34,44,54};if not UnitIsFriend("player","target")then TargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) then CastSpellByName("Thorns(Rank "..i..")");break;end;end


60级德鲁伊的例子:

/script r=6;l={6,14,24,34,44,54};if not UnitIsFriend("player","target")then TargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) then CastSpellByName("Thorns(Rank "..i..")");break;end;end


愈合:

/script r=Spell_Rank;l={12,18,24,30,36,42,48,54,60};if not UnitIsFriend("player","target")then TargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) then CastSpellByName("Regrowth(Rank "..i..")");break;end;end;TargetLastEnemy();


60级德鲁伊的例子:

/script r=9;l={12,18,24,30,36,42,48,54,60};if not UnitIsFriend("player","target")then TargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) then CastSpellByName("Regrowth(Rank "..i..")");break;end;end;TargetLastEnemy();


回春:

/script r=Spell_Rank;l={4,10,16,22,28,34,40,46,52,58};if not UnitIsFriend("player","target")then TargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) then CastSpellByName("Rejuvenation(Rank "..i..")");break;end;end;TargetLastEnemy();


60级德鲁伊的例子:

/script r=10;l={4,10,16,22,28,34,40,46,52,58};if not UnitIsFriend("player","target")then TargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) then CastSpellByName("Rejuvenation(Rank "..i..")");break;end;end;TargetLastEnemy();

聚精: Innervate (来自Arkturus的回帖)

/script x=UnitClass("target");if (not UnitIsFriend("player","target") or (UnitManaMax("target")<200 and x~="Druid")) then TargetUnit("player");end;CastSpellByName("Innervate");TargetLastEnemy();

Arkturus回复: 这个宏会检测你的当前目标,如果是敌人或者没有魔法条的盟友,它就会施法在你自己身上,否则会施法到指定的目标上.


疗伤之触(现在只能对队友使用)

这个魔法不受等级限制,但是魔法值的控制很重要。

没有“自然的礼物”天赋(引自thottbot):

/script r=Spell_Rank;H=UnitHealthMax("target")-UnitHealth("target");S="Healing Touch(Rank ";SR={0,87,194,362,571,741,935,1198,1515,1889};for i=r,1,-1 do if (H>SR) then CastSpellByName(S..i..")");break;end;end;TargetLastEnemy();


有“自然的礼物”天赋(只适用46级德鲁伊):

/script r=Spell_Rank;H=UnitHealthMax("target")-UnitHealth("target");S="Healing Touch(Rank ";SR={41,98,213,394,617,799,1005,1269};for i=r,1,-1 do if (H>SR) then CastSpellByName(S..i..")");break;end;end;TargetLastEnemy();


自然之速+疗伤之触(需要cosmos。新版本里被取消,效果需要测试):

/script TargetByName("name");
/script CastSpellByName("Nature’s Swiftness");
/in 1 /script CastSpellByName("Healing Touch(Rank Max_Spell_Rank)");

45级德鲁伊的例子(译注:就是作者自己把名字Ashnod替换成你自己的名字就对了):

/script TargetByName("Ashnod");
/script CastSpellByName("Nature’s Swiftness");
/in 1 /script CastSpellByName("Healing Touch(Rank 8)");

自我施法的宏:

/script r=Spell_Rank;TargetByName("name");CastSpellByName("Spell_Name(Rank "..r..")");TargetLastEnemy();


疗毒、抗毒和祛除诅咒:

/script TargetByName("name");CastSpellByName("Spell_Name")");TargetLastEnemy();

附上面部分宏指令的解释(Hiu有空再翻译)

Little lesson on how the above macros work

I got a small scripting lesson myself while doing these macros so I thought I’d share and try my best to explain what is being achieved. I will warn you that this is by no means easy if you have no programming experience. So be patient and slowly figure it out.

Going to use one of the macros as an example and break it down based on complexity. I am using the word ‘letters’ instead of ‘variables’(programming term for assingned values) –

/script r=7; -> The letter ‘r’ is being assigned your highest ranked spell # for whatever spell this macro is being used for

l={1,10,20,30,40,50,60}; -> These are the character levels you receive a higher rank of the same spell. This is basically caled an ‘array’.

if not UnitIsFriend("player","target")then TargetUnit("player");end; -> This checks if there is a target or if the target selected is a friend. If there is no target selected or the target is not a friend then it selects you as the target.

t=UnitLevel("target"); -> The letter t is being assigned your targets character level i.e. say he/she is level 35, then t=35.

Heres is the most confusing part, so I will have to break this statement further –

for i=r,1,-1 -> To explain what the letter i is doing, heres the syntax

i=(Highest Ranked Spell#),(Lowest Ranked Spell#),(What value should be decreased from the Highest Ranked Spell# to reach the Lowest Ranked Spell#)

do if (t>=l-10) -> This is dependent on the letter ‘i’. To explain what ‘l-10′ is doing –

l={1,10,20,30,40,50,60}

i=7,1,-1

If you count the number of values after ‘l’, from left to right, there are 7 of them. So what this does is

- When i=7 -> l=60

- When i=3 -> l=20

So if ‘t’ is greater than or equal to ‘l’-10 then it picks whatever the value of ‘i’ is at that point. So say t=25 then it is greater than l=20 and this corresponds to i=3(based on example above)

then CastSpellByName("Mark of The Wild(Rank "..i..")");break;end;end -> This is basically casts the spell and the rank is decided from what the value of ‘i’ is from the above equation.

So basically, the player is targeting the recipient, then hitting the hot key that determines what level the player is, chooses the right level spell, and casts it. Also if there is no target selected it will cast the spell on you. So no need to select yourself and then hit the key, just hit the key and boom, its cast on you.

Phew!! I think I made it more confusing…….. :(

NOTE: I wanted to thank all of those who have been contributing to this thread and based on your posts/suggestions, I will try to improve the macros. Post your own macros as it will do nothing but benefit the druid community.

 

魔法师的生活到处充斥着羊皮纸和药水瓶,还有小妖精时不时来媚惑我~
 
 
 
 
     
 
昵称: momoteacg
积分: 1079
来自: China
称号: 游侠
状态: 离线

2005-4-3 18:24:37
 
 【第8楼】 momoteacg 标题  
 
 
 
猎人常用宏

整理:archonx


BLZ论坛上有篇原文找我不到了 T_T
参考了1One_Year和ckone的帖子,整理了一些猎人常用的简单的宏。其实宏是个很灵活的工具,好用的宏远远不止下面这些,希望高手们多多补充,众人拾柴火焰高。
另外以下的宏并没有全部经过测试,如果有朋友发现错误也请即时指出。

基础知识简单说下。输入/macro或者在ESC菜单里选macro都可以打开宏的窗口,点New新建一个宏,你可以看见许多图标,选个自己喜欢的图标再起个名字,然后在文本里输入宏的内容,点Complete完成。现在,你就可以把这个图标拖到技能栏里使用了。

—————————————使用物品—————————————
1-自动喂食
下面这个宏会先判断玩家是否处于战斗之中。如对应的格子中没有食物,则会打开相应的背包。
/script if (not PlayerFrame.inCombat) then if (not
GetContainerItemLink(X, Y)) then OpenBag(X); else CastSpellByName("Feed Pet"); PickupContainerItem(X, Y); end end

X/Y分别是包和格子的编号。
5个背包按照排列位置编号如下:
[4][3][2][1][0]

16格包的格子编号如下:
[ 1][ 2][ 3][ 4]
[ 5][ 6][ 7][ 8]
[ 9][10][11][12]
[13][14][15][16]

2-绷带
如果你当前选择的目标是可以对其使用绷带的友好单位的话,则对其使用绷带。
如当前目标是不能被打绷带的单位,或没有选择任何目标的话,则对自己使用绷带。
而且不会对当前目标进行切换,不会中断对当前敌人的攻击。
/script UseContainerItem(X,Y)
/script SpellCastTarget("player")

将第一行换成/script UseAction(25,0,1),则不需将绷带放在背包特定位置,但必须将绷带拖入技能栏的特定位置。25表示技能栏的编号。第一排第一格编号为1,最后一格为12。第二排第一格编号为13,最后一格为24。以此类推。25表示第三排的第一格。

此宏也还有如下的实现方法:
/script UseContainerItem(0,1)
/script if ( SpellIsTargeting() ) then TargetUnit("player"); end

如果想在任何条件下都只对自己使用绷带的话,用如下的宏:
/target "player"
/script UseContainerItem(X,Y)
/script TargetLastEnemy()
同样,这个宏会切换当前目标,中断攻击,盗贼的连击点也会被清空。

下面这个宏也只对自己使用绷带,但在使用后会切换回先前的目标(不管是敌对中立还是友好的)。
/script p="player";t="target";if(not UnitCanAttack(t, p))then ot=UnitName(t);TargetUnit(p);else ot=nil;end;
UseAction(ActionID);if(SpellIsTargeting()) then SpellTargetUnit(p); end if(ot) then TargetByName(ot);end

—————————————更换武器—————————————
MainhandBag:备用主手武器存放背包编号
MainhandBagSlot:备用主手武器存放格子编号
OffhandBag:备用副手武器存放背包编号
OffhandBagSlot:备用副手武器存放格子编号
TwohandsBag:备用双手武器存放背包编号
TwohandsBagSlot:备用双手武器存放格子编号

双手武器 -> (主手武器+副手物品)
/script PickupContainerItem(MainhandBag, MainhandBagSlot)
/script PickupInventoryItem(16)
/script PickupContainerItem(TwohandsBag, TwohandsBagSlot)
/script PickupContainerItem(OffhandBag, OffhandBagSlot)
/script PickupInventoryItem(17)

(主手武器+副手物品) -> 双手武器
/script PickupInventoryItem(17)
/script PickupContainerItem(OffhandBag, OffhandBagSlot)
/script PickupContainerItem(TwohandsBag, TwohandsBagSlot)
/script PickupInventoryItem(16)
/script PickupContainerItem(MainhandBag, MainhandBagSlot)

注意以上几个宏使用之时,鼠标上不要拖有物品,否则会出错。如要避免,可以使用CursorHasItem()来进行预判断。参看下面的几个宏:

单主手武器或双手武器 -> (主手武器+副手物品)
/script if ( not CursorHasItem() ) then PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(mainhandBag, mainhandBagSlot); PickupContainerItem(offhandBag, offhandBagSlot); PickupInventoryItem(17); if ( CursorHasItem() ) then PickupContainerItem(offhandBag, offhandBagSlot); end end

(主手武器+副手物品)-> 单主手武器或双手武器
/script if ( not CursorHasItem() ) then PickupInventoryItem(17); if ( CursorHasItem() ) then PickupContainerItem(offhandBag, offhandBagSlot); end PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(mainhandBag, mainhandBagSlot); end

—————————————自动切换守护—————————————
注意:你必须已经打开了某个守护,这样下面的宏才能生效
1-肉搏战和猴之守护
可以代替默认的attack,如果你没开猴之守护宏会帮你打开。
/script if (not string.find(UnitBuff("player", 1), "Mon")) then CastSpellByName("Aspect of the Monkey"); end
/script if (not PlayerFrame.inCombat) then CastSpellByName("Attack"); end

2-自动射击和鹰之守护
可以取代默认的auto shot,如果你没开鹰之守护宏会帮你打开。
/cast Auto Shot
/script if (not string.find(UnitBuff("player", 1), "Raven")) then CastSpellByName("Aspect of the Hawk(Rank X)"); end
因为游戏中延时的问题,采用这种先射击再开守护的方法比较好
Rank X中的X是你所使用的鹰之守护 等级

3-瞄准射击(也包括其他瞬发的射击)和鹰之守护
可以取代默认的瞄准射击,如果没有开鹰之守护宏会帮你打开。
/script if (not string.find(UnitBuff("player", 1), "Raven")) then CastSpellByName("Aspect of the Hawk(Rank X)"); else CastSpellByName("Aimed Shot(Rank Y)"); end
X是鹰之守护的等级,Y是射击技能的等级
注意,这个宏无法让你判断目标是否超出了射程,因为这个宏的图标不会因超出射程而变红,用瞄准射击的时候要多加注意。而且这个宏的图标也无法反映出射击技能的冷却时间,所以推荐在宏当中使用那些无冷却时间的射击。
参照这个宏,也可以把上面的猴之守护和猛禽攻击(Raptor Strike)或者翅夹(Wing Clip)结合起来——同样要注意它无法反映猛禽攻击的冷却时间。

—————————————pet的控制—————————————
1-放猎人标记并命令pet攻击目标。
/cast Hunter’s Mark(Rank X)
/script PetAttack()

2-放mark并且pet跟随,副本用的宏。
/cast Hunter’s Mark(Rank X)
/script PetFollow()

3-选择一个队员然后使用宏,自动选择该队员的目标,对目标放mark,pet攻击目标,然后开始autoshot。
/script if (UnitIsFriend("player","target")) then AssistUnit("target"); end
/cast Hunter’s Mark(Rank X)
/script PetAttack()
/script if(not PlayerFrame.inCombat) then CastSpellByName("Auto Shot"); end
注意你开始所选择的目标必须是友好的。

4-散射并招回pet,以免pet继续攻击使敌人脱离散射的效果。
/script PetFollow()
/Cast Scatter Shot()

—————————————影遁(NE专用)—————————————
1-影遁的同时躺下,更难被发现……
/cast Shadowmeld(Racial)
/laydown

2-吃喝的同时也影遁-_-
/target "player"
/script UseContainerItem(X, Y);
/script UseContainerItem(X, Y);
/cast Shadowmeld(Racial)


友情提醒:由于游戏中宏面板的换行问题,如果复制/粘贴的宏无法正常工作,请在游戏中自行输入。

 

魔法师的生活到处充斥着羊皮纸和药水瓶,还有小妖精时不时来媚惑我~
 
 
 
 
     
 
昵称: momoteacg
积分: 1079
来自: China
称号: 游侠
状态: 离线

2005-4-3 18:25:10
 
 【第9楼】 momoteacg 标题  
 
 
 
关于WOW的一些计算

一、攻击力(Attack Power,简称AP)的计算公式:
Warrior/Paladin:AP=角色等级*3+力量*2-20
Hunter/Rogue:AP=角色等级*2+力量+敏捷-20
Shaman:AP=角色等级*2+力量*2-20
Druid:AP=力量*2-20
Mage/Priest/Warlock:AP=力量-10

角色DPS=AP/14+武器DPS
单次攻击伤害(最小/最大)=攻击速度*AP/14+武器伤害(最小/最大)+技能附加伤害

 

二、防御力(Armor)的计算公式:
1敏捷(Agilty)=2Armor
Armor减少伤害%=0.75%*防御力/(攻击方等级+9)
例:防御力5000的角色, 被61级敌人攻击时,可以减少伤害0.75%*5000/(61+9)=53.6%
被51级敌人攻击时,可以减少伤害0.75%*5000/(51+9)=62.5%
伤害减小值的封顶值是75%,这时角色的防御力为100*(敌人等级+9),也就是说杀62级敌人时防御要在7100以上才能达到封顶效果。我不知道现在最高防御能达到多少,但在绝大多数情况下,杀同等级敌人是不可能达到封顶值的。

 

三、敏捷对物理攻击重击(crit)、闪避(Dodge)几率影响的计算公式:
在不计装备和天赋影响的情况下,重击和闪避几率受以下因素影响:

1.重击/闪避的基础值和变化值
角色的重击/闪避几率中,有一部分是不受敏捷影响的(这里称为基础值),另外一部分受敏捷影响(这里称为变化值)。
角色重击/闪避的计算公式为:基础值+变化值*角色的敏捷/敏捷标准值。
对一般的职业来说,当角色敏捷等于标准值的时候,重击/闪避几率为5%。也就是说基础值+变化值=5%。变化值越高表示敏捷对这个职业的影响越大。
敏捷标准值是与等级和职业相关的一个参数。1级时一般职业的标准值为20,盗贼和猎人为23。60级的时候战士敏捷标准值100,即敏捷100时重击/闪避几率为5%。
敏捷标准值似乎没有计算公式,是通过查表获得的,也可以自己推算,我在后面会附上算法,大家有兴趣可以自己计算。

各个职业的重击/闪避基础值和变化值:
Rogue:重击基础值0%,变化值10%;闪避基础值0%,变化值20%
Hunter:重击基础值0%,变化值5%;闪避基础值0%,变化值10%
Warrior:基础值0%,变化值5%
Paladin:基础值0.7%,变化值4.3%
Druid:基础值0.9%,变化值4.1%
Shaman:基础值1.7%,变化值3.3%
Warlock:基础值2%,变化值3%
Priest:基础值3%,变化值2%
Mage:基础值3.2%,变化值1.8%

2.角色的武器技能等级(熟练度)和防御技能等级
即属性栏里显示的attack和defense。其中attack影响角色重击几率,defense影响角色闪避几率。具体来说就是重击/闪避受一个(attack(或defense)*0.04-等级/5)%的修正。
大家知道角色每升一级attack/defense上限会增加5级,正好和等级/5抵消,也就是说如果把attack/defense修满,重击/闪避几率就不受任何惩罚,如果没有修满,则每差一个等级减少0.04%的重击/闪避几率.。反之如果通过装备把attack/defense加的超过上限就会有额外奖励。

例:一个60级战士,敏捷90,defense330级,那么他的闪避为0+5%*90/100+(330*0.04-60/5)%=5.7%

 

四、格挡几率(Block)和招架几率(Parry)
基本几率5%,受防御技能(defense)的影响,每级防御技能增加0.04%格挡/招架几率。或者说同闪避一样受(defense*0.04-等级/5)%的修正

五、角色敏捷标准值的算法
首先注意把与重击/闪避或者防御技能相关的装备都拿掉,最好不要加任何天赋,战士不能出于,以免引起混乱。
记录敏捷值A和闪避/重击几率D。将attack/defense对D值的修正还原,如你的角色武器技能差N级达到上限,就在D上加N*0.04%。
敏捷标准值=敏捷A/(1+(闪避或重击几率D值-5%)/闪避或重击变化值)
最后,可以更换一下敏捷装备,使敏捷发生变化,再根据上面给的公式检验一下计算结果是否正确。
重击几率可以在角色的基本技能“Attack”上查看,闪避几率可以在角色的基本技能“Dodge”上查看

六、属性资料

力量 增加近战武器的攻击能量。

   增加盾牌格挡的伤害数量。

   力量根本不影响重击的几率。

   力量不增加格挡几率,但增加格档成功后的格挡数量,部分由力量决定(另一部分由盾牌决定)。

   除盗贼和猎人外的其他职业,DPS完全取决于力量。

敏捷 增加远程武器的攻击能量。

   增加护甲。

   增加武器的重击产生几率。

   增加闪躲攻击的几率。

   盗贼比其他职业敏捷增加的闪躲更多。

   猎人和盗贼:增加近战武器的攻击能量。敏捷将影响盗贼和猎人50%的DPS,力量影响50%。

   增加盗贼的重击产生几率。

耐力 影响生命值

智力 增加法力值。

   增加法术的重击产生几率。

   增加武器技能的学习速度。

精神 增加生命值和法力值的恢复速度。

   精神影响所有人物的法力值和生命值恢复速度,无论是在战斗之中或者是在战斗之外。

   精神也增加武器特性的激发几率。


玩家不能修改角色的初始屬性,在每升一级后,屬性会自動增加,
所有种族都有100点基本属性,
所有新创建角色的角色都有105点屬性。

角色初始屬性
   人类 精灵 矮人 侏儒 兽人 牛人 巨魔 不死
力量 20 16 22 15 23 25 20 19
敏捷 20 25 17 23 17 16 22 18
耐力 20 18 24 17 22 22 21 21
智力 20 21 18 25 17 16 16 17
精神 20 20 19 20 21 21 21 25

徳鲁依 +1 所有属性
猎人  ??
法师  +3智力 +2精神
圣骑  +2力量 +2耐力 +1精神
牧师  +1耐力 +2智力 +2精神
盗贼  +1力量 +3敏捷 +1耐力
萨满  +1耐力 +2智力 +2精神
朮士  +3智力 +2精神
战士  +3力量 +2耐力

七、关于种族优势的具体值

矮人:
石像形态:激活后免疫毒,疾病和流血,装甲+5%,移动速度降低到70%,持续20秒,2分钟冷却(主动)
枪械专精:枪系技能+5
冰系抗性:冰抗+10
财宝发现:激活后能在小地图上显示宝箱的位置,直到取消,没有冷却(主动)

侏儒:
脱身艺术:使用后可以消除缠根和陷阱效果,1.5秒施展,30秒冷却(主动)
广阔思维:智力+5%
奥术抗性:奥术抗性+10
工程专精:工程学技能+15

人类:
感知:激活后,增加能侦测潜行的范围,持续20秒,2分钟冷却(主动)
人类精神:精神+5%
外交:派别点获取+10%
剑系专精:剑和双手剑技能+5

暗夜精灵:
影遁:增强的潜行,激活后能持续到取消或移动,能与德鲁依和盗贼的潜行叠加。10秒冷却(主动)
灵敏:闪避率+1%
精灵之魂:死后变成一个小精灵,移动速度+50%
自然抗性:自然系抗性+10

兽人:
鲜血狂暴:激活后力量+25%,每3秒损失5%生命,持续20秒(主动)
顽强:抵抗晕眩,击倒效果的几率+25%
命令:宠物的近身伤害+5%
斧系专精:斧系技能+5

牛头人:
战争践踏:使用后能击晕5个周围的敌人2秒,2分钟冷却(主动)
耐久:生命上限+5%[
自然抗性:自然系抗性+10

巨魔:
狂暴:只能在生命值低于20%时激活,增加近身攻击,施法速度25%(主动)
巨魔再生:生命恢复率+10%,战斗中也能以平时的10%的速度恢复
野兽屠杀:对付野兽时的伤害+5%
投掷武器专精:投掷武器技能+5

亡灵:
抛弃意愿:激活后免疫恐惧,睡眠,和诱惑效果20秒,1.5分钟冷却。(主动)
食尸:20秒内生命恢复速度+100%,目标必须是人形,或不死系。
水下呼吸:水下呼吸时间+300%
阴影抗性:阴影系抗性+10

注:未标明主动的为完全的被动技能。

八、种族语言

人类 语言:Common

精灵 语言:Common, Darnassian

矮人 语言:Common, Dwarven

侏儒 语言:Common, Gnomish

兽人 语言:Orcish

牛人 语言:Orcish, Taurahe

巨魔 语言:Orcish, Troll

不死 语言:Orcish

 

魔法师的生活到处充斥着羊皮纸和药水瓶,还有小妖精时不时来媚惑我~
 
 
 
 
     
 
昵称: 遥星
积分: 29
来自: 
称号: 村民
状态: 离线

2005-4-3 18:25:27
 
 【第10楼】 遥星 标题  
 
 
 
技术贴必顶


 

尿得最远,因为我站在巨人的肩上……
 
 
 
     
 
昵称: momoteacg
积分: 1079
来自: China
称号: 游侠
状态: 离线

2005-4-3 18:25:42
 
 【第11楼】 momoteacg 标题  
 
 
 
UI introduction

魔兽世界的UI的初级介绍
作者:嗜血橘子


/玩WOW也有好一段时间了,我先谈谈对WOW的感觉吧,对于WOW的着迷,并不仅仅是建立在游戏的内容和内涵上的.当然我也不是说WOW本身没有意思,WOW的任务系统,经验系统,技能系统,视觉效果,怪物的AI(Artificial Intelligence),游戏的背景等等,和韩国泡菜游戏比起来绝对是一个天上一个地下,另外和他的第一竞争对手EQ,也绝对是能够大脚将其踩得平平的! 说了这么多废话,现在我来说说我最着迷的东东→UI(User Interface),中文翻译过来就是:用户界面.由于Marco是与其紧密相连的,Marco可以简单的看为是最简化最直观的最接近普通玩家的UI了.所以顺带着爱爱Marco好了啦,^_^"/
/想自己编写UI,需要精通XML&Lua俩门语言,特别是Lua.对于我们这种人来说未免有点抢仁锁男了...如果真的想自己弄,就看我前面转的那个帖子吧...那里面介绍的很清楚...说了这么多,那么,这里,从这里开始介绍一些很实用,很常用,也很好用的UI吧.../
/--------------------------------------------------/
/首先介绍的几个是几个功能比较全,而且简单的UI软件,不过缺少一些个性.../
/补充一下,英文都是自己翻译的,不好的不要笑.../

/1/ --COSMOS
这个可以说是UI集合软件中最强大也是最出名的了,它的官方网站是:
http://www.cosmosui.org/
装了这个插件后,需要的功能基本上都有了.
主要功能:
--Extra button bars (up to 60 buttons on the screen at one time!)
/额外的快捷栏(同时最多一屏幕能够摆下60个按键)/
--Increase Quest Text speed
/缩短接任务的时候,那段任务说明的时间/
--Party Quests - share quest lists with your party. (disabled for 4114)
/寻找组队或者是组队任务 - 可以共享任务给自己的队友.(与4114不兼容)/
--Buff Timers
/Buff...(增义魔法?) 有效时间显示/
--Self-casting
/这个...我也不是很清楚.../
--Timers & alerts
/时间显示&闹钟/
--Macro tools
/Marco(宏) 工具/
--Combat statistics
/战斗数据统计/
--Quest Minion tooltip
/小型任务提示器/
--Totem Stomper - cast totems in sets!
/不明白 LOL/
--In-game wanted ads
/还是不明白 LOL&LOL/
--Map Notes - make marks on your world
/地图标签 - 能让你在地图上打上标记,详细说明请看下面的单独插件介绍/
... ...
/COSMOS的控制台里面的设置很多很详细,这是我见过的最多的 - -" 英文不好的,还是离远点的好 f^_^;/

/2/ --CTMod
官方网页:
http://www.ctmod.net/
/由于我自己没用过这个UI,所以不作太多介绍,有兴趣的可以自己去官网看看,装来试试.功能方面应该也差不多,由于也是老字号了,所以品质可以放心./

/3/ --GypsyMod
官方网页:
http://gypsymod.the-mad.net/
/这个和上面两个相比,更显个性,属于合集中的另类吧,就算是你准备自己一个一个的装插件,也最好是装上这个,我就是这么做的.它的介绍在 http://gypsymod.the-mad.net/?id=about 这里说的很清楚,内容比较多,我就不copy过来了,我就用自己简单的语言(我尽量用中文)来说明一下吧./
/GypsyMod分为5个AddOns(理解为 "插件" 不知道是否合适)组成,他们都可以独立的运行,也可以一起运行(原文:...all of which can work alone or integrated.)/
★特色★
--控制界面全部可以自由移动(除了右上角的微缩地图),This includes the player,target,and party bars,the action bar,player buffs,and the casting bar.(比如说人物窗口,目标窗口,队伍窗口,控制台窗口,玩家Buffs(增益魔法)窗口,施法?窗口等).当你拖到自己喜欢的地方摆好后,你还可以锁定他们,不让他们在你的不小心下移动了位置.
--使用GypsyMod包的时候有控制台功能,能提供一些简单的设置让你设置.
--增强的信息显示.比如说Buff的时间长度,队员血量显示等等.
--增加操纵杆(按键)数

★GypsyMod的AddOns介绍★
●Hotbar
--完全摆脱默认操纵杆的框架,凸显个性,一切都是自定义的
--增加按键
... ...
●Unitbars
--主要功能就是能让你拖动你想移动的窗口
... ...
●Buffbar
--自定义的Buff窗口,可移动
... ...
●General
--可以将Lag Meter(就是显示ping值的小灯)移动到小地图的右边
--显示任务等级
--自动删除失败任务
--GypsyMod控制面板
... ...
●Shell
-(这个...我不好怎么解释...)

/GypsyMod!强烈推荐!/

/4/ --Bigfoot
国产的终于来啦~~~
官方网页:
http://www.wowinside.net/
/因为官方主页的介绍都是中文的,我这里就不多做介绍了.Bigfoot适合初学者用,功能简单实用./
主要功能如下:
--额外的快捷栏[SecondaryBar & SideBar]
–屏幕标记[Screen Mark]
–自动换装[Auto Equip]
–物品Buff[Item Buff]
–快速拾取[Quick Loot]
–战斗数据统计[Combat Statistics]
–显示任务等级[Quest Level]
–与商人交易时打开所有背包[Open All Bags]

/5/ –Shell
又是一款国产UI
官方网页:
http://www.wowshell.com/
–AutoRepair :自动修复 功能
–BuffMaster :增益魔法
–Clock : 时钟
–EasyChat : 聊天助手
–Free Bar :自由工具条
–MapInf : 地图坐标
–Quest Log : 任务信息
–Qucik Loot : 快速拾取
–Second Bar : 第二工具栏
–Targetinf : 目标信息
–Tooltip : 提示信息
–ScreenShot : 屏幕截图
–Pop bar: 弹出工具条

/6/ –nurfed
官方网页:
http://www.nurfed.com/
–Description :
–Nurfed Mini UnitBars
–No Gaps in hotbars
–Instant Quest Text
–Quest Levels shown
–Lock for Hotbars and UnitBars
–TimeStamps on chat (adjusts according to clock settings)
–Side and Bottom bars
–CT_Mod Timer
–Autobar
–Buff Timers
–ItemBuff Timers
–Telo’s Clock modified
–Tooltip Anchored on Cursor
–Debuffs and Buffs shown in Party Window
–EasyMail
–Gatherer
–MapNotes
–ShardCount

/这个UI还是很不错的,各方面的反映都很不错,功能也很强大!比较推荐!/

/7/ –Ultimate UI
官方主页:
http://www.nathanmx.com/
/它最大的特色就是让COSMOS和GypsyMod更好的兼容,并很好的融合在一起,各补所短,喜欢COSMOS的强大功能和GypsyMod的个性化的人,我强烈推荐使用这个!/
–Advanced Chat Options – Helps change chat position if there’s bars in the way, etc
–AlarmClock – Allows players to create and in game alarm clock/time reminder
–All In One Inventory – Make all your bags into one bag, for easier searching, etc
–AltSelfCast – allows the use of certain keys such as alt or ctrl to auto cast spells on thyself
–Auctioneer – Shows auction price on items when they are picked up
–BetterKeyBinding – Easier way to implement key bindings for everything
–BibDragBars – Allows for the dragging of the minimap and other elements
–Census – Allows the user to take a census of their server
–ChatTimeStamps – Adds chat timestamps to the chat frame
–Clock – Not sure what this does…. but I think it adds a clock… ;)
–CombatCaller – Calls /OOM (out of mana) or /heal (heal me!) automatically when low on health/mana
–CombatStats – Records player/party dps and can display it
–Cosmos et all – The Core of the Cosmos build, provides a very usful interface for many of the addons
–DPSPLUS – Shows you DPS for various attacks/ablities
–EasyMail – Fills in subject line with item being sent in mail
–Flexbar – Gives the user 96 additional buttons slots, fully configurable
–Gatherer – Shows on the minimap the locations where you’ve mined/herbed/picked stuff before, very useful
–Gypsy et all – The core functionality for the moveable windows
–ImprovedErrorFrame – Errors are made better…
–ItemBuff – shows the buff on your item on the screen, and it can be dragged to anywhere you like
–Karma – A addon that allows you to leave thoughts about people, and grade them on how much you like them, etc
–LockBar – Locks the action bar so you can’t accidently drag the action instead of clicking it
–LootLink – Shows sell price and the like for items at the bottom of the item, needed for auctioneer
–MapNotes – allows you to make note on your map by double anywhere clicking the main map
–MiniGames – Minigames! chess/tic tac toe/connect 4 (im so good at that)/checkers and more
–MooBuffMod – allows to the enchancement of how buffs look. you can adder timers and other stuff
–Notepad – yes a notepad
–Pager – sends a page to a person
–Popbar – gives you 48 more slots to place items, very customizable, draggable, etc
–QuestMinion – Addon that helps with quests with a side frame with quest info
–QuickLoot – loots fast by auto closing the lootframe if there’s no loot, etc
Reagent Helper – Adds the profession that a reagent is used by in the tooltip
–SideBar – adds sidebars, very helpful, can be moved vertically, on either side of the screen
–SocialSendMessage – send message button in the social frame
–Tacklebox – helps greatly with fishing, a must have for fisherman/fisherwomen
–TellTrack – keep track of all the people who sent you tells and easily reply to them
–Tooltips et all – all the tooltip stuff comes in a few different addons, but basically they make your life better.
–TransNUI – You can make parts of your UI transparent
–WantAds – can put up advertisements that can be seen by other people with the addon
–WeaponQuickSwap – Allows you to speedily equipt different weaponsets
WorldMapInfo – Shows coordinates on the world map, etc

◆到这里就是一个段落了,现在作个小总结◆
/以上介绍的UI合集,都是一些人,将一些小的插件整合起来,进行一些小的优化,然后一起发布出来.另外国内的UI水平和国外的相比还是有一点差距的,不过毕竟是国人,当然还是得支持一下的.下面我就来介绍一些常用的小插件.适合于喜欢个性不怕麻烦的人群./

/————————————————–/

下面要介绍到的AddOns(插件),大致可以分为10个类型(方法是按照http://www.curse-gaming.com/mod.php的分类来定的):
● 1.Bars
–This section contains every addon that adds/modifies/removes bars.
/这类包括操纵杆,经验显示条等等/
● 2.Chat
–Addons that affect chat or messaging
/聊天相关的/
● 3.Class
–This section is dedicated to all class based addons.
/职业相关的/
● 4.Combat
–This section will make your life easier in combat.
/战斗操作相关的/
● 5.Function Libraries
–This section contains addons which provide functions useable by other addons.
/为某些AddOns(插件)提供数据库,提供支持/
● 6.Interface improvements
–Addons in this section will modify/improve your basic interface.
/界面增强/
● 7.Inventory/Objects/Loots
–This section will help you manage your inventory, sort loot, and improve item information.
/物品列表,物品资料,物品拣取相关的/
● 8.Maps
–Addons that add/modify/improve both your World Map and mini map.
/地图相关的/
● 9.Quests
–This section will change/improve your quest interface.
/任务相关的/
● 10.Others
/其它/

▲以下提到的所有插件都可以取http://www.curse-gaming.com/mod.php下载▲

类型分好了,但是呢~~~因为实在是太多了,我就选一些经典的做些简短的介绍:
◇Flexbar
–强烈推荐,不过用起来比较麻烦,介绍更是有一吨…设计出来的按键都很有个性!反正我是到现在都还没有学会怎么用…
◇Bottom Bar
–看名字就知道了,它可以增加在下方的按键数量.
◇BibToolbars
–这个有好几个功能,除了个性化的按键,还有自定义经验条和工具条.
◇SideBar(Telo)
–这个看名字也很明白了,可以在屏幕的左边或者是右边增加按键.
◇Hotbar
–这个是GypsyMod中的一个.用过GypsyMod以后就知道了.
◇LockBar
–还是看名字就明白了,他可以锁定住按键,防止你不小心把按键给挪走了.(Lock the buttons on the action bar. )
◇PlayerFrameXPBar
–最大的特点就是用各种颜色来显示你的XP进度,XP位置都是出于人物头像的下面,血量显示的下面.
◇HideShapeshiftBar
–数值显示血量,数值显示在显示杆的上方.
◇HealthBar
–数值显示在显示杆的中间.
◇TellTrack
–Allows you to quickly and easily talk to several people that have messaged you.
/可以方便你同时和几个人进行密语聊天
◇ItemBuff
–这个应该不需要解释了,就是让你能够看到你对你的物品用的buff的所剩时间之类的信息.
◇RogueHelper
–给盗贼提供的(Allows you to get a small window with your energy and combo points that you can drag around.
)
◇CooldownCount
–在有Cooldown技能的图标上面以数字的形式显示CD的所剩时间.
◇Kill Log
–可以自动统计你以往杀的所有怪的记录,比如说:DPS,数量,经验等等…
◇CombatStats
–统计你的战斗详细记录(It displays a bunch of info on how much damage you do.)
◇DefendYourself
–当你在聊天或者是正在制作东西的时候收到攻击,会自动进行还击等动作.
◇AutoPotion
–一个方便盗贼自动涂毒的插件.
◇EasyMail
–方便在WOW写信的一个插件(Keep the author name when you send a mail) 需要注意的是,他需要一个名字叫sea的Function Libraries的支持.
◇AccountLogin
–自动登陆游戏.
◇Bigger QuestLog
–一个强化的任务窗口(Expands the quest tree so you don’t have to scroll as much.)
◇RaidBar
–可以像Group Bar一样显示Raid组里面情况:血&魔法值…
◇BuffTimers
–不用太多解释,Buff的时间显示.
◇Reputation
–可以显示Reputation的具体数值.
◇SellValue
–可以看到物品的卖价,还可以以清单的形式列出所有物品以及价格.
◇AuctionIt
–方便经常拍卖的人用的.
◇QuickLoot
–快速拣物品,拣东西的窗口自动移到鼠标下面,只需要点不用移动鼠标就可以拣东西了.
◇GoldView
–不用打开背包就可以看到你拥有的钱数…特别适合爱炫耀的 :P
◇Enchantrix
–方便练抚摸的人记录每样东西都能分解出那些材料.需要安装LootLink才能正常使用.
◇Bag Status Meters
–功能很强大的用来提示背包所剩Slots的小插件.
◇LootLink
–也是一个对你捡起的所有物品的统计
◇AllInOneInventory
–所有背包合成一个背包显示(All In One Inventory ( AIOI ) allows you to view your inventory without caring about bags.) 需要DynamicData的支持
◇AlphaMap
–一个透明的地图,可以自己设定透明度,还可以显示坐标.
◇Map Notes
–可以自己在地图上面打上标记并写上说明,方便自己下次看到的时候知道这个地方是干什么的.具体做什么可以自己发挥想象,比如说,记录这个地方有个宝箱^_^
◇Gatherer
–可以方便那些开宝箱一族,挖矿一族,采药一族,甚至是找水箱食品箱一族的自动记录物品位置,并在大体图和小地图上显示出来.可以说是Map Notes的强化.
◇MonkeyQuest
–一个很清爽很实用的任务提示窗口(The MonkeyQuest addOn for World of WarCraft displays quests and their objectives in a nice dragable frame.),强烈推荐!
◇QuestMinion
–老牌任务提示窗口,没有什么好说的.
◇QuestHistory
–任务记录
◇MyMusic
–可以让你在WOW里面控制播放Mp3,而不需要弹出来控制播放.很有意思的一个插件.
◇Location Coordinates
–方便显示坐标的一个小插件.

★介绍了这么多,我想大家也明白了一点点了吧.希望大家都能DIY出符合自己操作的UI来.★

欢迎加入我们的工会参加讨论.
我们的网址是:http://www.eastplay.net
BBS:http://www.eastplay.net/bbs/index.asp


QQ群:9215826


 

魔法师的生活到处充斥着羊皮纸和药水瓶,还有小妖精时不时来媚惑我~
 
 
 
 
     
 
昵称: momoteacg
积分: 1079
来自: China
称号: 游侠
状态: 离线

2005-4-3 18:26:22
 
 【第12楼】 momoteacg 标题  
 
 
 
常用缩写术语列表

来自:Ngacn.com

这里列出的是一些有可能被混淆的缩写和单词,但这并不是一张完整而详细的列表。有许多在互联网上广为流传的缩写词汇跟《魔兽世界》没什么关系。

AC – Armor Class,盔甲级别或防御。
Add – 一只额外的怪物加入到现有的战斗中。
AOE – Area Effect Damage,区域作用魔法。指的是一个可以伤害一个区域中的一群怪物的魔法,就像魔兽争霸三中的暴风雪魔法。
AE – Area Effect,区域作用伤害
AFK – Away from Keyboard,离开键盘。这意味着玩家离开了他的电脑。
Aggro – 这个词意味着怪物已经疯狂并且你已经将它们“激活”到开始攻击你的程度。它们现在开始会试图接近并攻击你。“鱼人被我Aggro了”或“如果你继续接近,鱼人将被Aggro”。
Aggro Radius – 怪物周围的区域,进入它意味着怪物会“苏醒”并攻击你。
Agi – Agility,敏捷
Avatar – 你的角色。
Buff – 施放于怪物或玩家身上的有益魔法。牧师的心火或撒满的嗜血术都是典型的Buff。
Carebear – 喜欢帮助其他玩家攻击怪物,而非在pvp中攻击其他玩家的玩家。
Caster – 非“坦克”型角色,如法师。
Cheese – 利用游戏的不平衡之处牟利。
Combat Pets – 被玩家控制的NPC,在战斗中帮助玩家及其队友。
CR – Corpse Retrevial,取回尸体
Creep – 怪物
Creep Jacking – 从魔兽争霸3引入的词语,当其他玩家与怪物战斗的时候趁机攻击该玩家。
Critters – 面对攻击不会反击的怪物,如小鹿和小兔子。
DD – Direct Damage,直接伤害。用来形容一个魔法所造成的伤害是一击生效而非持续产生伤害作用。
DMG – Damage,伤害。
DOT – Damage over time,在一段时间内不断对目标造成伤害。
DPS – Damage per second,每秒伤害。
De-Buff – 对一个单位施放一个具有负面效果的魔法使之战斗力降低。一个典型的“De-buff”就是减速。
FH – Full Health,生命值全满。
FM – Full Mana,法力全满。
Gank – PvP:当其他玩家与怪物战斗时趁机攻击该玩家。
GM – Game Master,游戏管理员。一些被暴雪娱乐雇佣以帮助、协助玩家的人。
Griefer – 试图骚扰或激怒其他玩家的人。
Grinding – 非常长时间呆在同一地点与同一类怪物战斗。
GS – Goldshire,闪金镇(地名)。
HP – Hit points/Health,伤害点数或生命值
IF – Ironforge,铁炉堡
Incoming (INC) – 意味着即将出现一次攻击。
Instancing – 在《魔兽世界》中有一类地下城,当你和你所在的队伍进入它的时候,你们会被载入到一个属于你们的这个地城的副本,只有你和你的队伍能够出现在这里,其他进入这一区域的队伍会自动进入他们自己的副本。
INT – Intelligence,智力。
Kiting – 玩家保持在敌人战斗范围以外的一种战术,从敌人身边跑开,同时对其造成伤害。
KOS – Killed on Sight,仇人见面。如果一名兽人走向一名人类守位,那么这名守位会在看的见它的情况下试图杀死他(激怒)。
KS – Kill Steal, 偷杀,试图杀死另一个人正在对付的怪物。
LFG – Looking for a group,寻找队伍以加入。
LFM – Looking for more,找寻更多的人组队。
LOL – Lots of Laugh/Laughing Out Loud,大笑。这个缩写意味着某些事的确十分好笑。但不幸的是,虽然这个词十分常用,但从很久以前开始它便容易引发一些不理智的行为(译者:毕竟有些人很容易被嘲笑激怒)。作为变通,你可以使用“呵呵呵呵”或“哈哈哈哈”来代替它,这两个词相对来说虽然不是最好的选择但更容易被接受。ROFL(笑到打滚)也是一个应该尽量避免使用的词。
LOM – Low on Mana,法力不足。
LOS – Line of Sight,视线。
LOOT – 从被杀死的怪物或宝箱里拿取财物。
LVL – Level,等级。
Mez – Mesmerize的缩写。意指例如催眠这类法术临时使目标丧失战斗能力。
MMO – Massively Multiplayer Online,大型多人在线。
MMOG – Massively Multiplayer Online Game,大型多人在线游戏。
MMORPG – Massive Multiplayer Online Role Playing Game,大型多玩家在线角色扮演游戏。
MOB – Mobile的缩写。指游戏中所有由电脑控制的角色。相类似的词有怪物等。
Nerf – 消弱。
Newbie – 菜鸟,有时用来形容新玩家的一个术语,但也用于指代那些技术不太好的玩家。
Newb – 新人的简称,见上。
Ninja – 没有经过其他玩家允许或趁别人没注意而拿走战利品。即没有经过允许拿走物品。
N00b – 一种用来称呼新人的不礼貌的说法。请不要使用。
NPC – Non-Player-Controlled Character,非玩家控制的角色。这种角色通常被服务器控制。也就是一名“电脑”角色。
OOM – Out of Mana,法力耗尽。人们通常用这句话提醒其他队员他已经没有法力不能再施放法术了,特别是治疗魔法。
PC – Player controlled character,玩家控制的角色。
Pet – 被玩家控制的非玩家生物,如一只狼或一只地狱犬等等。
PK – Player Kill或Player Killer,玩家在未经另一个玩家同意的情况下攻击并试图杀死他。
POP – Repopulation的缩写,指怪物刷新。
Proc – 激活。例如:一件具有特殊效果的武器将偶尔被“激活”。
PST – Please Send Tell,指说话的人想通过 /t(ell) 或 /w(hisper) 命令交流。
Puller – 负责吸引怪物的玩家。
Pulling – 队伍中的一名玩家负责吸引一只或几只怪物,并将他们带到队伍所在地,以便队伍中的其他玩家可以攻击这些怪物。这种方法可以避免一次被大群的怪物攻击。
PvE – Player vs. Environment, 玩家与电脑控制的对手之间的战斗。
PVP – Player vs. Player,玩家对玩家。也就是一名玩家攻击另一名玩家。
Raid – 由一群玩家在某一地区进行的大规模作战被称为Raid。
Res – Resurrect的缩写,复活。
Re-Spawn – 一只被杀死的怪物重新出生(被创建)。
Rest (state) – 人物劳累程度的指标,影响杀怪获得经验值的缩少。
Roll – 指你应该掷随机数字来决定物品的归属。
Root – 使用“定身”类法术困住目标,例如缠绕之根或催眠。
RR – Redridge Mountains,红脊山脉。
Small Pets – 跟随玩家的动物,不直接影响玩家或怪物,只是为了好看,特别是稀少的宠物。
Spawns – 在游戏世界中,怪物被创建时所位于的地点或出现的过程。
SPI – Spirit,灵魂。
STA – Stamina,耐力。
Stack – 堆放在同一个格子中的同类物品的数量。
STR – Strength,力量。 SW – Stormwind
Tank – 能够承受很多伤害的近战角色,如一名战士。
Tap – 对怪物造成伤害,标为你的猎物。一旦你对怪物造成了伤害,只有你才能得到经验值和掠夺战利品。显示灰色名字的怪物表示已被链接到其他玩家,你不能获得经验值和战利品。
Taunt – 与Aggro相关。将怪物的注意力从其他玩家身上吸引到自己身上的能力。
Threat – 与Aggro相关。玩家产生或吸引了怪物的仇恨。
Train – 把一群怪物引向另一名玩家。这种行为通常不受欢迎。
Twink – 高等级带练低等级玩家,通常通过给与该等级通常无法获得的强力盔甲和武器。
über – super的德语说法,原意指over;极其强力。
UC – Undercity
WF – Westfall,威斯特法(地名)。
Vendor Trash – 只有商人NPC才愿意购买的物品。
WoW – World of Warcraft
WTB – Wanting to buy,想要购买。
WTS – Wanting to sell,想要出售。
XP or Exp – 经验值
Zerg – 来自星际争霸,用人海战术攻击

÷


加入一些说明 以下宏还是比较简单实用的,键盘上使用宏操作毕竟会快捷方便许多。

1 Spells
1.1 Self Cast any spell
CODE
/target "player"
/cast SpellName(Rank x)
/script TargetLastEnemy();

Change SpellName(Rank x) by the Spell name and his rank.
在上面那个代码里把SpellName(Rank x)改为你需要的魔法 以下同
不知道什么名字也不怕 在宏命令编写的时候打开魔法书 shift+鼠标左键点那个魔法图标
你需要的魔法就出现在你正在编写的宏里面了

Example

CODE
/target "player"
/cast Purify(Rank 1)
/script TargetLastEnemy();

这个宏使用完之后 目标会自动切换为最后一个敌人(目标)

1.2 Selfcasting non-enemy spells
Some spells can not be cast on enemies. Thus, if you have an enemy targeted, you can cast them on yourself.
Example
This macro will only cast the spell if it can be cast on you:

CODE
/script if ( not UnitIsFriend("player", "target") ) then CastSpellByName("Spell(Rank 1)"); end
/script if ( SpellIsTargeting() ) then SpellTargetUnit("player"); end

Replace Spell(Rank 1) with the name and rank of the ability you wish to use.
这段代码是把一些不能对敌人(敌对目标)施放的魔法对自己施放
使用后的目标仍然是你原来的目标

1.3 Cast a spell based on target’s class
You’ll need to target the person you want to buff first. Here’s an example for a paladin to use; note that it should all be on one line:

CODE
/script class = UnitClass("target"); if ( ( class == "Rogue" ) or ( class == "Warrior" ) ) then
CastSpellByName("Blessing of Might(Rank 1)"); else CastSpellByName("Blessing of Wisdom(Rank 1)"); end

这一段看起来很有趣 里面有个判别 根据对方的不同给予不同的buff
是以pally做例子的 当然其他选手也可以参考
如果对方是盗贼或者战士则对他施放Blessing of Might(Rank 1)
如果对方不是上面俩职业则对他释放Blessing of Wisdom(Rank 1)

2 Inventory/Items
2.1 Equip an item

CODE
/script PickupContainerItem(bag, slot);

bag goes from 0 to 4, and slot from 1 to 20 (depending on bag size).
For more information, go to Item equipping to see how to use items from backpacks etc
装备某个物品的宏 其中(bag, slot)
分别是0~4对应5个包 和1~20对应包里的位置
这样 快速切换武器/装备就变的容易了

2.2 Use a Bandage

CODE
/script UseAction(ActionID, 0, 1);
/script if( SpellIsTargeting() ) then SpellTargetUnit("player"); end

Bandage must be placed in the action bar at the slot given by ActionID. ActionID is a number from 1 to 120. Slot1-ActionBar1 is ActionID1, Slot12 is ActionID12, Slot1-ActionBar2 is ActionID13 and so on up to Slot12 of ActionBar10. This will bandage your target, or yourself if your current target is not a friendly target.
对自己使用绷带的宏 但是绷带必须放到快捷栏的一个空格中
(ActionID, 0, 1) 中 ActionID 对应着快捷栏 数值从1~120
第一行第一个是1最后一个是12 第二行第一个是13……依次类推
这个宏对目标使用绷带 如果目标不能被急救则对自己使用

Here’s a different version courtesy of post by Sarf on the forums. This one will always self-bandage, even if you have a friendly player targeted. It will also re-target your original target. Note that this must all be on one line, its just split up for readability:


CODE
/script p="player";t="target";if(not UnitCanAttack(t, p))then ot=UnitName(t);TargetUnit(p);else ot=nil;end;
UseAction(ActionID);if(SpellIsTargeting()) then SpellTargetUnit(p); end if(ot) then TargetByName(ot);end

上面这一段的目的和前一段略有不同 不管当前目标是否可以被急救
绷带都对自己使用 并且使用后当前目标不变

3. Interface
3.1 Switching Hotbars

CODE
/script CURRENT_ACTIONBAR_PAGE = X;
/script ChangeActionBarPage();

Where X is the Hotbar number

Example

CODE
/script CURRENT_ACTIONBAR_PAGE = 1;
/script ChangeActionBarPage();

这一句是直接切换到第几页快捷键表 其中的X对应每一条快捷条

4. Miscellaneous
4.1 Adjusting Quest Fade
To change it to a more reasonable speed, try:

CODE
/script QUEST_DESCRIPTION_GRADIENT_CPS = 100;

To disable it altogether, use

CODE
/script QUEST_FADING_ENABLE = nil;

接任务的时候总是看着打半天字吧
前一个是加快任务说明的显示速度
后一个干脆让说明直接出现(不用等待)

Both of these need to be pasted or typed into the chat box. To simplify use, they could also be made into a macro button. To save them permanently, type

CODE
/script RegisterForSave(QUEST_DESCRIPTION_GRADIENT_CPS)

and similarly for QUEST_FADING_ENABLE if you use that instead.


OK,DONE!
 
 
 
http://bbs.wowchina.com/bbs/viewthread.aspx?forum_id=4&post_id=1331614&page_no=1&post_type=1


2条评论

  1. 楼主写的好的没话说了 ,我什么都不说了 严重顶你……

发表评论

评论也有版权!

click to change验证码