游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3514|回复: 2

看了kingmark的无题,专贴一个这个 希望对大家有帮助!

[复制链接]

2

主题

10

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2005-1-26 08:51:00 | 显示全部楼层 |阅读模式
WOW???? (Advance Programming)

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

Chapter One

玩了WOW有一段?r?了,除了??虮旧硭?峁┑幕?竟δ苤??其他WOW的功能我都?量的?L?.在??我提供一下我??人的心得.

相信很多的玩家都知道,WOW有所?的合法外??COSMOS),但是WOW又非常的?栏竦淖ニ?^的非法外??那?合法的外?炫c非法的外?觳?e在哪?

其??所?的合法外??只是在於一些有心的玩家利用了WOW所提供的功能,以及指令,另外在WOW的??蚝诵纳?另外??了一些?助性?的SCRIPT??椭?[?蚪槊娴暮?易操作.至於非法外??就是利用任合??虮旧硭?]提供的功能?碓黾幼陨淼睦??包括了所?第三者程式third party program).

既然WOW本身有提供??拥墓δ?身?橥婕业奈???槭颤N不?量的利用?些好?呢?有?於台?惩婕以讷@得?些??上的困?(因?橛嘘P於?方面的??,大部分都是英文),我在??提出??,或?能?Ыo台?车耐婕伊硗庖环N的??蝮w?.

