应小舞号召,开此专贴,希望大家将实用的宏或有关宏的心得承上,我会按职业整理方便大家查阅,






[align=right][color=#000066][此贴子已经被作者于2005-6-28 16:54:10编辑过][/color][/align]
loversorry
2005-06-28 16:52:30
0樓
我就会一个猎人释放标记同时宠物攻击的宏,表笑


/施放 猎人标记(等级 1)


/script PetAttack()


	

Murphy
2005-06-28 16:58:46
1樓
我说几个抛砖引玉.



第一种比较简单,大家用的比较多就是做表情动作,呵呵,这个比如先下跪三秒,然后说"偶稀饭你,请你嫁给偶吧.."这样经典的套路,你也不要原般照套啊,要改动下再实施.


偶用DI此类宏SI:


远远的看见某人,先点住某人


/冲
/in	1 say 扑~~~
/拥抱


第二种稍微实用点,就是使用什么技能的时候说话.比如大家常见到的FS把某人变羊时的大喊.... 当然引申一下,可以用此类宏来提示同队的人,比如血量少了的时候,+血,或是回MANA的时候提醒战士不要冲. 


例子我再想想,明天贴,HOHO 



第三种就是为特定的什么事情来制作的宏,比较经典的,流传比较广的是FS的护送宏,一般护送低等级的朋友做任务,比较无聊,这个宏既简单又实用.


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






	
第四类,第五类,第六类……偶明天写,HOHO,偶要回家玩去了~~~哈哈,别用石头砸我,用金币砸就好了。。。HOHOHOHO~~~~


[align=right][color=#000066][此贴子已经被作者于2005-6-28 17:18:05编辑过][/color][/align]
乱·风·舞
2005-06-28 17:00:56
2樓
55 好可爱~~ 哈哈
Sunshine
2005-06-28 17:58:05
3樓
小莫非之笨~~~

Sunshine
2005-06-28 17:59:29
4樓
常用宏收集与讲解(来自艾泽拉斯国家地理)



资料整理收集加工:[email protected]


修正了SpellCastTarget的问题
中文版的变更稍后验证


索引:


1.友好魔法
...1.A 对友好单位或自己施法
...1.B 只对自己使用
...1.C 对特定队员施法
...1.D 按目标的职业分别使用不同魔法
...1.E 按目标等级使用不同级别的魔法
2. 判断HP,MP,连击点量
...2.A 按HP消耗量不同使用不同治疗魔法
...2.B 根据目标HP量决定是使用灵魂抽取还是抽取生命
...2.C 根据敌人是否使用魔法来决定是使用结舌诅咒还是虚弱诅咒
...2.D 根据连击点的多寡和能量的多少来决定使用技能种类
3.绷带
...3.A 对友好单位或自己使用绷带
...3.B 只对自己使用
4.武器相关
...4.A 对武器使用砺石
...4.B 更换备用武器
...4.C 切换主手与副手武器
...4.D 双手武器 <-> (主手武器+副手物品)
...4.E(主手武器+副手物品)<-> (单手武器+副手物品)
...4.F 单主手武器或双手武器 <-> (主手武器+副手物品)
...4.G 更换备用主手武器
5.组队相关
...5.A 设置辅助目标+自动辅助
...5.B 变羊+信息提示 
6.打开/关闭背包
7.宠物相关(猎人、术士)
...7.A 施放猎人印记的同时宠物攻击 
...7.B 切换到宠物正在攻击的目标并施放毒蛇刺击
...7.C 召回宠物并使用散射
...7.D 选择目标,开始攻击
...7.E 喂食
8.判断目标身上是否有特定BUFF
...8.A 猴之守护+物理攻击
...8.B 鹰之守护+自动射击
...8.C 鹰之守护+瞄准射击
9.影遁相关(暗夜专用)
...9.A 藏身 
...9.B 进食
10.切换技能栏
11.目标信息
12.任务接受页面相关
...12.A 增加文字浮现速度
...12.B 取消文字逐渐浮现效果
...12.C 直接接受当前窗口中的任务
13.切换全屏模式与窗口模式
14.设定“真实鼠标视野”
15.延迟宏(需要Cosmos)
...15.A 盗贼武器上毒并定时提示
...15.B 魔法效果消失提示
...15.C 使用闷棍并在不同时段内提示不同信息
...15.D 战士逃跑宏
16.数组宏的实际运用
17.通用变量的设置与使用
18.图腾破坏
19.自然之速(气定神闲)



1.友好魔法


1.A 对友好单位或自己施法
/cast 治疗术(等级1)
/script TargetUnit("player") 
	


如果你当前选择的目标是可以对其使用此魔法的友好单位的话,则对其使用魔法。
如当前目标是不能接受此魔法的单位,或没有选择任何目标的话,则对自己使用魔法。
而且不会对当前目标进行切换,不会中断对当前敌人的攻击。


将 “治疗术(等级1)” 换成任何能对友好单位释放的魔法与技能。


如在最后再加上如下代码
/script if ( UnitName("target") ~=nil and UnitInParty("player","target") ) then SendChatMessage("<治疗 %T >", "PARTY"); end 
	


则在治疗队友时,在party中发出相应的信息。


将<治疗 %T>换成任何你喜欢的信息,%T表示接受治疗的目标的名字。
将UnitInParty换成UnitIsFriend,则对任何友好单位施法时都发出信息。


将"PARTY"换为"EMOTE",则以自定义表情的方式发出信息。如SendChatMessage(" 将在3秒内治疗 %T", "EMOTE"),则别人在聊天窗口中看到:"汉客将在三秒内治疗小郎"


将"PARTY"换成"WHISPER", "COMMON", UnitName("target"),则采用密语形式对你施法的目标发送信息。"COMMON"表示密语所用的语言种类。下面是一个语言列表:


Common 人类语,联盟通用语
Orcish 兽人语,部落通用语
Dwarvish 矮人语
Gnomish 侏儒语
Darnassian 暗夜精灵语


还有其他的一些实现方法如:
/cast 治疗术(等级1) 
/script if SpellIsTargeting() then TargetUnit("player") 
	



/script if ( not UnitIsFriend("player", "target") ) then CastSpellByName("治疗术(等级1)"); end 
/script if ( SpellIsTargeting() ) then SpellTargetUnit("player"); end 
	



/script if (UnitName("target") ~=nil and UnitIsFriend("player","target")) then CastSpellByName("治疗术(等级1)") SendChatMessage("即将治疗 %T", "Party") else TargetUnit ("player") CastSpellByName("治疗术(等级1)") TargetLastEnemy(); end 
	


并不值得推荐。而且后一个宏会切换当前目标,中断攻击。


1.B 只对自己使用
如果想在任何条件下都只对自己使用治疗的话,用如下的宏:
/target "player"
/cast 治疗术(等级1)
/script TargetLastEnemy() 
	


但这个宏同样有切换当前目标,中断攻击的弊病。



1.C 对特定队员施法
下面的这个宏只对队伍中的第一名队员施法。party1,party2,party3,party4分别指代队伍中的其他4名成员。也可以结合组队相关中的目标设置宏来使用。
/script if (UnitName("party1") ~= nil) then CastSpellByName("治疗术(等级1)") SpellTargetUnit("party1") SendChatMessage("即将治疗 >>" .. UnitName("party1") .. "<< (3.5s)", "Party") TargetLastEnemy(); end	 
	



1.D 按目标的职业分别使用不同魔法
下面是圣骑士的一例。如果目标职业为盗贼或战士则使用力量祝福,否则使用智慧祝福。
/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 
	



1.E 按目标等级使用不同级别的魔法
下面牧师的一例,对目标使用其所能接受的最高等级的“圣言术:韧”
/script P="Power Word: Fortitude(Rank " S={1,2,14,26,38} if (UnitLevel("target") ~= nil and UnitIsFriend("player","target")) then for j=5,1,-1 do if (UnitLevel("target") >= S[j]) then CastSpellByName(P..j..")") return end end end 
	


下面是60级的牧师的实例,另外一种实现方法,语句书写略为不同,更为易读。
/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 
	


下面是60级德鲁依的一例,使用对方能接受的最高级野性印记。实现方法和上面2例略有不同:
/script r=7;l={1,10,20,30,40,50,60};if not UnitIsFriend("player","target")then TargetUnit("player");end;t=UnitLevel("target");for j=r,1,-1 do if (t>=l[j]-10) then CastSpellByName("Mark of The Wild(Rank "..j..")");break;end;end	 
	




2. 判断HP,MP,连击点量


2.A 按HP消耗量不同使用不同治疗魔法
在下面的例子中,宏会对玩家自己的HP消耗量进行判断,如小于200则不使用治疗,并在聊天窗口中提示:"health is good",如消耗两大于200小于400,使用3级的Flash of Light治疗,如大于400,则使用5级的Holy Light进行治疗。你也可以用当前的HP量进行判断。
/script x="player";d=UnitHealthMax(x)-UnitHealth(x);if (d>200) then if (d<400) then CastSpellByName("Flash of Light(Rank 3)") else CastSpellByName("Holy Light(Rank 5)") end;SpellTargetUnit(x);else DEFAULT_CHAT_FRAME:AddMessage("Health is good"); end;	 
	



2.B 根据目标HP量决定是使用灵魂抽取还是抽取生命
术士根据目标HP量决定是使用灵魂抽取还是抽取生命。大于20则使用抽取生命,否则使用灵魂抽取。
/script if (UnitHealth("target")>20) then CastSpellByName("Drain Life(Rank X)") else CastSpellByName("Drain Soul(Rank 2)"); end 
	



2.C 根据敌人是否使用魔法来决定是使用结舌诅咒还是虚弱诅咒
下面这个是根据敌人是否使用魔法(使用魔法的敌人其MANA肯定大于0)来决定是使用结舌诅咒还是虚弱诅咒。
/script if (UnitMana("target")>0) then CastSpellByName("Curse of Tongues(Rank X)") else CastSpellByName("Curse of Weakness(Rank X)"); end 
	



2.D 根据连击点的多寡和能量的多少来决定使用技能种类
下面是德鲁依猫形态(盗贼也是一样)根据连击点的多寡和能量的多少来决定是使用Rip还是Rake。如连击点大于等于3,则使用Rip,如连击点小于3并且能量有40点以上,则使用Rake。
/script if ( GetComboPoints() >= 3 ) then CastSpellByName("Rip(Rank 2)"); else if (UnitMana("player") >= 40 ) then CastSpellByName("Rake(Rank 1)"); end end	 
	



3.绷带


3.A 对友好单位或自己使用绷带
/script UseContainerItem(2,1)
/script TargetUnit("player") 
	


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


使用此宏,你必须把你要用的绷带放在背包的特定位置中。UseContainerItem(2,1)中的2是背包的编号,1是格子的编号。(2,1)表示右数第3个包的第一个格子。把它们换成对应你绷带位置的编号。
5个背包按照排列位置编号如下:


[4][3][2][1][0]]


6格包的格子编号如下:


_____[1][2]
[3][4][5][6]


16格包的格子编号如下:


[ 1][ 2][ 3][ 4]
[ 5][ 6][ 7][ 8]
[ 9][10][11][12]
[13][14][15][16]


其他格数以此类推。


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


将第一行换成/use "Linen Bandage",则不需将绷带放在背包的特定位置,也不需将其拖入技能栏。将Linen Bandage换成你使用的绷带的名字。推荐尝试,但此宏没有经过测试。


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



3.B 如果想在任何条件下都只对自己使用绷带的话,用如下的宏:
/target "player"
/use "Linen Bandage"
/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 
	




4.武器相关


Bag:物品存放背包编号
Slot:物品存放格子编号
MainhandBag:备用主手武器存放背包编号
MainhandBagSlot:备用主手武器存放格子编号
OffhandBag:备用副手武器存放背包编号
OffhandBagSlot:备用副手武器存放格子编号
TwohandsBag:备用双手武器存放背包编号
TwohandsBagSlot:备用双手武器存放格子编号


4.A 对主手武器或双手武器使用砺石
/script UseContainerItem (Bag,Slot)
/script PickupInventoryItem (16) 
	



4.B 更换备用主手武器或双手武器
/script UseContainerItem (Bag,Slot)
/script PickupInventoryItem (16) 
	



副手的对应宏,将16换为17即可。


4.C 切换主手武器和副手武器


/script PickupInventoryItem(16);PickupInventoryItem(17) 
	



盗贼可以用这个宏来互换手中的剑与匕首。


4.D 双手武器 -> (主手武器+副手物品)
/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()来进行预判断。参看下面的几个宏:


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



4.F 单主手武器或双手武器 -> (主手武器+副手物品)
/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	 
	



4.G 更换备用主手武器
/script if ( not CursorHasItem() ) then PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(mainhandBag, mainhandBagSlot); end 
	



5.组队相关


5.A 设置辅助目标+自动辅助
下面是2个配合使用的宏。先在宏窗口第一个空位建立一个宏,选择一个图标,内容为空。
再另建一个宏如下:
/script if (UnitName("target") ~= nil) then EditMacro(1, "Assist "..UnitName("target"), nil, "/assist "..UnitName("target"), 1) end 
/script SaveMacros() 
	


对选择的队友使用第二个宏,则自动将第一个宏设置为辅助选择的目标。也就是用宏来更换自动协助的目标,不用手动编辑宏来更换。


5.B 变羊+信息提示
这是一个法师在组队的时候用的宏,在变羊的同时,在PARTY中说明变羊目标的等级名字。
/script if ( UnitExists("target") and UnitIsEnemy("player","target") ) then SendChatMessage("Sheeping Level " ..UnitLevel("target") .." " ..UnitName("target") ..". Don't Attack it!", "PARTY") CastSpellByName("Polymorph(Rank 1)"); if not PlayerFrame.inCombat then ClearTarget(); end end 
	



超简化的一个版本,功能上差一点。
/p Sheeping >>> %t <<< 
/cast Polymorph (Rank X)	 
	



6.打开/关闭背包


/script ToggleBag(0) 背囊
/script ToggleBag(1) 右数第二个包
/script ToggleBag(2) 右数第三个包
/script ToggleBag(3) 右数第四个包
/script ToggleBag(4) 右数第五个包


上面的几个是切换特定背包的状态,如果当前是打开着的则关闭。如果当前是关闭着的,则打开。
适当的组合可以让你设定只打开特定的几个背包。如猎人可以选择不打开箭筒或子弹袋。


/script OpenAllBags()打开所有背包



7.宠物相关(猎人、术士)


下面的一些宏虽是对应猎人,术士只需稍加改动就可以用了。


7.A 施放猎人印记的同时宠物攻击
/cast Hunter's Mark(Rank 1) 
/script PetAttack() 
	



7.B 切换到宠物正在攻击的目标并施放毒蛇刺击
/script TargetUnitsPet("Player")
/assist 
/cast Serpent Sting(Rank 1)	 
	



7.C 召回宠物并使用散射
此宏是有散射技能的玩家所必需的。
/script PetFollow() 
/Cast Scatter Shot()	 
	



7.D 选择目标,开始攻击
如果当前目标是友好目标,则协助目标。使用猎人印记,宠物攻击,如果没有在战斗状态,开始自动射击。如果目标是敌人的话,则直接使用技能。此宏在SOLO组队中都比较实用。
/script if (UnitIsFriend("player","target")) then AssistUnit("target"); end 
/cast Hunter's Mark(Rank X) 
/cast PetAttack() 
/script if(not PlayerFrame.inCombat) then CastSpellByName("Auto Shot"); end	 
	



7.E 喂食


最简单的一键喂食,把食物放入对应的背包格子中。
/cast Feed Pet 
/script PickupContainerItem (Bag,Slot) 
	



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



8.判断目标身上是否有特定BUFF


8.A 猴之守护+物理攻击
下面的宏会先判断玩家身上是否加有猴之守护,如果没有,使用猴之守护。如果玩家未在战斗状态,则开始物理攻击。也可以把Attack换为Raptor Strike。
/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 
	



8.B 鹰之守护+自动射击
]而这个则是先开始自动射击,再判断身上是否有鹰之守护的效果,没有的话,使用鹰之守护。
/cast Auto Shot 
/script if (not string.find(UnitBuff("player", 1), "Raven")) then CastSpellByName("Aspect of the Hawk(Rank X)"); end 
	



