回答者: - 4-22 12:11
一:基础教程
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 aspectofmonkey (just use the left click)
/script CURRENT_ACTIONBAR_PAGE = 1;
/script ChangeActionBarPage();
/cast aspectofhawk (just use the left click)
14。牧师对队友的一键加血,比如一号键给第一队友加血,二号键给第二队友加血,免除了还要鼠标确
定目标的操作。依次类推,从第一个人到最后一个
给队友1加血:
/script TargetUnit(GetPartyMember(1))
CastSpellByName(Heal(Rank X)) TargetLastEnemy()
给队友2加血:
/script TargetUnit(GetPartyMember(2)) CastSpellByName(Heal(Rank X)) TargetLastEnemy()
给队友3加血:
/script TargetUnit(GetPartyMember(3)) CastSpellByName(Heal(Rank X)) TargetLastEnemy()
15。一键解决喂养宠物:这个宏会从最左边的袋子里的第一个位置拿出食物喂养宠物,如果所在的位置
没有食物,它会自动打开袋子。
/script if (not PlayerFrame.inCombat) then if (not GetContainerItemLink(4, 1)) then
OpenBag(4); else CastSpellByName("Feed Pet"); PickupContainerItem(4, 1); end end
16。术士宏
1)如果目标生命大于20,释放抽取生命法术,否则使用灵魂抽取。
/script if (UnitHealth("target")>20) then CastSpellByName("Drain Life(Rank X)") else
CastSpellByName("Drain Soul(Rank 2)") end;
2)虚弱诅咒版本
/script if (UnitMana("target")>0) then CastSpellByName("Curse of Tongues(Rank X)") else
CastSpellByName("Curse of Weakness(Rank X)") end;
17.先治疗自己,然后自动选中上次的敌人
/target Pugar //选择自己,假设自己的名字是Pugar
/cast Lesser Heal (Rank 1) //施展次级治疗rank1
/script TargetLastEnemy(); //重新选择刚刚选择的敌人
/script AttackTarget(); //攻击,等同于右键点击敌人
18.对于一个术士很有用的宏:首先将目标转为拖怪手或者坦克正在攻击的目标,然后命令宠物向前攻击
,跟着一个虚弱诅咒。
/assist 队伍中的拖怪手或者坦克的名字
/script PetAttack();
/cast Curse of Weakness (Rank X)
19.等治疗完之后提醒别人注意下自己有可能被怪打,不加延时的话,就没这个效果了。
/p healing %T, need 3s, don"t run away
/cast heal (rank 1)
/in 4 p cured %T 300HP,please notice the enemies turn on me^_^
20.在路上自动护送朋友做任务。
/assist [player name]
/cast 法术(Rank X)
/target [player name]
/follow [player name]
三:高级教程
WOW的宏函数库可以去这两个地方查:
]
回答者: - 4-22 12:12
宏命令大全和范例(高级)
-------------------------
牧师的宏
首先:/script:告诉系统下面这段文字是用宏语言写的,如果玩家想使用函数必须在每行的开始加上这一句;
一 随机说话
/script a="%t,给你个有限无敌圈"; b="%t,把你变上帝";c="%t,给你一个小恢复";d=random(1,3);
/script if d==1 then SendChatMessage(a) else if d==2 then SendChatMessage(b) else if d==3 then SendChatMessage(c) else end;end;end
/施放 xx法术(等级xx)
二 说话宏
/script SendChatMessage("主动给钱或是由我抢劫二选一"," say","通用语"," YELL")
"语言":写上“通用语”“精灵语”“侏儒语”“兽人语”
"频道":必须在参数"频道"中指明频道的编号,省略时为”综合”,我们还可以用以下的参数:
1."GUILD":工会 2."PARTY":小队 3."RAID":组团 4."YELL":大喊
三 生成一个随机数的函数random()
使用格式:random(起始值,结束值)
作用:生成一个在起始值和结束值之间的随机数
随机数:无起始值和结束值时位于[0,1]区间;提供单个参数n时,随机数位于[1,n]区间;提供两个参数起始值和结束值时,随机数位于[起始值,结束值]区间
例:/script random(50,100)
四 坦克打谁我打谁的宏
/target (主坦克名字) /assist /施放 火球术(等级 10)
五 怪物打谁我加谁的宏
/target (怪物名称) /assist /施放快速治疗(等级7)
六 牧师的群加宏
举例:小队人生命低与一半时,先用宏命令,再用治疗祷言.小队人员的生命几乎都满了.)
/施放 能量灌注
/script SpellStopCasting()
/施放 心灵专注
七 按等级施放法术的宏
真言术:韧
/script r=6;l={1,12,24,36,48,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("真言术:韧(等级 "..i..")");break;end;end
神圣之灵
/script r=3;l={40,42,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("神圣之灵(等级 "..i..")");break;end;end
恢复
/script r=9;l={8,14,20,26,32,38,44,50,56};if not UnitIsFriend("player","target")then TargetUnit("player");end;t=UnitLevel("target");for i=r,1,-1 do if (t>=l-10) then CastSpellByName("恢复(等级 "..i..")");break;end;end
真言术:盾
/script r=10;l={6,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("真言术:盾(等级 "..i..")");break;end;end
八 复活的说话宏
/E 翻箱倒柜拿出脂粉、眉笔、口红...边给 %t 化妆,边叹道:“孩子,你活着的时候就没打扮过,现在装殓前我给你好好打扮打扮。”
/施放 复活术(等级 5)
九 复活的话
我们以牧师为例:选中牧师“复活术”的图标,在名称处填写‘复活’。返回到第一个窗口在输入栏中输入下面的命令:
/me 开始施放复活术
/me 的复活术被%t抵抗
/me 开始变得愤怒了
/me 获得了狂暴效果
/me 施放皮鞭失败:%t对此免疫
/me 施放辣椒水失败:%t爱吃川菜
/me 开始施放色诱术(空格,空格…….)%t 复活了!
/施放 复活术(等级 1)
-------------------------
法师的宏
一 节能施法时自动放奥术飞弹的宏
/script local q; local t;for i=0,15,1 do t=GetPlayerBuffTexture(i); if (t and string.find(t, "ManaBurn")) then q=1; break; end; end; if(q ~= nil) then CastSpellByName(" 奥术飞弹 ( 等级 7)"); else CastSpellByName(" 灼烧 ( 等级 7)"); end;
二 气定-炎爆
/script SpellStopCasting()
/施放 气定神闲
/script SpellStopCasting()
/施放 炎爆术 等级(X)
/script SpellStopCasting()这句的意思是停止当前的施法
--------------------------
盗贼的宏
一 盗贼攻击的宏
/script if(UnitName("target") == nil) then TargetNearestEnemy();else if(not UnitCanAttack("player","target")) then AssistUnit("target") end end
/script if ( GetComboPoints() >= 5 ) then CastSpellByName(" 剔骨 ( 等级 8)") end
/script GameTooltip:SetInventoryItem("player", GetInventorySlotInfo("MainHandSlot")); if(GameTooltipTextRight3:GetText()==" 匕首 ") then CastSpellByName(" 背刺 ( 等级 8)");else CastSpellByName(" 邪恶攻击 ( 等级 8)") ;end
功能 : 如果目标身上是 5 灯就剔骨 , 如果主手是匕首就出背刺 , 如果是其他武器 , 就出邪恶攻击
------------------------------
猎人的宏
一 功能 :( 连续按 ) 收回宠物并令其冬眠 , 自动停止跑动 , 释放装死 , 如果解除战斗状态就释放冰冻陷阱
/script PetPassiveMode()
/script PetFollow()
/script if(UnitAffectingCombat("player")==1) then CastSpellByName(" 假死 ") else if(UnitAffectingCombat("player")==nil) then CastSpellByName(" 冰冻陷阱 ( 等级 2)") MoveForwardStart() end end
/script if(UnitAffectingCombat("player")==1) then MoveForwardStop() StrafeLeftStop() StrafeRightStop() end
二 功能 :( 需要连续按数次实现功能 ) 无目标时选择最近的目标 , 目标是队友是选择队友的目标 ; 目标没有印记的时候施放印记 , 有印记的时候施放毒蛇钉刺 ; 当攻击是自动判断是否自动射击 , 没有就自动射击
/script PetDefensiveMode()
/script if(UnitName("target")==nil) then TargetNearestEnemy() else if(not UnitCanAttack("player","target")) then AssistUnit("target") else if(not IsBuffActive(" 猎人印记 ","target")) then CastSpellByName(" 猎人印记 ( 等级 3)") PetAttack() end end end
/script if(IsBuffActive(" 猎人印记 ","target")) then PetAttack();end
/script if(IsBuffActive(" 猎人印记 ","target")) and (not IsBuffActive(" 毒蝎钉刺 ","target")) then CastSpellByName(" 毒蝎钉刺 ( 等级 3)"); end /script if(not IsAutoRepeatAction(40)) and (IsBuffActive(" 猎人印记 ","target")) then CastSpellByName(" 自动射击 ");end
/施放 召唤宠物
----------------------------
另外附一些宏命令参数的意义
----------------------------
1.法术
1.1 CastSpellByName("spellname(Rank X)")
作用:施放指定名称的法术
1.2 CastSpell(spellID,"spellbookTabNum")
作用:施放参数spellbookTabNum指定的法术书标签中、参数spellID指定位置的法术
参数spellbookTabNum:"spell"或"pet"
1.3 GetSpellCooldown(spellID,spellbookTabNum)
作用:返回指定法术的冷却信息
返回值:返回2个值:冷却开始的时间、冷却周期;若无冷却,均返回0
1.4 SpellIsTargeting()
作用:判断是否有法术正在施放并等待选择目标
1.5 SpellCanTargetUnit("unit")
作用:判断正在等待选择目标的法术能否向参数”unit”指定的单位施放
1.6 SpellTargetUnit("unit")
作用:向参数”unit”指定的单位施放正在等待选择目标的法术
1.7 SpellStopCasting()
作用:停止当前的施法
2.目标选择
2.1 ClearTarget()
作用:清除选定的目标
2.2 TargetUnit("unit")
作用:选定参数”unit”指定的单位为当前目标
2.3 TargetByName("name")
作用:选定指定名字的玩家为当前目标
2.4 TargetLastEnemy()
作用:选定前次曾选定的敌人为当前目标
2.5 TargetLastTarget()
作用:选定前次曾选定的目标为当前目标
2.6.1 TargetNearestFriend()
作用:选定位置最近的友方单位为当前目标
2.6.2 TargetNearestPartyMember()
作用:选定位置最近的队友为当前目标
2.6.3 TargetNearestRaidMember()
作用:选定位置最近的团友为当前目标
2.7 TargetNearestEnemy()
作用:选定位置最近的敌人为当前目标
参数:TargetNearestEnemy(1):逆序选择
2.8 AssistUnit("unit")
作用:选定参数”unit”指定单位的当前目标为自身的当前目标
2.9 AssistByName("name")
作用:选定指定名字玩家的当前目标为自身的当前目标
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();
参考资料:http://zhidao.baidu.com/question/21220014.html http://www.wotguild.org/forums/viewtopic.php?p=4924