暴?雪在WOW的官方?站上有很明?的提到,UI的修改是玩家??哆[?蛘?w??中的一部分.但是什?是UI?UI修改又是什??

UI是USER INTERFACE(使用者介面),在WOW中,所有的UI都是模?化的,每一??按?,每一???窗都是?凫赌骋??模?的定?.玩家在玩??虻?r候,?K不是直接的??哆[?蚝诵南逻_??蛑噶?而是先在UI上面的?幼?然後在藉由UI的模?上下???蚝诵闹噶?例如我??按下??蛑泄?舻陌粹o,WOW???z查???按?的定?是什?,然後才?绦羞@??定?下的指令.

那?修改UI的好?又是什?呢???诱f好了.WOW本身所提供的UI,其背後的定?都是最基本的,最?化的.比如?快捷?按?的??,以及每??指令?幼?在按?以及?窗的??上,使以??稳菀咨鲜?橹饕?康?但是??哆M?玩家而言,又??X得WOW所提供的快捷?按?不?蛴?所以自己在UI上面加以修改,??泳筒坏?梢宰孕?Q定快捷?按?的?的?也可以把?些按??[在自己最喜?g的地方.

另外?於指令?幼魃????老鼠在UI上面的指令),WOW基本的UI?定都是一??指令一???幼?我??按一??按?,WOW做一???幼?但是我??可以自行?定UI,?到玩家的下?一??指令,WOW同?r做很多?幼?

比如?,WOW?玩家在攻?羯系倪x?袷?按TAB??屯婕艺页霎?面上距?最近的?橙?原始?定是20?的距?????,然後玩家必?按攻?舻陌粹o或是T,在??拥那?r下才????玩家下?了???指令,做了????幼?但是在UI的修改上,我??不但可以修改?面上距?最近的?橙说木嚯x????合?距?攻?舻耐婕?,我???可以?定按下TAB按?,不但???佣ㄎ痪嚯x最近的?橙?????娱_始攻??

在?????串?中,我主要是??χ噶?I上的?定提出??,因?殛P於?面上的?定已?有很多?成的???COSMOS).因此我?⑨???LASS上面?助型的UI?定.在藉由??上,?台?车耐婕??也有?C??孕性O?出最方便,最有效率的攻??法?施展,以及??物控制.

?然我???g迎玩家??θ魏蔚?I?定提出??,但是我不?得有能力回答.?竟我??人比?不喜?g去研究?面的排列,所以?方面花的功夫也比?少.



Chapter Two

上一篇文章介?了UI修改的最基本?念,在?篇文章中我?⑻峁?I修改上的最基本的?幼?工具以及?料?碓?


在我??要??I做任何的修改或是?作模?之前,我??必?先了?WOW的UI基本???.在WOW的?料?A?面,我??可以找的一??DATA的子目?.在???子目??面,包括了所有WOW??\用到的?n案,包括了模?,?D形,字型等等.?些都?嚎s在所?的MPQ?n案?面.拿我??人的?n案?碜隼??我的MPQ?n在Crogram FilesWorld of WarcraftData下面.而所有UI可以?用到的?n案都?嚎s在interface.mpq?n?.

要?z查MPQ?n案?面有些什?,我??人建?WinMPQ???程式.?榱吮苊獯蠹??奈曳挪《?在??我建?大家自行上GOOGLE查哪?可以下?WinMPQ.

因?檫[?虻?I的基本?定都在interface.mpq,所以我不建?大家直接???nterface.mpq?面的?n案直接修改.大家可以把所需要的?n案解?撼??只要做完修改後不存回interface.mpq?面,在??拥那?r下,都不??绊?到基本?定.

那?大家???修改完之後的?n案?存在哪呢?首先到WOW的目??面,然後?一??先的子目?叫做interface.以我??人的例子是C:Program FilesWorld of Warcraftinterface.然後大家可以把修改好或是?作好的?n案存在????料?A下面.?WOW?入??蛸Y料的?r候,WOW???拥竭@???料?A?面?z查哪些模?因??入.

?然UI修改可以?用到WOW?有的?n案,但是?榱朔奖憬?W,我在??提出的例子?⒉??玫?OW?有的?n案.事??上,除了要做??虍?面上的?定,大部分的情?r下,我??不?得要用到WOW?有的UI?n案,只要我???作模?用的都是WOW所提供的核心指令就可以了.

在?作模?之前,我先介?一下每一??模?所需要的最基本的?n案.每??模?都需要一??介??n,toc?n.定??n,xml,以及核心?n,lua?n.?三??n案都可以用??本或是任何的文???理程式?碜鲂薷?

?榱朔奖憬榻B,我?出一????蔚睦??斫忉??三???n案.?在?我?????? Hi 模?.???模??你?绦械?r候,他??谀愕倪[?虍?面上出?一?? Hi 的??.

因?槲?????模?叫做Hi,所以我??需要三???n案

hi.toc
hi.xml
hi.lua
(模?的名?最好??n案的名?相???

?在?我介?一下hi.toc的格式:

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

在## Interface:後面的?底执?砹四壳?OW的版本.?作模?的作者有??站S持模?支援最新版的WOW,所以每?WOW做出更新的?r候,模?的?作人得?z查模?是否?能工作,??定?能工作的?r候,就可以更新射???底?更新????底钟???意?:第一,WOW??z查每??模?的????底?如果?WOW版本相?合,那?就??d入,不然就??n掉.第二,玩家可以?定???模?的版本是可以使用的版本.

我在??不建?除了模?的?作人修改????底?因?橛?r候模?的??可能很??,在不是?作人的情?r下,很可能不知道到底?]有更新的模?是否?跟最新版的WOW相容.如果玩家自行更改????底肿?它跟WOW的版本?底忠?拥脑?,WOW就???虞d入???模?.如果模?不相容的情?r下,很可能??斐蛇[?蛏系睦?_.

??到??,玩家可能???要去哪?找WOW最新的版本?底???绦?OW??虻?r候,在登入的?面上的最左下方,可以找到?????.以目前我?????教?W的?r?而言,WOW最新版所提供的??是Version 1.2.1 (4150).大家要用的是4150????底?而不是1.2.1????底?

在## Title:後面,模??作人打的字元就是???模?的名?.

在## Notes:後面,模??作人打的字元就是???模?的?介

## OptionalDeps:後面, 模??作人?耸境鲞@??模?是否有其他的?外的模?可以支援???模?.????地方有?耸酒渌?哪=M的?r候,?K不代表玩家??也必?要有????外模?,只是有了????外的模?,可以?????模?的功能更加完整.

## Dependencies:後面, 模??作人得?耸境鲞@??模?必?要使用的的?n案(包括了必?使用到其他模?的?n案,?注意,上面??裥阅=M的?n案?K不需要在???耸?.

因?檫@??教?W模??K不需要用到其他的模?,所以只需要?耸境瞿=M定??n hi.xml.

hi.xml的介?:

基本上XML可以?做?????n案(HTML)?砜?可是?栏竦?碚f,XML是拿?碜?槎?x上或是?料?鬏?上所使用的.如果玩家???ML的?法以及如何?用有?趣,可以到http://www.w3.org/XML/查?更??的?料

?在我只介?XML在WOW模???上?如何?用.


  Code: [Copy to clipboard]   
<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>



大家可以忽略前面?仔?lt;Ui xmlns ......... />.基本上每一??WOW模?XML?n都必?要有??仔?

重要的是   <Script file="hi.lua"/>  在??大家得定?出模?的核心?n案是什?.以我??目前的例子,核心?n案是hi.lua.

在 <Frame name="hi_core"> ??定?出模?在??虍?面中要使用的的子?面的名?.???名?必?是?一?o二的,避免?其他的模??面?突到.

在上面的例子中我??可以看到<OnLoad>和<OnEvent>的?耸?基本上<OnLoad>的意思是?WOW在?入??蚪槊娴?r候,因?要做出什??幼?以我??的例子,我??要在WOW??蜓e??砸????到凶?quot;VARIABLES_LOADED".
<OnEvent>的意思是,如果?生了什?事件,那??做出什??幼?矸??以我??的例子,如果???quot;VARIABLES_LOADED"成功的?,我??就?绦?i_initialize(). ?然,如果?]有??猿晒?也就不??惺录?l生,?代表了我??的模??]有?入到??蜓e面,所以我??也就?]有後??幼?

hi.lua的介?:
lua 是一??script?言.WOW所有的UI模?都是建立在????言之上.???ua想要更深入的了解,?到官方?站:http://www.lua.org/manual/5.0/ 在??可以查到所有?於lua的?法以及使用方式.

?在?我介?我??目前的例子:


  Code: [Copy to clipboard]   
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是第一??被呼叫的.在??我??自行?定了一些"/"指令.我想大家因???哆[?蜓e面的一些"/"指令?K不陌生.

同?拥奈??也可以?臀??的模??定?些"/"指令.
SlashCmdList["HIHI"] = hi_command; 代表的意思是如果我????的"/"指令被呼叫的?,我??因??绦?i_command?一??function.
SLASH_HIHI1 = "/hihi";
SLASH_HIHI2 = "/您好";
??是?臀??的"/"指令定出名?,目前我?不?定我??是否可以自行自做出中文指令,但是我想只要可以在WOW?入中文,上面的??就因??]???.(所以??可以在WOW?入中文的玩家?y?一下.
??要稍微注意的一?是SlashCmdList["HIHI"]?面的HIHI必?要和SLASH_HIHI1和SLASH_HIHI2 的HIHI依??如果我??把HIHI改成NIHAO 那?就???成SlashCmdList["NIHAO"], SLASH_NIHAO1, 以及SLASH_NIHAO2. 至於HIHI 或是 NIHAO 後面的 1 和 2 只是???代表了同?拥闹噶?有哪些??的指令.

?我??打入了"/hihi"或是"/您好" 就??绦邢旅娴?unction
function hi_command(msg)
message(msg);
end
基本上只是在??虍?面上出?一???窗,然後?窗上面?示我??在指令後面打入的?息.

例如我???入"/hihi ?y?"

那?出?的?窗就??@示 "?y?" 在那上面.

好了,我????好?三???n案了.?在我??要告?WOW?入我??的HI模?.
首先,到"C:Program FilesWorld of Warcraftinterface"???子目??面.如果??]有???子目?的?,自行?一??新的.然後在???目??面?一??新的目?叫做"AddOns"所有玩家??的模?都因??[在???目??面.然後在"AddOns"???目??面在?一??目?叫做"HI".最後把我??做好的三???n案存到???目??面.
"C:Program FilesWorld of WarcraftinterfaceAddOnsHI"

?在我??可以?y????模?了喔.

稍微介?一下WOW?易管理模?的方式.如果?玩家有安?自行??的模?的?(比如?COSMOS),在?入角色??蔚?r候,我??可以看到?面的左下方有一??Addons的按?.大家可以在者?自行??袼?M?_?⒌哪=M.在模?名子前面打勾,表示??窠巧?????蚓??_始?入模?.?]打勾就代表不??d入. ?注意,WOW有模??入的上限.所果所有?入的模?用到的?源超?32MB,?????雨P?.??r候就需要去管理介面?掉一些模?喔.

下一篇文章,我?⒔檀蠹胰绾卧?ua?n案?面?用WOW的核心指令,以及如何只使用3???n案,就可以??出很有?椭??CRIPT.



Chapter Three

在?硪幌盗械奈恼?我要教?人的玩家如何利用模???,有效率的?绦羞h距?,近距?,以及??物攻?? ?便介?一些WOW的核心指令.


我想玩??路??虻耐婕?多多少少都因???外??什?是外??其??就是能自?拥?椭?婕?绦幸恍┲噶?基本上很?似MACRO(?]??MACRO的人,因?有??EZSCRIPT吧)

WOW本身就有提供MACRO??拥墓δ?只要我??在??蛑休?入"MACRO"之後,我??就可以?始??我??自己的?助指令.但是WOW的MACRO有很多限制.第一,WOW的MACRO是半自?拥?意思就是?,你一定要按下某一????按?,或是老鼠按?,才能?绦心闼?O定的MACRO.第二,??蛑械?ACRO有字?瞪系南拗?最多只能?入255??英文字元.第三,WOW的MACRO?o法?定?r?上面的?隔.在MACRO?面的所有的指令??灰淮?绦?第四,如果你所?绦械暮芏嘀噶钪杏泻芏喽加兄噶罾?s?r?(例如魔法的COOLDOWM),那?MACRO只??绦械谝??可以?绦械闹噶?

同?拥??我????模?的?r候,我??也同?邮芟揿哆@?拥南拗?但是?s?]有255??英文字元的限定,在??拥那?r下,我??可以自做更??的指令方式.

今天我要教大家的模?是?人?助模?.

WOW的?人是?凫哆h距?攻?舻?挝?最需要控制的是如何有要的利用各式的ASPECT以及??物攻???近距?攻?舻?r候,?人需要用到ASPECT OF MONKEY,??距?攻?舻?r候,需要用到ASPECT OF HAWK. 但是我想很多人因?都??龅?同?r指示??物攻??玩家攻??以及??QASPECT的?r候,??置δ_?y.?在我??的目?耸侨绾卧O?一??模?可以?我??在操作上更???

?人?助模???目??
1:玩家主?庸?舻?r候,??物也???庸??WOW的基本模式是,玩家按攻??然後?要按??物攻??.

2:玩家???物永?是攻?敉???目??以最快最有效率的方式??p少?痿Y?面上的危?C.避免??物?玩家通?r攻?舨煌??橙?造成最後的?果是玩家???物同?r?亡.

3:有效的辨?玩家的攻?舴绞?然後?绦凶钣行?实?SPECT.例如玩家近距?攻?舻?r候不是在ASPECT OF HAWK的??r下.

4:有效的?用?距?攻?艏寄?包括了?省MANA,快速???橙四?说鹊?

好了,有了以上的目???在?始?我???碓O?.首先,?硌u作模?所需要的最基本的三???n案.因?槲姨嫖业哪=M??的名?叫做HunterAssistant(?人?助),所以我的三??基本?n案叫做:
HunterAssistant.toc
HunterAssistant.xml
HunterAssistant.lua


  Code: [Copy to clipboard]   
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>



我?⒉辉诘谶@????n案多做解?.有疑??的,??⒖忌弦黄?恼??竟我只使用的最??蔚脑O?.


?在的重?LUA核心?n.我先把?n案?热萘谐??然後在以另外的文章??的解?每??指令.

HunterAssistant.lua:


  Code: [Copy to clipboard]   
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: [Copy to clipboard]   
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: [Copy to clipboard]   
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: [Copy to clipboard]   
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: [Copy to clipboard]   
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: [Copy to clipboard]   
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: [Copy to clipboard]   
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: [Copy to clipboard]   
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: [Copy to clipboard]   
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: [Copy to clipboard]   
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"的空格.??釉诓榭闯淌酱a,一定??斐衫?_.如果大家在看程式???劬ν吹?r候,????.

?在,?我??研究一下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的???.

其?????]有什?特?e的.??只是?湍=M?定一些??蔚?quot;/"指令.??砦??可以直接把?些指令?用到??虻?ACRO中. ?注意的一?是,每一??指令都有一??FUNCTION相???另外,我每一??指令都一??全名指令,以及一?????指令(方便使用).在指令命名??上,我以看到指令名?就大概能猜到使用的?果是什?.?有就是每??指令前面加上HA_??幽苡行У谋苊飧?渌?=M的指令?突到.另外有???指令後面有???底??些是代表了所使用到的?人技能是有等?高低的.比如?HA_HunterMarkI使用的是等?1的Hunter's Mark,HA_HunterMarkII使用的是等?2的Hunter's Mark.

另外,我的指令排列是以英文?序?橹???臃奖阄??人?ふ?UG.

?在?我????往下看.

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"的意思就是主角?挝坏??物.

我在?????ssistUnit("pet")??的原因是,?你的??物在攻?舻?r候?橙说?r候,你跟你的??物所??竦?橙瞬灰?得是同一??,所以我??要?定主角跟??物攻?舻?ο笫峭???.

(注意:目前我??拥脑O?好像有???上的???.思考??到底是主角??椭??物?是??物?椭?鹘???蛑械幕?驹O定是主角受到攻????物就????椭?谝??攻?糁鹘堑?橙?可是如果好???人攻?糁鹘???物?是???P牡陌训谝???橙私?Q掉.所以我一?始??@?釉O?,?P牡南?椭??物解?Q掉第一???橙?可是?遇到我就是有特殊原因要先解?Q掉其他的?橙说?r候(例如某些特殊任??,我??拥脑O?反而造成困?_,因?橹灰?乙还??我的?ο缶途娃D?Q到??物的?橙肆?所以在未?淼陌姹局?我可能??O定另一?攻?羰???物永??椭?鹘枪?敉????橙?使用的指令是 PetAssistUnit(&quotlayer"). "Player"就是代表主角的意思.)

下一行, if(not UnitExists("target")) then
TargetNearestEnemy();
end;
??的意思是?z查?绦?兔Φ闹噶钪??AssistUnit())到底有?]有?橙?如果主角的??物?]有在?痿Y??B,那?我???橙说??B就是?]有???UnitExists("target")) 就是?z查我??有?]有??袢魏蔚哪?????也是WOW的核心指令之一. ?然如果我??有??衲??可是目?耸怯泻?挝荒?不用???WOW的??本?砭褪?o法攻?粲押?挝坏?那?TargetNearestEnemy()又是什?意思呢?就是自?舆x?窬嚯x最近的非有好?挝划?作目?诉x?.所以?一段的意思就是,如果主角跟主角的??物都?]有目?说脑?,?椭鹘?犹粢??最近的非有好?挝划?作目??