8.C 鹰之守护+瞄准射击
瞄准射击的版本
/script if (not string.find(UnitBuff("player", 1), "Raven")) then CastSpellByName("Aspect of the Hawk(Rank X)"); else CastSpellByName("Aimed Shot(Rank Y)"); end	 
	



9.影遁相关(暗夜专用)


9.A 藏身
影遁的同时躺下,藏身之用……
/cast Shadowmeld(Racial) 
/laydown	 
	



9.B 进食
吃饭喝水的同时影遁,也是出于安全考虑……
/target "player"
/script UseContainerItem(FoodBag, FoodSlot); 
/script UseContainerItem(DrinkBag, DrinkSlot); 
/cast Shadowmeld(Racial)	 
	



10.切换技能栏


/script CURRENT_ACTIONBAR_PAGE = X
/script ChangeActionBarPage() 
	



将3换成你想切换到的技能栏页数


此宏可以有这样的用法
/cast Aspect of the Monkey
/script CURRENT_ACTIONBAR_PAGE = 3
/script ChangeActionBarPage() 
	


切换技能栏的同时使用猴之守护。


还可以加上前面的BUFF判断
/script if (not string.find(UnitBuff("player", 1), "Mon")) then CastSpellByName("Aspect of the Monkey"); end
/script CURRENT_ACTIONBAR_PAGE = 3
/script ChangeActionBarPage() 
	