在?
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

??我定?了一?????,以及一?????OUND(中文是找到的意思),??????挡皇?OW的?S凶???而是LUA的?法喔.?槭颤N需要???????因?楫?我??在近距?攻?舻?r候,我必?要?定主角是在於ASPECT OF MONKEY 之下,有了?些??悼梢苑奖阄?碜?z查.

while (UnitBuff("player",x))的意思就是如果在主角的身上可以找到Buff的?. UnitBuff("player",1)???ふ抑鹘巧砩系谝??buff的?料,然後?骰赜?息.如果?]找到,就??骰匾??否定的?息.UnitBuff("player",2)就是?ふ业诙??buff的?料.

2

主题

10

帖子

15

积分

新手上路

Rank: 1

积分
15
 楼主| 发表于 2005-1-26 08:51:00 | 显示全部楼层

Re:看了kingmark的无题,专贴一个这个 希望对大家有帮助!

if(string.find(UnitBuff("player",x), "Monkey"))
string.find是lua?言上的指令,不是WOW的核心指令.???指令的目的是?ふ乙???息中的字串是否有特殊的字元.所以?一整段的意思是找?ぶ鹘巧砩系?uff的??是否有MONKEY(猴子)的字串.如果有的?,就把FOUND?定??RUE.

if(not found) then
CastSpellByName("Aspect of the Monkey");
?一段就是如果?念^到尾都?]有找相?的buff的?,代表了主角?]有施展"Aspect of the Monkey",所以我??就?绦惺┱辜寄艿闹噶?astSpellByName("Aspect of the Monkey").

??到??,?我?便提出一些要?.不?缘么蠹矣?]有??到,在???function?面,?念^到尾只有一??指令需要冷?s?r?那就是CastSpellByName("Aspect of the Monkey").其他,比如?攻??全部都不需要冷?s?r?.?也就是?槭颤N??多指令都可以??成一???我恢噶?但是因??astSpellByName("Aspect of the Monkey")需要冷?s?r?,所以我把她?[在最後?绦?避免??.另外一?就是,很多人在找?ぶ鹘巧砩系?uff?料的?r候,喜?g直接用UnitBuff("player",1)?s?]有想到其??主角身上可能有很多的buff呢.

所以我??拥脑O?一定可以?保如果主角已?施展了Aspect of the Monkey,就??Σ??匮}施展第二次(浪?mana喔).


至於???function ?面的一些IF, WHILE, NOT等等的?用以及正?的?法,就?大家到LUA的官方?站去看.我就不多解?了.

在?硎谦C人的普通?距?攻?
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") ???是?人?S械倪h距?自?庸?舻闹噶?同?拥倪@??指令可以跟其他需要冷?s?r?的指令同?r使用.另外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
?一段?]有什?特?e的,唯一的好?就是?主角?始使用MARK的技能的?r候,就?始命令??物攻??我??不需要按????幼?另外,Hunter's Mark 也是有等?之分的,所以我??了其他相???牡燃?指令
注意???FUNCTION我??]有完全的完成,因?槲?]有?z查是否?橙艘呀?被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