11.目标信息
/script if UnitClassification("target")=="elite" then SendChatMessage("".. UnitLevel("target") .. "+ " .. UnitName("target"), "party") else SendChatMessage("" .. UnitLevel("target") .. " " .. UnitName("target"), "party"); end	 
	



这个宏在PARTY频道中发出当前目标的一些相关信息。"+"代表精英。效果如下:
[Party]Hank:50 Stormwind Guard
[Party]Hank:43+ King Bangalash


下面是一个目标信息的相关函数列表:
UnitName 如"Coffiex","moonwell"
UnitLevel 如"42","60"
UnitClass 如"Warrior","Shaman"
UnitClassification 如"elite","worldboss"
UnitCreatureFamily 如"Wolf","Cat"
UnitCreatureType 如"Beast","Humanoid"
UnitRace 如"Nightelf","Orc"



12.任务接受页面相关


12.A 增加文字浮现速度
/script QUEST_DESCRIPTION_GRADIENT_CPS = 100 
	



12.B 取消文字逐渐浮现效果
/script QUEST_FADING_ENABLE = nil 
	



12.C 直接接受当前窗口中的任务
/script AcceptQuest() 
	



13.切换全屏模式与窗口模式
/script SetCVar("gxWindow", 1 - GetCVar("gxWindow"))
/console gxRestart	 
	