?一??跟普通?距?攻?舻闹噶詈芟?但是?K不是使用普通的AUTO SHOT,而是使用了Serpent Sting.另外?一??指令不??z查主角本身是否施展了ASPECT OF HAWK.因??erpent Sting跟aspect of the hawk都要冷?s?r?,?????在一起,只??绦衅渲械囊??,那?就一?意?都?]有了.既然????槭颤N要???一??指令?其?????指令??z查?橙松砩鲜欠褚呀?被施展了Serpent Sting,?竟Serpent Sting?]有加成效?,所以我??要避免重?施展Serpent Sting.而WOW的基本Serpent Sting指令是不??鲞@?拥?z查的,所以我???得一直盯著?橙说馁Y?看著,避免浪?MANA.可是??了另外的???指令,玩家根本不用??睦速MMANA,只要想到了就?绦幸幌?反?????z查,也不????OTU SHOT的?幼?更不??速MMANA.另外,???指令也有??其他不同等?的相???噶?

最後
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
???指令只是我??好玩拿??y?用的,??绦羞@??指令的?r候,主角??换サ氖褂?SPECT OF MONKEY 或者 ASPECT OF HAWK.

模?的核心指令介?到??,下一篇文章?⒔掏婕胰绾卧谶[?蜓e?用?些指令.

目前我??的模?有了最基本的三???n案了.?在?我??把?三???n案放入Crogram FilesWorld of WarcraftInterfaceAddOnsHunterAssistant????料?A?面.然後?绦羞[??

?在?我解?一下WOW上面所?的斜?指令("/指令")?如何?用.

大家因?都清楚如何的?用感情指令,或是交?指令.?些都是斜?指令.但是WOW?有一些斜?指令是?o法直接的?入, 比如?"/attack". 基本上?是WOW官方??的攻?糁噶?其背後只是很??蔚暮艚辛?astSpellByName("Attack"). 但是?槭颤N我???o法直接使用?些指令呢?因?楸╋L雪?榱吮苊馔婕依?闷渌?某淌?碓O?非法的MACRO.

怎??呢?因??OW的MACRO?]有?r??隔??,避免玩家???C器人,那?玩家???C器人就必?利用其他的程式.如果,???C器人,?C器人程式就可以直接的模?M???入指令,而不??绊?到玩家??痘?蟮牟僮?所以WOW把很多的斜?指令的操作?定成只有在WOW的MACRO下才能使用.你??一??MACRO以及MACRO?D像按?,你要?绦羞@??MACRO,你就必???@??按?按一下,WOW才??绦羞@???幼?

?然,?是有其他的?法?[?暴?雪??拥脑O?,但是我不??︻?似??拥???做出任和解?.因?楸╋L雪?力的????蛎忪锻?斓那秩?身?橥婕业奈乙灿辛x?找?椭?╋L雪.

有??拥南拗频男本?指令包括了所有的??褂玫?绦刑厥饧寄艿闹噶?所以?我????的模?有用到?绦刑厥饧寄艿?r候,我??的斜?指令也只能在WOW下面的MACRO才能?绦?(?然,我??的?人?助模??是?用在MACRO下面比?好,?竟在?痿Y的?r候??有?r?慢慢的的用???入指令,我??又不是?C器人)

要使用WOW的MACRO很???只要在??蛑休?入"/macro"或是按下Esc 然後???acro的??

在macor的?面,我??必???acro??褚???D像按?,替macro命名,然後?入我??想要?macro的指令.

?在?我列出?人?助模?的?易斜?指令:
Hunter's Mark 包括了不同的等?
/hahmi
/hahmii

Melee Attack(近距?攻??
/haam"

Range Attack (?距?攻??包括了不同的等?
/haari
/haarii

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

?在我??只要把macro的?D像按???窈?然後???名子,最後在底下?入指令的地方,挑一??你想要?绦械妮o助指令?入就好了. 注意喔,一??macro只能使用模?的一??指令喔,因?榫退隳爿?入了很多??,在?绦?acro的?r候,??蛞仓??绦星橹械囊??而已.(冷?s?r?的考量)

?你?定好了macro之後,WALA~~~,你就可以把????D形按?抓到快捷列上面使用了~~~就像是使用任何其他的基本?D形按?依?余?好?是,你按一次按?,?s等於其他?]有用?助模?人按好?状伟粹o依?余??????湍阕鲆恍╊~外的?z查呢.有效率了多吧.


下一次,我?⒔檀蠹胰绾卧O??助模?可以?痛蠹以诎胱?拥氖┱?UFF,?ο笠??胱?拥倪x?耜?友,??物,或是自己.


附?1:因?槲??人玩了10角色,包括了?盟的每一??CLASS,在未?淼娜兆友e,我???欢ㄆ诘奶孀约??模?.如此同?r,我也??蒙?砼c大家分享.但是我?⒉??倩ㄟ@?多的?r???解?每一??指令.除非有?友提出???,那?r我??诒M力回答.

附?2:有?WOW的核心?放?玩家使用的指令,大家可以到?????找到.但是??不是完整的列表,?明也不是很清楚,不?大家?⒕偷挠??
http://www.wowwiki.com/World_of_Warcraft_API

附?3:最有效率的研究模?的方式,就是到官?的UI Customization的???⑴c??喔.也?大家??业揭恍┮庀氩坏?但是又很有?椭?哪=M喔.我??人就已???有人??了一??挖??褚?哪=M,???模???涯阕畹竭^的挖?以及?袼?的地???下??然後?示在地?D上.怎???很有用吧.
http://forums.worldofwarcraft.com/board.aspx?fn=wow-interface-customization

Chapter Five
或?我在模?解?以及使用教?W方面,因??裼酶???蔚睦??碜?大家能更容易上手.所以我?Q定不要直接的把我??人??好的模?拿上??而是先的教大家如何使用WOW的MACRO,以及呼叫一些WOW的指令.



首先?我重新的介?一下WOW的MACOR
(基本?料?碓  魔?台??http://www.wowtw.game.tw/)


在"魔?台??quot;的???,我??可以找到很清楚的MACOR中文定?以及解?:

宏[Macro]使你能???建自己???且非常酷的命令集,你可以通???粢??按?便完成一系列的命令。宏?碛性S多用法。

宏的??建

?入“/macro”或者??粽??[talk]按?并且??窈?Macro]??,????出一???υ?框,里面??著你?有的宏。在?始的?r候里面????]有任何宏。
???υ?框底部的”new”按?,????出另外一???υ?框,其中要求你?入宏的名?并且?檫@??宏??褚???D?恕
?你的宏命名,??褚??容易???的名字。例如,?入“assist[?f助]”。
??褚???D?恕_@里我????竦氖且话?Α
??簟?kay”按?。你?在能?蛟谀愕暮?υ?框里看到???宏的名?(assist),在名?的旁?有你??才??竦?D????。
?在在assist[?f助]?D?松宵c鼠?俗箧I加亮它。除了“new”按?外,同?r也有一??按?用?砀淖?你的宏的名?和?D?耍?员隳阋院笙敫淖?它的名?或者??褚??不同的?D?恕
一旦你的“assist”?D?耸羌恿??B,你就可以向下移?幽愕氖?酥羔??入“enter macro commands[?入宏命令]的?^域。在?里你可以?入你想????宏按????的命令。
?入“/assist Nebu[?f助Nebu]”。
?在移?幽愕氖?酥羔?回到?Φ?D??assist[?f助]宏),在????D?松?合率?说淖箧I不??。
?在拖??D?说侥愕?幼?l的空槽里去。
?你要使用???新的宏的?r候,?入????幼靼粹o????底只蛘咧苯佑益I??舭粹o本身。
?在你?碛辛艘??宏按?,它?⒃谄渌?婕?Nebu)攻?舻?r候?f助他。?o?何?r,?Nebu攻?裟?说?r候,??暨@??按?后你的目??????樗??诠?舻哪?恕