14.设定“真实鼠标视野”
/script CameraOrSelectOrMoveStart(arg1)



15.延迟宏(需要Cosmos)


15.A 盗贼武器上毒并定时提示
给双手的武器都上毒,并在毒性还有一分钟就消退的时候在聊天窗口发出提示信息。
/script UseContainerItem(Bag,Slot); PickupInventoryItem(16); UseContainerItem(Bag,Slot); PickupInventoryItem(17); 
/in 1740 /script DEFAULT_CHAT_FRAME:AddMessage("Poison wearing off in one minute.") 
	



15.B 魔法效果消退提示
同样的,你也可以对持续性的魔法使用相似的宏。提示信息将在魔法使用X秒后出现,提示你还有Y秒魔法就将会失效。
/script T = UnitName("target"); 
/cast Spell(Rank 1); 
/in X /script DEFAULT_CHAT_FRAME:AddMessage("Spell will wear off " ..T .." in Y seconds.")	 
	



也可以这样,X为魔法的持续时间(秒)。在魔法效果消退时提示信息。
/script T = UnitName("target"); 
/cast Spell(Rank 1); 
/in X /script DEFAULT_CHAT_FRAME:AddMessage("Spell has worn off " ..T) 
	



15.C 使用闷棍并在不同时段内提示不同信息
使用闷棍并在不同时段内在PARTY中提示不同信息。以下是3级的闷棍的例子
/script T = UnitLevel("target") .. " " .. UnitName("target"); 
/cast Sap(Rank 3); 
/script SendChatMessage(T.." sapped.","party"); 
/in 30 /script SendChatMessage(T.." up in 15.","party"); 
/in 40 /script SendChatMessage(T.." up in 5.","party"); 
/in 45 /fire	 
	



15.D 战士逃跑宏
这是一个战士逃跑的时候使用的宏,首先使用包中的药水,换上盾牌(此例中其换武器的快捷位于技能栏第一页第11和12格)。使用Thunder Clap减低敌人速度,然后转身逃跑。
/script UseContainerItem(Bag, Slot);ActionButtonDown(11);ActionButtonUp(11);ActionButtonDown(12);ActionButtonUp(12)
/cast Thunder Clap(Rank 1)
/script TurnLeftStart(arg1)
/in 1 /script TurnLeftStop(arg1);ToggleAutoRun() 
	



16.数组宏的实际运用


下面的宏让你只使用一个宏就可以循环地使用数个技能。此以圣骑士为例,第一次使用Seal of the Crusader,第二次使用Judgement,第三次使用Seal of Righeousness,第四次又回到使用Seal of the Crusader,如此循环。
新建宏如下:
/script AQ={};AQ.i=1;AQ.x=function() AQ[AQ.i]() end 
/script AQ[1]=function() CastSpellByName("Seal of the Crusader(Rank 1)"); AQ.i=2 end 
/script AQ[2]=function() CastSpellByName("Judgement"); AQ.i=3 end 
/script AQ[3]=function() CastSpellByName("Seal of Righeousness(Rank 1)"); AQ.i=1 end	 
	


再新建一宏如下:
/script AQ.x()	 
	


在每次进入游戏之后使用一次第一个宏,然后利用第二个宏就可以实现技能的循环使用了。



17.通用变量的设置与使用


通用变量可以被你所有的宏所调用。
用下面的格式新建一个通用变量
/script setglobal("<variable name>","<string>"); 


获取通用变量的值


getglobal("<variable name>") 


通用变量可以用来简化你的宏,以避免超过宏255的字符的最大限制。比如把技能名放到通用变量中。


通用变量每次进入游戏都必须重新设置。你可以用一个宏来设定你的通用变量。
如下面这样的一个宏:


/script setglobal("HT1","Healing Touch(Rank 3)"); setglobal("HT2","Healing Touch(Rank 4)"); setglobal("RJ","Rejuvenation(Rank 4)");	 
	



游戏中的使用实例


/script if (UnitName("target") ~=nil and UnitInParty("target")) then CastSpellByName(getglobal("RJ")) else TargetUnit("player") CastSpellByName(getglobal("RJ")) end; TargetLastEnemy();	 
	



18.图腾破坏


下面是德鲁依的一个例子,如果当前选择的目标是图腾则使用一级的月火,如果不是图腾则使用最高级的月火:
/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 
	



下面是另一个用于破坏图腾的宏,它会搜寻附近的图腾并对其使用1级的月火
/target [图腾名的前5-10的字符]
/target [图腾名的前5-10的字符]
/target [图腾名的前5-10的字符]
/target [图腾名的前5-10的字符]
/target [图腾名的前5-10的字符]
/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"



19.自然之速(气定神闲)


下面是萨满自然之速接治疗波的一例:
/target "player"
/script CastAway("swift",10,"Nature's Swiftness","Healing Wave(Rank 9)") 
/script TargetLastEnemy(); 
/script AttackTarget(); 
	


使用了自然之速之后马上就能跟上治疗波而不用按2次技能。法师可以将自然之速换为气定神闲,后面的治疗波也可以换成任何可搭配使用的魔法。