以上是"魔?台??quot;?予MACRO的中文解?,以及一??很??蔚睦??

?在?我??稍微加??一下上面的例子.

上面的例子?面,我??看到了MACRO的?热葜挥幸恍

/assist Nebu

?在我???砑??一下,????MACRO不但??f助,???R上攻??改?的MACRO??竦紫逻@??

/assist Nebu
/attack

好了,?在我??的MACRO有?尚辛????MACRO的目的是,?f助Nebu(指定Nebu的?橙?,然後攻??

那??在?我????一??很??我约??用的MACRO.加?Nebu是一??牧??,我??要??ebu??一??自??妥约菏褂没?局委?的MACRO.

/target Nebu
/cast Lesser Heal(Rank 1)

以上的MACRO在?绦械?r候,每次都??x??ebu作?橹委?的?ο?其中,/target Nebu 是???ebu??ο?/cast Lesser Heal(Rank 1)是???ο笫┱?esser Heal第一?的法?.

我想以上的例子因?已?很清楚的解?了基本的MACRO?如何使用.可是在在"魔?台??quot;的???也有提到:

宏的限制
宏是有?度限制的,如果你的信息太?了,就??p一些!(?然)

?一?是?]有?的,因??OW的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)")

?些核心指令除了可以使用官方的斜?指令?砗艚兄??我???有其他?追N方式?硎褂眠@些核心指令.

第一?方式,直接在MACRO?使用?些核心指令.要直接使用?些核心指令,我??必?用到一??斜?指令叫做/Script.

以下是把上面的MACRO例子改成使用核心指令的方式.
第一??MACRO ?椭?ebu攻??橙
/Script AssistUnit("Nebu");
/Script Attack("Target");
第二??MACRO???ebu作?橹委?的?ο
/Script TargetByName("Nebu");
/Script CastSpellByName("Lesser Heal(Rank 1)");


要注意的一?是,?使用了/Script的?r候,MACRO的每一行指令都要有";"作?榻Y尾.

直接使用核心指令的好?是什??因??OW?K?]有?兔恳??核心指令?????男本?指令,而很多的核心指令的功能?s是非常??大的.

核心指令除了能直接利用在MACRO之外,另一??用途就是可以使用在模??面使用.?於使用上的例子,大家可以?⒖嘉仪?灼?恼滤?峁┑墨C人?助模?.在??我??就可以利用模?所提供的斜?指令?碜?相的突破了MACRO上面的字元限制了.

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

>※littlethe(?|周小星星)提到:
>我是??programmer,
>macro在程式中是指巨集指令,
>若我?]有弄?的?,
>???macro是不是用於制定"???幼?quot;用的?
>
>按???,
>人物就??龀鲞B????幼?
>
>若是???
>那wow可?真特?e,
>?放玩家???macro,
>
>等我拿到wow?r,
>要好好的?硗婵纯