[align=right][color=#000066][此贴子已经被作者于2005-6-30 13:17:53编辑过][/color][/align]
乱·风·舞
2005-06-30 13:14:59
5樓
这篇也很不错的,说了宏的详细制作原理.也就是Notation and Conventions 


Lua脚本语言入门(目前魔兽使用的可以写在宏内的语言)(中文)



作者: 沐枫 


Lua 程序设计初步


作者: 沐枫 (第二人生成员)
版权所有转载请注明原出处


  在这篇文章中,我想向大家介绍如何进行Lua程序设计。我假设大家都学过至少一门编程语言,比如Basic或C,特别是C。因为Lua的最大用途是在宿主程序中作为脚本使用的。
  Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱。
  在Lua中,一切都是变量,除了关键字。请记住这句话。


I. 首先是注释
  写一个程序,总是少不了注释的。
  在Lua中,你可以使用单行注释和多行注释。
  单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。相当于C++语言中的"//"。
  多行注释中,由"--[["表示注释开始,并且一直延续到"]]"为止。这种注释相当于C语言中的"/*…*/"。在注释当中,"[["和"]]"是可以嵌套的。
II. Lua编程
  经典的"Hello world"的程序总是被用来开始介绍一种语言。在Lua中,写一个这样的程序很简单:
  print("Hello world")
  在Lua中,语句之间可以用分号";"隔开,也可以用空白隔开。一般来说,如果多个语句写在同一行的话,建议总是用分号隔开。
  Lua 有好几种程序控制语句,如:


  条件控制:if 条件 then … elseif 条件 then … else … end
  While循环:while 条件 do … end
  Repeat循环:repeat … until 条件
  For循环:for 变量 = 初值,终点值,步进 do … end
  For循环:for 变量1,变量2,… ,变量N in表或枚举函数 do … end


  注意一下,for的循环变量总是只作用于for的局部变量,你也可以省略步进值,这时候,for循环会使用1作为步进值。
  你可以用break来中止一个循环。
  如果你有程序设计的基础,比如你学过Basic,C之类的,你会觉得Lua也不难。但Lua有几个地方是明显不同于这些程序设计语言的,所以请特别注意。


  .语句块
    语句块在C++中是用"{"和"}"括起来的,在Lua中,它是用do 和 end 括起来的。比如: 
    do print("Hello") end
    你可以在 函数 中和 语句块 中定局部变量。


  .赋值语句
    赋值语句在Lua被强化了。它可以同时给多个变量赋值。
    例如:
    a,b,c,d=1,2,3,4
    甚至是:
    a,b=b,a -- 多么方便的交换变量功能啊。
    在默认情况下,变量总是认为是全局的。假如你要定义局部变量,则在第一次赋值的时候,需要用local说明。比如:
    local a,b,c = 1,2,3 -- a,b,c都是局部变量


  .数值运算
    和C语言一样,支持 +, -, *, /。但Lua还多了一个"^"。这表示指数乘方运算。比如2^3 结果为8, 2^4结果为16。
    连接两个字符串,可以用".."运处符。如:
    "This a " .. "string." -- 等于 "this a string"


  .比较运算
    < > <= >= == ~=
    分别表示 小于,大于,不大于,不小于,相等,不相等
    所有这些操作符总是返回true或false。
    对于Table,Function和Userdata类型的数据,只有 == 和 ~=可以用。相等表示两个变量引用的是同一个数据。比如:
    a={1,2}
    b=a
    print(a==b, a~=b) -- true, false
    a={1,2}
    b={1,2}
    print(a==b, a~=b) -- false, true


  .逻辑运算
    and, or, not
    其中,and 和 or 与C语言区别特别大。
    在这里,请先记住,在Lua中,只有false和nil才计算为false,其它任何数据都计算为true,0也是true!
    and 和 or的运算结果不是true和false,而是和它的两个操作数相关。
    a and b:如果a为false,则返回a;否则返回b
    a or b:如果 a 为true,则返回a;否则返回b


    举几个例子:
     print(4 and 5) --> 5
     print(nil and 13) --> nil
     print(false and 13) --> false
     print(4 or 5) --> 4
     print(false or 5) --> 5


    在Lua中这是很有用的特性,也是比较令人混洧的特性。
    我们可以模拟C语言中的语句:x = a? b : c,在Lua中,可以写成:x = a and b or c。
    最有用的语句是: x = x or v,它相当于:if not x then x = v end 。


  .运算符优先级,从高到低顺序如下:
    ^
    not - (一元运算)
     * /
     + -
     ..(字符串连接)
     < > <= >= ~= ==
     and
     or


III. 关键字
  关键字是不能做为变量的。Lua的关键字不多,就以下几个:
  and break do else elseif
  end false for function if
  in local nil not or
  repeat return then true until while


IV. 变量类型
  怎么确定一个变量是什么类型的呢?大家可以用type()函数来检查。Lua支持的类型有以下几种:


  Nil 空值,所有没有使用过的变量,都是nil。nil既是值,又是类型。
  Boolean 布尔值
  Number 数值,在Lua里,数值相当于C语言的double
  String 字符串,如果你愿意的话,字符串是可以包含'\0'字符的
  Table 关系表类型,这个类型功能比较强大,我们在后面慢慢说。
  Function 函数类型,不要怀疑,函数也是一种类型,也就是说,所有的函数,它本身就是一个变量。
  Userdata 嗯,这个类型专门用来和Lua的宿主打交道的。宿主通常是用C和C++来编写的,在这种情况下,Userdata可以是宿主的任意数据类型,常用的有Struct和指针。
  Thread   线程类型,在Lua中没有真正的线程。Lua中可以将一个函数分成几部份运行。如果感兴趣的话,可以去看看Lua的文档。


V. 变量的定义
  所有的语言,都要用到变量。在Lua中,不管你在什么地方使用变量,都不需要声明,并且所有的这些变量总是全局变量,除非,你在前面加上"local"。
  这一点要特别注意,因为你可能想在函数里使用局部变量,却忘了用local来说明。
  至于变量名字,它是大小写相关的。也就是说,A和a是两个不同的变量。
  定义一个变量的方法就是赋值。"="操作就是用来赋值的
  我们一起来定义几种常用类型的变量吧。
  A. Nil
    正如前面所说的,没有使用过的变量的值,都是Nil。有时候我们也需要将一个变量清除,这时候,我们可以直接给变量赋以nil值。如:
    var1=nil -- 请注意 nil 一定要小写


  B. Boolean
    布尔值通常是用在进行条件判断的时候。布尔值有两种:true 和 false。在Lua中,只有false和nil才被计算为false,而所有任何其它类型的值,都是true。比如0,空串等等,都是true。不要被C语言的习惯所误导,0在Lua中的的确确是true。你也可以直接给一个变量赋以Boolean类型的值,如:
    varboolean = true


  C. Number
    在Lua中,是没有整数类型的,也不需要。一般情况下,只要数值不是很大(比如不超过100,000,000,000,000),是不会产生舍入误差的。在很多CPU上,实数的运算并不比整数慢。
    实数的表示方法,同C语言类似,如:
    4 0.4 4.57e-3 0.3e12 5e+20


  D. String
    字符串,总是一种非常常用的高级类型。在Lua中,你可以非常方便的定义很长很长的字符串。
    字符串在Lua中有几种方法来表示,最通用的方法,是用双引号或单引号来括起一个字符串的,如:
    "This is a string."
    和C语言相同的,它支持一些转义字符,列表如下:
    \a bell
    \b back space
    \f form feed
    \n newline
    \r carriage return
    \t horizontal tab
    \v vertical tab
    \\ backslash
    \" double quote
    \' single quote
    \[ left square bracket
    \] right square bracket


    由于这种字符串只能写在一行中,因此,不可避免的要用到转义字符。加入了转义字符的串,看起来实在是不敢恭维,比如:
    "one line\nnext line\n\"in quotes\", 'in quotes'"
    一大堆的"\"符号让人看起来很倒胃口。如果你与我有同感,那么,我们在Lua中,可以用另一种表示方法:用"[["和"]]"将多行的字符串括起来,如:
    page = [[
    <HTML>
      <HEAD>
        <TITLE>An HTML Page</TITLE>
      </HEAD>
      <BODY>
        <A HREF="http://www.lua.org">Lua</A>
        [[a text between double brackets]]
      </BODY>
    </HTML>
    ]]


    值得注意的是,在这种字符串中,如果含有单独使用的"[["或"]]"就仍然得用"\["或"\]"来避免歧义。当然,这种情况是极少会发生的。


E. Table
    关系表类型,这是一个很强大的类型。我们可以把这个类型看作是一个数组。只是C语言的数组,只能用正整数来作索引;在Lua中,你可以用任意类型来作数组的索引,除了nil。同样,在C语言中,数组的内容只允许一种类型;在Lua中,你也可以用任意类型的值来作数组的内容,除了nil。
    Table的定义很简单,它的主要特征是用"{"和"}"来括起一系列数据元素的。比如:


    T1 = {} -- 定义一个空表
    T1[1]=10 -- 然后我们就可以象C语言一样来使用它了。
    T1["John"]={Age=27, Gender="Male"}
    这一句相当于:
    T1["John"]={} -- 必须先定义成一个表,还记得未定义的变量是nil类型吗
    T1["John"]["Age"]=27
    T1["John"]["Gender"]="Male"
    当表的索引是字符串的时候,我们可以简写成:
    T1.John={}
    T1.John.Age=27
    T1.John.Gender="Male"
    或
    T1.John{Age=27, Gender="Male"}
    这是一个很强的特性。


    在定义表的时候,我们可以把所有的数据内容一起写在"{"和"}"之间,这样子是非常方便,而且很好看。比如,前面的T1的定义,我们可以这么写:


    T1=
    {
      10, -- 相当于 [1] = 10
      [100] = 40,
      John= -- 如果你原意,你还可以写成:["John"] =
      {
        Age=27,		 -- 如果你原意,你还可以写成:["Age"] =27
        Gender=Male		 -- 如果你原意,你还可以写成:["Gender"] =Male
      },
      20 -- 相当于 [2] = 20
    }


    看起来很漂亮,不是吗?我们在写的时候,需要注意三点:
    第一,所有元素之间,总是用逗号","隔开;
    第二,所有索引值都需要用"["和"]"括起来;如果是字符串,还可以去掉引号和中括号;
    第三,如果不写索引,则索引就会被认为是数字,并按顺序自动从1往后编;


    表类型的构造是如此的方便,以致于常常被人用来代替配置文件。是的,不用怀疑,它比ini文件要漂亮,并且强大的多。


  F. Function
    函数,在Lua中,函数的定义也很简单。典型的定义如下:
    function add(a,b) -- add 是函数名字,a和b是参数名字
     return a+b -- return 用来返回函数的运行结果
    end


    请注意,return语言一定要写在end之前。假如你非要在中间放上一句return,那么请写成:do return end。
    还记得前面说过,函数也是变量类型吗?上面的函数定义,其实相当于:
    add = function (a,b) return a+b end
    当你重新给add赋值时,它就不再表示这个函数了。你甚至可以赋给add任意数据,包括nil (这样,你就清除了add变量)。Function是不是很象C语言的函数指针呢?


    和C语言一样,Lua的函数可以接受可变参数个数,它同样是用"…"来定义的,比如:
    function sum (a,b,…)
    如果想取得…所代表的参数,可以在函数中访问arg局部变量(表类型)得到。
    如 sum(1,2,3,4)
    则,在函数中,a = 1, b = 2, arg = {3, 4}
    更可贵的是,它可以同时返回多个结果,比如:
    function s()
      return 1,2,3,4
    end
    a,b,c,d = s() -- 此时,a = 1, b = 2, c = 3, d = 4
前面说过,表类型可以拥有任意类型的值,包括函数!因此,有一个很强大的特性是,拥有函数的表,哦,我想更恰当的应该说是对象吧。Lua可以使用面向对象编程了。不信?那我举例如下:


    t =
    {
     Age = 27
     add = function(self, n) self.Age = self.Age+n end
    }
    print(t.Age) -- 27
    t.add(t, 10)
    print(t.Age) -- 37


    不过,t.add(t,10) 这一句实在是有点土对吧?没关系,在Lua中,你可以简写成:
    t:add(10)		 -- 相当于 t.add(t,10)


  G. Userdata 和 Thread
    这两个类型的话题,超出了本文的内容,就不打算细说了。


VI. 结束语
  就这么结束了吗?当然不是,接下来,需要用Lua解释器,来帮助你理解和实践了。这篇小文只是帮助你大体了解Lua的语法。如果你有编程基础,相信会很快对Lua上手了。
  就象C语言一样,Lua提供了相当多的标准函数来增强语言的功能。使用这些标准函数,你可以很方便的操作各种数据类型,并处理输入输出。有关这方面的信息,你可以参考《Programming in Lua 》一书,你可以在网络上直接观看电子版,网址为:http://www.lua.org/pil/index.html
  当然,Lua的最强大的功能是能与宿主程序亲蜜无间的合作,因此,下一篇文章,我会告诉大家,如何在你的程序中使用Lua语言作为脚本,使你的程序和Lua脚本进行交互。


使用流程
1. 函数的使用
以下程序演示了如何在Lua中使用函数, 及局部变量
例e02.lua
-- functions 
function pythagorean(a, b)		 
local c2 = a^2 + b^2		 
return sqrt(c2) 
end 
print(pythagorean(3,4))


运行结果
5


程序说明
在Lua中函数的定义格式为:
function 函数名(参数)
...
end
与Pascal语言不同, end不需要与begin配对, 只需要在函数结束后打个end就可以了.
本例函数的作用是已知直角三角形直角边, 求斜边长度. 参数a,b分别表示直角边长,
在函数内定义了local形变量用于存储斜边的平方. 与C语言相同, 定义在函数内的代
码不会被直接执行, 只有主程序调用时才会被执行.
local表示定义一个局部变量, 如果不加local刚表示c2为一个全局变量, local的作用域
是在最里层的end和其配对的关键字之间, 如if ... end, while ... end等。全局变量的
作用域是整个程序。


2. 循环语句
例e03.lua
-- Loops 
for i=1,5 do		 
print("i is now " .. i) 
end


运行结果
i is now 1 
i is now 2 
i is now 3 
i is now 4 
i is now 5


程序说明
这里偶们用到了for语句
for 变量 = 参数1, 参数2, 参数3 do
循环体
end
变量将以参数3为步长, 由参数1变化到参数2
例如:		 
for i=1,f(x) do print(i) end
for i=10,1,-1 do print(i) end


这里print("i is now " .. i)中,偶们用到了..,这是用来连接两个字符串的,
偶在(1)的试试看中提到的,不知道你们答对了没有。
虽然这里i是一个整型量,Lua在处理的时候会自动转成字符串型,不需偶们费心。


3. 条件分支语句
例e04.lua
-- Loops and conditionals 
for i=1,5 do
print(“i is now “ .. i)
			 if i < 2 then						 
			 print(“small”)		 
			 elseif i < 4 then						 
			 print(“medium”)		 
			 else						 
			 print(“big”)		 
			 end 
end


运行结果
i is now 1 
small 
i is now 2 
medium 
i is now 3 
medium 
i is now 4 
big 
i is now 5 
big


程序说明
if else用法比较简单, 类似于C语言, 不过此处需要注意的是整个if只需要一个end,
哪怕用了多个elseif, 也是一个end.
例如
	 if op == "+" then
			 r = a + b
	 elseif op == "-" then
			 r = a - b
	 elseif op == "*" then
			 r = a*b
	 elseif op == "/" then
			 r = a/b
	 else
			 error("invalid operation")
	 end



4.试试看
Lua中除了for循环以外, 还支持多种循环, 请用while...do和repeat...until改写本文中的for程序
	


	
数组的使用


1.简介
Lua语言只有一种基本数据结构, 那就是table, 所有其他数据结构如数组啦,
类啦, 都可以由table实现.


2.table的下标
例e05.lua
-- Arrays 
myData = {} 
myData[0] = “foo” 
myData[1] = 42 


-- Hash tables 
myData[“bar”] = “baz” 


-- Iterate through the 
-- structure 
for key, value in myData do		 
print(key .. “=“ .. value) 
end


输出结果
0=foo 
1=42 
bar=baz


程序说明
首先定义了一个table myData={}, 然后用数字作为下标赋了两个值给它. 这种
定义方法类似于C中的数组, 但与数组不同的是, 每个数组元素不需要为相同类型,
就像本例中一个为整型, 一个为字符串.


程序第二部分, 以字符串做为下标, 又向table内增加了一个元素. 这种table非常
像STL里面的map. table下标可以为Lua所支持的任意基本类型, 除了nil值以外.


Lua对Table占用内存的处理是自动的, 如下面这段代码
	 a = {}
	 a["x"] = 10
	 b = a				 -- `b' refers to the same table as `a'
	 print(b["x"]) --> 10
	 b["x"] = 20
	 print(a["x"]) --> 20
	 a = nil		 -- now only `b' still refers to the table
	 b = nil		 -- now there are no references left to the table
b和a都指向相同的table, 只占用一块内存, 当执行到a = nil时, b仍然指向table,
而当执行到b=nil时, 因为没有指向table的变量了, 所以Lua会自动释放table所占内存


3.Table的嵌套
Table的使用还可以嵌套,如下例
例e06.lua
-- Table ‘constructor’ 
myPolygon = {		 
color=“blue”,		 
thickness=2,		 
npoints=4;		 
{x=0,		 y=0},		 
{x=-10, y=0},		 
{x=-5, y=4},		 
{x=0,		 y=4} 
}


-- Print the color 
print(myPolygon[“color”]) 


-- Print it again using dot 
-- notation 
print(myPolygon.color) 


-- The points are accessible 
-- in myPolygon[1] to myPolygon[4] 


-- Print the second point’s x 
-- coordinate 
print(myPolygon[2].x)


程序说明
首先建立一个table, 与上一例不同的是,在table的constructor里面有{x=0,y=0}, 
这是什么意思呢? 这其实就是一个小table, 定义在了大table之内, 小table的
table名省略了.
最后一行myPolygon[2].x,就是大table里面小table的访问方式.


乱·风·舞
2005-06-30 13:28:42
6樓
很不错.继续继续
zerg
2005-06-30 13:44:26
7樓
有没有关于战士的呀!!对于切换状态的一些不知道怎么设定!

冰风
2005-07-04 10:31:30
8樓
都不难的,恩,可以到这里找到很多。


www.wowwiki.com


wow主要运用到了lua语言和xml


可惜偶两种都不懂。。。。


努力学习ing,争取把wow界面改成类似UO的,起码可以拖动地图吧。。

idau7
2005-07-12 11:53:23
9樓
战士: /target %T/Y 你们的屁股很好看吗?不想死的话请选择左平移或者右平移,如果可以,希望我的冲锋先爽到你的屁股./施放 冲锋 引怪:2秒钟后将开始引怪〉〉〉〉%t《〈〈〈请大家准备 休息:休息时间。 有个战士还总在后面跟一个让你等着的动作 遇到巡逻:前方有巡逻!请后退! 群嘲:都来抽我吧!哦~好爽~~ 牧师: /SAY 亲爱的,安全套已经给你戴上!放心向前冲!/施放 真言术 盾/飞吻 上蛋壳:八门盾甲,开`!!!===》%T 消失:我靠,打不起,我,我还躲不起吗我。我躲躲躲躲,我躲躲躲,我躲那噶达去啊~~(抄袭自大学自习曲) 复活:以仇恨王子伊诺鲁克之名将%T从地狱的深渊唤醒,为我而战吧我的勇士!! 联盟:前方发现LM数名,为了荣耀,兄弟们上啊`!! 补血:%t我正在对你进行救助,请坚持4秒施法时间,希尔瓦娜斯女王与你同在! 套蛋:%t已为你套上鸡蛋,Dark Lady bless U! 消失:哥哥有怪性骚扰我,赶快来救我! 法师: /S 变形术目标锁定:===%T===,一级准备/释放 魔法侦测 火球/S %T,向你飞去的那是什么?一只鸟?一架飞机?还是一个屁屁着火的侏儒?不!那是我的火球术!/释放 火球术 暴雪/S 冰雪女王的侧目,翡翠月亮的纯洁,我的心一片片落下,激起无数的优雅/释放 暴风雪 霜之新星/S 冰冷的心,在跳舞(这个我一般跳在空中放,哈哈)/释放 霜冻新星 烈焰风暴/S 比太阳还要炽热的元素,比飓风还要狂暴的精灵,我在这里向您请援,我在这里向您发誓,赐于我愤怒的力量吧,将阻挡在我面前的,那些傲慢而又愚蠢的东西,统统烧尽吧!/释放 烈焰风暴 炎爆/S 傲岸的火焰之神啊,我的心在心的手中跳动,您的怒火在我手中燃烧,借给我您无尽的力量吧,连众神的魂魄都击溃!/释放 炎爆术 奥术智慧/S 愿智慧常伴你左右,%T/释放 奥术智慧 /s 注意,我已将★%t★放遂近30秒,请大家攻击其他目标。/施放 放逐术(等级 2) 发石时/p 又香又甜的强效治疗石哪个要噢? 暗烧秒人时/s %t . 尝尝我华丽的秒杀吧。。。。。/施放 暗影灼烧(等级 5) 逃跑:好多精英怪啊!奶妈快跑,其他人统统冲上去顶!我冰住它们,不要忘记回来救我!!!/施放 霜之新星 变羊:我需要一个宝宝,已对〉〉〉%t〈〈〈施法,请大家不要打他 /p 这只羊是偶滴表抢~~~~/施放 魔法探测 /s 打雷啦,下雨啦,大家回去收衣服啦~/施放 暴风雪(等级 3) /S 累死了,让俺喘口气先。/USE 魔法苏打水 贼: 亡灵意志:口胡!这点小伎俩也敢拿出来现!统统给我败啊! 肾击:打的你半身不遂!让你老婆没性福! 消失:情况不妙,我闪先~~~ 剑刃乱舞:啊~~达~~~~~看我无双乱舞!! 开锁:开锁这种事情是很有技术含量DI~~~ 加速:临-兵-斗-者-皆-阵-列-在-前————疾风之术! 剔骨:%t 记着你爷爷名字——什么,你不识字…… 消失:你看我不到你看我不到你看我不到你看我不到…… 闷棍:%t,你说我怎么玩你呢? 凿击:3+5/6+9*9-9+4-1=? 呵呵晕了吧? DRU: /s %t,愿神永远忽悠着你/s 施放 野性印记 /p 正在宁静,想要命的大家往我身边挤呀!!/释放 宁静(等级X) /s %t小样的别跑,让俺拍你一爪子先!/施放 野性印记(等级X) /p 乖宝宝~睡觉觉~~正在催眠%t ,谁打我乖宝宝我跟谁急!/施放 催眠(等级x) /p 你看我不到~你看我不到~~安抚%t,大家从他屁股后边悄悄走哦/施放 安抚(登记X) 术士: /p 黑夜中之恶灵 地狱中之魔鬼/p 听从吾之召唤 尊从吾之旨意/p 穿过契约之门 显身于吾面前/p %t!吾之奴仆!醒来吧!/施放 召唤仪式 %t%你的灵魂已经被偶绑定,想要续回可以这样做:A、冲进怪准里去 B、跳崖 C、暂时未想到,自己看着办 虽然%t%你离我很远,但是你还是要和我说你想拉的吗,不可能你说你不想拉而我却偏要拉你,你想拉我却不拉你的啊。你是不是真的想拉啊,你不是真的想拉吧! 猎人: 装死: 不必理我,我自己会死! 猎人标记: 来,大家一起扁这个头上有箭头的,表可怜他~ 冰冻陷阱:挖个坑,看有没有笨蛋踩进来…… 恐吓野兽:小畜牲,偶吓死你! 装死:兄弟们顶住啊,偶诈死了先~~~~(备注:偶有RP起搏器的) 脱离:喂,%T,你要打的目标不在这里,到那边玩去~ XXX!我代表政府代表人民枪毙了你!! 编辑:加两条我自己的宏,我是矮人女性牧师。 复活:%t乖哦,芙蓉姐姐来复活你了。 MC:芙蓉姐姐对%t施展媚惑,%t被媚惑了,%t开始吐啊吐啊吐,%t开始攻击自己的同伴。
DarkBW
2005-07-18 10:02:48
10樓
哇,有意思,博大精深啊!

天荡漾
2005-10-31 18:19:34
11樓
哎!!!很多都看不懂!!!


不过还是要顶一下!!

深蓝之海
2005-11-10 16:04:48
12樓
宏这东西有固定机器才好用,我在网吧,每次都要重新设置,麻烦啊
法最无情
2006-03-16 09:06:55
13樓