恩~?]有?喔

可是WOW本身的MACRO有很多的限制.可是如果玩家使用非??虮旧淼?ACRO?硗?OW,暴?雪就可以砍此玩家的?ぬ?.

WOW本身的MACRO先天上就?]有?r?的??.也就是?,MACRO?面所有的?幼髦噶?通通?作及?r指令(?然,非常?栏竦?碚f?是??邢柔犴?序上的差?e,可是?r?上的差?e只有不到0.1秒.)??拥脑O?是避免玩家?作?C器人.

另外,WOW很多的技能有冷?s?r?,如果把多??有冷?s?r?的技能??入MACRO,那?MACRO只??绦械谝???到?l件的技能,其他有冷?s?r?的技能都??缓雎?
>※littlethe(?|周小星星)提到:
>?米??
>那??拥脑?,
>那?不就不能使用??法?了?
>法?也有cast time不是??
>?是wow的法?都是direct的?
>哇累...
>本?硐胝f能不能???先??再插?血丈後嗜血之?的


WOW的技能大?能分?槿?N,即?r的,有冷?s?r?的,需要施展?r?的.

即?r的就是可以一直??使用.

有冷?s?r?的就是在使用?後,有一???r?限制是不能使用同一招.另外,使用??技能之後,???写蠹s不到一秒的?r??o法使用任何其他的技能.

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

所以只要是有被?r?限制上的技能,在MACRO?,就只有一??可以被???而且最好是?[在MACRO的最後一行.如果?[在太前面,那?很可能就??沟冕崦娴募?r技能被?醯?

>※willllee(balmung)提到:
>那可以用macro?砼浜掀渌?淌?幔


使用任何不是魔??元本身所提供的功能??绦羞[??都?反了魔??元的使用?l?.所以我?o法在??回答您所提出的其他的相????.


但是有一?可以?定的是,魔??元所提供的核心指令,已?可以做出?V大的?境判?嗔?包括判定血量多少,?友以及其??物的??B,?橙说??B,等等.

目前官方???弦呀?有很多的模?能提供?似的功能.包括?自身血量低於某百分比,?绦?幼鞯?r候,???妥约貉a血(魔法或是物件,取?Q於是否在?痿Y中),以及根???友的血量百分比??Q定??物???椭????友攻??

如果有?趣的?友,甚至可以??出根??橙说??B做出不同的攻?艋蚴欠??哪=M.

基本上,?些都可以只用到核心指令?磉_到的.

11

主题

114

帖子

118

积分

注册会员

Rank: 2

积分
118
QQ
发表于 2005-1-26 10:58:00 | 显示全部楼层

Re:看了kingmark的无题,专贴一个这个 希望对大家有帮助!

好长,不看已经头晕了~~~~~~~~~~~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-24 04:43

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表