u盘工具-pin码是什么意思
![魔兽世界 大脚](/uploads/image/0392.jpg)
2023年4月4日发(作者:加载驱动失败)
1
魔兽世界插件三部曲之一----TOC
参考文献:/TOC@Wowwiki(魔兽世界维基百科)
摘要:
《魔兽世界》之所以会被数以千万的玩家所追捧而风靡全球,不仅仅在于它本身游戏内
容的丰富和具有可玩性高,操作性强等优点,还在于它有一个比较完善的系统体系。WOW
之所以经久的另一个原因就是,BLZ为了让玩家在游戏过程中能更好的适应习惯游戏的操
作,改善游戏操作环境而开放了“官方API函数接口”,让玩家可以在开放并授权的代码规则
下自己定义自己的用户界面(UserInterface,简称UI)。
从05年运营至今,BLZ力求让游戏中的每一个细节都做到人性化,为此不断完善游戏
系统...BLZ知道玩家在游戏过程中会对部分游戏功能和操作的不适应,可能会需要一些第三
方软件来辅助他们游戏,于是乎,便有了WOWAPI(官方API函数接口),而事实上,在随
着对游戏内容的不断了解和对游戏操作的熟悉后,玩家确实会渐渐的发现一些官方设置不如
人意的地方,例如游戏内包裹打开的繁琐,内置动作条的局限,战斗提示的缺失,这些都或
多或少影响了玩家游戏的操作性。同时UI接口的开放,让更多的编程爱好者、编程技术人
员在休息之余投入到了WOW的插件开发,给WOW又增加了一份新的乐趣。通过游戏一
些界面的修改,各种类型的插件辅助完善其游戏本身,以及BLZ在每次更新过程中对API进
行的完善修正,可以这么说,WOW已经逐渐演变成续Windows之后的游戏中的"Windows".UI
的添加使用,造就了WOW的繁荣,经久不衰...
不过,UI制作需要了解一些专业的编程知识,因此大部分玩家还没有能力自己制作UI,
只有一些熟悉XML和LUA语言的编程爱好者或者一些插件制作工作室能为我们提供他们
制作的UI,并且放入WOW文件夹内发挥作用,这被称为X件(AddOn)。插件需要严格
按照暴雪所设定的开源函数所编制,并且不能加入任何延时指令,即必须按照以下规则:“任
何一个技能的施放必须由一个单独的鼠标或者键盘的物理动作来触发。”这就限制了插件不
能做出自动施法的功能。插件并没有任何可执行文件,只是由一些以lua、xml、toc为后缀
名的文件组成,将他们装到一个文件夹里,放置到魔兽世界文件夹下由暴雪指定的文件夹里
就能够让《魔兽世界》来调用这些文件,这也是插件和非法第三方软件的最大区别。一个正
常安全的UI只可能包含LUA、XML、BLP、TGA等脚本及资源文件,绝不可能含有EXE、
COM、SCR等等可执行文件和以及.js、.vbs…脚本的,所有的脚本及资源文件全部是在玩家
选择人物及载入插件列表后由WOW的脚本解释器编译执行的,这个时候所有的关于用户
名及密码的操作都已结束,所以合法的插件是不可能盗号的。就目前来讲,WOW系统的这
个LUA脚本语言和WOWUI提供的API接口还没有发现漏洞,所以插件是无法盗取你的
帐号的。不过需要注意的是,BLZ虽然开放了WOWAPI,但是并没有承诺对其进行技术支
持,所以错误的使用插件可能让游戏不正常甚至出错,如果玩家对插件没有足够的了解,那
么建议玩家并不要使用插件。
〓TOC新手教程〓
魔兽世界的插件结构:
┗
┗
┗<*AddonName*>(以插件名字命名的文件夹)
┣*AddonName*.toc(插件的加载信息)
2
┣*AddonName*.xml(插件定义文档)
┣*AddonName*.lua(插件脚本文件)
┣...
任何一个ADDONS都是由3种文件组成:.
这里先介绍下*.TOC的结构和写法,TOC全称为TableofContents,就是目录索引的意
思,是ADDONS的标签,就好比是一本书的目录,它将告诉WOW我们所编写插件的名字、
作者、版本号、注释、主要文件、依赖文件、保存文件等,所以任何一个ADDONS中TOC
文件都是必不可少的。
简单的来说*.toc中标注了关于插件信息的定义,以及需要加载的*.xml的位置。*.xml
是插件的核心,包括界面、功能等元素都在其内。*.lua是一种嵌入式脚本语言,在WoW中
实现*.xml调用的函数。换句话说,*.toc告诉WoW插件的名字和*.xml的位置,*.xml告诉
WoW插件都有些什么元素,怎么工作,具体如何操作则交由*.lua来处理。
引用:
官方注解:
TheTOCformatforfilesdefinesinformationabouteachaddoninstalled,aswellasspecify
/rrentlyrequiredforanaddontobe
recognized,filenamemustmatchthefolder
nameinorderforittoberecognizedbyWoW;however,anyotherfilescanbenamedwhatever
youwantaslongastheyhavetheproperextensionandarelistedintheTOCorinanXMLfile
inside
〓XML用户界面〓
魔兽世界有一个相当强大的创建用户界面的布局引擎。当组合一个附着UI元素行为的的
LUA脚本时,就创建了一个灵活、完整的游戏UI,这可以很好的创建一个自定义的插件。
为了能让这些程序正确的执行,那么至少应该在Interface目录下包含一个FrameXml目录。
(这个目录默认是隐藏的,你可以通过WinMpq软件打开来找到这个文件夹)
引用:
PS:如果已经熟练的使用这门语言,关于更多的知识请参阅
[url=/xml]/xml[/url]
一个XML文件是一个包含了起始和结束标记元素的集合,一个用户界面描述文件也不例外。
在一个用户界面的XML中有2种主要的元素类型。第一个类型用于声明一个用户界面中的
部件,如按钮、框架、复选框,我们称其为部件元素。第二个元素类型总是出现在第一个元
素类型的内部,用于定义部件的属性和行为,我们称其为属性元素。下面是一个例子:
引用:
10
在这里Button元素是第一个类型元素,也就是说是一个部件元素。它出现在这个XML
文件中促使一个名为MyButton的按钮被创建。这个元素内部中的Anchors定义了它的属性,
因此这些是第二个元素类型,也就是说是一个属性元素。一般的UI结构总是这样的,你使
用一个元素来表现一个部件,并且在其内部使用其他元素来表现它的属性。并且他们是可以
嵌套的,举个例子:
代码:
在这个例子中有二个部件元素(Frame和Button)和多个属性元素(Anchors、Anchor)。
这里例子创建了一个框架并且在其内部还包含了一个按钮。在这里MyButton是MyFrame
的子元素(包含在其内部),而MyFrame是MyButton的父元素。这里需要注意的是XML
对空元素(即元素没有值)的语法约束。(
面例子中出现的name属性。一个正确完整的XML文件必须正确包含一个名为UI的元素
作为其根元素(即第一个需要声明的元素,除XML
文件本身的声明外)。下面是一个完整的用户界面描述文件的迷你示例(你可以复制以下代
码到你的XML文件中):
代码:
xmlns:xsi="/2001/XMLSchema-instance"
xsi:schemaLocation="/wow/ui/..">
11
这个文件创建一个名为MyFrame单独的框架。然而这个框架将是不可见的并且其中没有任
何的内容。
〓命名部件〓
每一个部件必须有一个name属性,它促使一个同名的Lua全局变量被创建。这个变量通
常用于在该部件上调用API(ApplicationProgrammingInterface应用编程接口)。
Tip:全局变量对于整个UI都是可见的,这意味它的命名必须在所有XML文件中是唯一的。
下面这个例子展示了XML文件中的一部分:
代码:
..
..
在任何Lua代码中你可以使用MyFrame变量来引用这个框架,同样的你也可以使用
MyButton这个变量来引用这个按钮。举例来说,要显示这个框架可以调用MyFrame:Show()
方法。或者让这个按钮失效你可以调用MyButton:Disable()方法。当为一个部件命名的时候,
可以使用一个特殊的字符串$parent,它可以表示当前部件的父部件的名称。看下面这个例子:
代码:
..
..
这个结果是创建了二个Lua全局变量:一个是MyFrame,另一个是MyFrameButton。
12
〓框架管理〓
Note:本节的许多内容应用于所有的用户界面,不仅仅是框架,布局属性,尺寸等等,对于
所有的部件都是通用的。
1)Layout布局
框架有一个组合的Size元素以及一个或多个组合的Anchors(锚)元素。当一个框架被
放置在窗体上时,这些组合了的元素将定义一个矩形窗体并呈现在屏幕上。一个Size元素
通过使用指定的Size关键字来定义,并且其中可以包含
AbsDimension或RelDimension其中的任意一个。Anchors(锚)允许定义框架的相对位置,
也允许框架动态的重新配置其内容。一
个Anchors(锚)组通过包含一个或多个Anchor子元素的Anchors(锚)元素来表示,其中
还可以包含一个Offset元素。
下面是一些例子:
代码:
这个例子创建了一个长*宽为100*100的框架,并且该框架的顶部和左部依赖于父框架的顶
部和左部。(更多的关于坐标系的知识请参考笛卡儿坐标系表示)。
代码:
这个例子中的框架将覆盖掉你用户界面的一半区域。
代码:
13
这个例子中创建了一个100*100大小尺寸的框架,并且它的顶部和左部依赖你父框架的顶
部和右部。
代码:
这里例子创建了一个指定长度*宽度为100*100的框架,并且该框架的顶部和左部依赖于
SomeOtherFrame框架的顶部和左部,并且向右偏移10个象素,向下偏移10个象素。(PS:
Y坐标从下往上增长,所以-Y意味着向下移动)。
代码:
这里并没有出现Size元素,该框架的尺寸和位置完全依赖于SomeOtherFrame框架。特别
的是,该框架出现在SomeOtherFrame的内部,并且其左上角和右上角对于SomeOtherFrame
向里偏移了5个象素。当SameOtherFrame框架被改变大小时,该框架也被很好的调整。
2)Showing/Hiding显示和隐藏
框架能通过FrameName:Hide()和FrameName:Show()函数显示和隐藏。同样可以使用
ShowUIPanel(FrameName)和HideUIPanel(FrameName)达到同样的效果。
14
3)LayersandTextures层和纹理
一共有三层:BACKGROUND在最后,ARTWORK在中间,OVERLAY在最前。如果你
想确定一个部件在另一个之前,你必须
指定将它放在哪个位置
引用:
hebackgroundofyourframehere.
heartworkofyourframehere.
heartworkofyourframehere.
ourtext,objects,andbuttonsinthislevel
ourtext,objects,andbuttonsinthislevel
ElementsintheHIGHLIGHTLayerareautomaticallyshownorhiddenwhenthemouseentersor
leaves!ForHighlightingtoworkyouneedenableMouse="true"inyourattributes.
注意:以上大写的原因表示该属性作用未知。看下面的例子:
代码:
...
...
...
4)UsingTemplates使用模板
Twayyou
cansaveontheamountofcodeneededtorecreateeachframe,astheframeswillautomatically
takeontheproperties,children,reseveral
rulesthatmustbefollowingwheninitiallycreatingthetemplate:
gthatyoucannothaveatemplatethatisa
childofanotherelement
Templatesmusthavetheirvirtualattributessettotrue
Templatesmusthaveaname,anditcannotusethe$parentkeyword
Childrenofatemplatedonotneedtobenamed,butwhendoingso,youshouldusethe$parent
15
keyword
Asdiscussedabove,thereisaspecialkeywordthatcanbeusedwhennamingsomethinginside
uinheritaframe,anyobjectinsidethetemplatethatisinherited,whichhas
thekeyword$parent,willautomaticallyreplacethekeywordwiththenameoftheparentwhich
e:
代码:
name="$parentText"/>
inherits="MyAddonButtonTemplate">
Isthesameasdoing:
代码:
y="22"/>
Beawarethatanyinheritedattributes,properties,e:
代码:
inherits="MyAddonButtonTemplate"movable="false">
y="22"/>
Isthesameasdoing:
代码:
name="MyAddonSpecialButtonText"/>
neinthisway,any$parentkeywordsused
e:
代码:
clampedToScreen="true"inherits="MyAddonButtonTemplate1"virtual="true">
inherits="GameFontNormal"/>
inherits="MyAddonButtonTemplate2">
Isthesameasdoing:
代码:
16
movable="true">
name="MyAddonSpecialButtonText"/>
5)Scripts脚本
在XML文件中为用户界面元素附着行为你必须使用Lua。有两种为用户界面元素附着Lua
代码的方法:
较少的代码可以直接放置在XML文件中适当的事件处理元素内。较多的代码应该放置在一
个分离的后缀名为.lua的文件中,并在XML文件中通过Script元素把它包含进来。要通过
Script元素包含Lua代码你必须在XML文件的开始处使用一个或多个
该框架只有一个事件处理元素,当框架可见时该事件处理被执行。在OnShow元素中的内容
可以是任何正确的Lua代码。在这个例子中,只包含一条语句,该语句调用message函数,
该函数弹出一个对话框并且包含一条Hello!的消息。(message函数被定义在
文件中,并且默认是可见的)。
下面是一个完整的包含Lua代码处理事件的例子:
:
代码:
MyMod_ShowMessage();
:
代码:
functionShowMessage()
message("HelloWorld!");
end
当MyFrame框架被加载(该过程只发生一次,那就是在游戏开始的时候,这时候所有的XML
文件将被读取),OnLoad事件被执行。这个语句只是简单的调用了一下message函数而已。
为了让上面的例子能实际运行,你至少还应该创建一个包含和
文件的AddOns目录,或者包含它们到FrameXML目录里并且在
文件中添加的引用。
18
8)EventHandlerreference事件处理程序参考
下面是一个所有可用处理事件的完整列表。所有的部件都有这些事件(除了LayoutFrame,
Texture和FontString,这些都不能使用Script元素)。但是其中的一些不能理解特殊的部件。
Tip:OnEvent这个比较特殊。
引用:
·OnAnimFinished
·OnChar
·OnClick
·OnColorSelect
·OnCursorChanged
·OnDoubleClick
·OnDragStart
·OnDragStop
·OnEditFocusGained
·OnEditFocusLost
·OnEnter
·OnEnterPressed
·OnEscapePressed
·OnEvent
·OnFocusGained
·OnFocusLost
·OnHide
·OnHorizontalScroll
·OnHyperlinkClick
·OnHyperlinkEnter
·OnHyperlinkLeave
·OnInputLanguageChanged
·OnKeyDown
·OnKeyUp
·OnLeave
·OnLoad
·OnMessageScrollChanged
·OnMouseDown
·OnMouseUp
·OnMouseWheel
·OnMovieFinished
·OnMovieHideSubtitle
·OnMovieShowSubtitle
·OnReceiveDrag
·OnScrollRangeChanged
·OnShow
19
·OnSizeChanged
·OnSpacePressed
·OnTabPressed
·OnTextChanged
·OnTextSet
·OnUpdate
·OnUpdateModel
·OnValueChanged
·OnVerticalScroll
你应该注意以上事件主要包括与用户界面有关系的事件,OnEvent事件是个特殊的事件,
它是一些事件的集合。它能调用与游戏有关的事件。
10)WidgetElements部件元素
这里大多数信息来自,这不意味着完整,因为任何时候都可能发生变化。部件元素具
有等级关系,一些元素可能派生自其他元素。这意味着派生的元素继承了它父元素的属性和
属性元素。继承也同样适用于该类型部件的API函数。
Tip:这个等级不受其父子关系的影响,也同样不影响继承模板(虚拟元素)。
UILayoutFrame
FontStringTextureFrame
Button
CheckButton
LootButton
ColorSelectEditBoxGameTooltipMessageFrameMinimapModel
PlayerModel
TabardModel
ScrollingMessageFrameScrollFrameSimpleHTMLSliderStatusBarMovieFrame
TaxiRouteFrame
WorldFrame
在XML文件中,无论哪个部件元素可指定,你都应该使用派生自它的元素来作为使用
的部件。在下面的参考中,将使用一对大括号{}指示该部分可替换。
UI
引用:
Elements:Include,Script,{LayoutFrame}
LayoutFrame
引用:
20
Elements:Size,Anchors
Attributes:name,inherits,virtual,setAllPoints,hidden
Texture
引用:
Derivedfrom:LayoutFrame
Elements:TexCoords,Color,Gradient
Attributes:file,alphaMode
Note:TheTexturemustbewithina
Note#2:Whenaddingcustomtexturesrememberthatthefilemusthavepower-of-two
dimensions,orelseyou'erence:1,2,4,8,16,32,64,
128,256,512,1024,2048...YoucanalwayscutoffanyexcesssizewithTexCoords.
FontString
引用:
Derivedfrom:LayoutFrameElements:FontHeight,Color,ShadowAttributes:font,bytes,text,
spacing,outline,monochrome,nonspacewrap,justifyV,justifyH,maxLines,inheritsThe
tdisplayedbythe
FontstringelementcanbechangedwiththeLUAfunction
withthefunction
justifyV="TOP","MIDDLE"or"BOTTOM",justifyH="LEFT","RIGHT","CENTER"inherits
,thecurrentFontStringwilltakeonallofthatfont'ssettings,
:
Attribute"font"needstobesetforelement"FontHeight"toworkSee
FrameXML/thesystemdefaultlistofinheritablefonts!Code:FontStringWidget
API
Example
代码:
justifyH="LEFT"justifyV="TOP">
21
Frame
引用:
Derivedfrom:LayoutFrameElements:TitleRegion,ResizeBounds,BackDrop,HitRectInsets,
Layers,Frames,Scripts,BackgroundInsetsAttributes:alpha,parent,toplevel,movable,resizable,
frameStrata,frameLevel,id,enableMouse,enableKeyboard
Button
引用:
Derivedfrom:FrameElements:NormalTexture,PushedTexture,DisabledTexture,
HighlightTexture,NormalText,HighlightText,DisabledText,PushedTextOffsetAttributes:text
Notes:Thevarioustextures,onceinheritedorsettoartofyourchoice,willautomaticallybehave
asexpect.(highlightonmouseover,pushedwhileclicked,disabledwhendisabled)Thesamegoes
forthedifferenttexts.
Example
IncludedinBackdrop
代码:
22
CheckButton
引用:
Derivedfrom:Button
Elements:CheckedTexture,DisabledCheckedTexture
Attributes:checked
Note:Forcheckbuttons,settingthelabelofthecheckbuttonworksdifferentlyfromnormalbuttons.
UsingMyCheckButton:SetText("monkey");d,youneedto
tStringframeis
named"
getglobal(MyCheckButton:GetName().."Text"):SetText("Monkey");
Example
IncludedinBackdrop
代码:
checked="true">
23
StatusBar
引用:
Derivedfrom:FrameElements:BarTexture,BarColorAttributes:drawLayer,minValue,
maxValue,defaultValue
Slider
引用:
Derivedfrom:FrameElements:ThumbTextureAttributes:drawLayer,minValue,maxValue,
defaultValue,valueStep,orientation
EditBox
引用:
Derivedfrom:Frame
Elements:FontString,HighlightColor,TextInsets
Attributes:letters,blinkSpeed,numeric,password,multiLine,historyLines,autoFocus,
ignoreArrows
ExampleIncludedinBackdrop
代码:
24
y="0">
bottom="1.0">
y="0">
bottom="1.0">
25
ColorSelect
引用:
Derivedfrom:Frame
Elements:ColorWheelTexture,ColorWheelThumbTexture,ColorValueTexture,
ColorValueThumbTexture
Example
IncludedinBackdrop
代码:
26
Model
引用:
Derivedfrom:FrameElements:FogColorAttributes:file,scale,fogNear,fogFar
SimpleHTML
引用:
Derivedfrom:FrameElements:FontString,FontStringHeader1,FontStringHeader2,
FontStringHeader3Attributes:files
MessageFrame
引用:
Derivedfrom:FrameElements:FontString,TextInsetsAttributes:fadeDuration,insertMode
ScrollingMessageFrame
引用:
Derivedfrom:FrameElements:FontString,TextInsetsAttributes:fade,fadeDuration,
displayDuration,maxLines
ScrollFrame
引用:
Derivedfrom:FrameElements:ScrollChild
MovieFrame
引用:
Derivedfrom:Frame
27
GameTooltip
引用:
ForaLuapseudocoderepresentationofthetooltipwidget'smethods,seeTooltipPseudoCode
Derivedfrom:FrameElements:?Attributes:?
TaxiRouteFrame
引用:
Derivedfrom:FrameElements:?Attributes:?
LootButton
引用:
Derivedfrom:ButtonElements:?Attributes:?
TabardModel
引用:
Derivedfrom:PlayerModelElements:?Attributes:?
PlayerModel
引用:
Derivedfrom:ModelElements:?Attributes:?
Minimap
引用:
Derivedfrom:FrameElements:?Attributes:?
WorldFrame
引用:
Derivedfrom:Frame
Elements:?
Attributes:?
魔兽世界插件三部曲之三----LUA
参考文献:/Lua@Wowwiki(魔兽世界维基百科)
摘要:
"LUA程序设计语言是一个简洁、轻量、可扩展的脚本语言。LUA读作/'lua/(噜啊),是
葡萄牙语中"Luna"(月亮)的意思。
LUA的目标是成为一个很容易嵌入其它语言中使用的语言。大多数程序员也认为它的确做到
了这一点。
28
很多应用程序使用LUA作为自己的嵌入式脚本语言,以此来实现可配置性、可扩展性。这其中包
括仙境傳說、魔兽世界、战锤40k、博德之门、轩辕剑外传汉之云等。
Lua是一种轻量语言,它的官方版本只包括一个精简的核心和最基本的库。这使得Lua
体积小、启动速度快。它用标准C语言编写并以源代码形式开放,编译后仅仅一百余K,可以很
方便的嵌入别的程式裡。和许多"大而全"的语言不一样,网路通讯、图形界面等都没有预设提供。
但是Lua可以很容易地被扩展:由宿主语言(通常是C或C++)提供这些功能,Lua可以使用它
们,就像是本来就内置的功能一样。事实上,现在已经有很多成熟的扩展模块可供选用。
特性:
Lua是一种多重编程范式的程式设计语言:它只提供了很小的一个特性集合来满足不
同编輯范式的需要,而不是为某种特定的编輯范式提供繁杂的特性支援。例如,Lua并不提
供继承这个特性,但是你可以用元表来模拟它。诸如名字空间、类这些概念都没有在语言基
本特性中实现,但是我们可以轻易的用表结构(Lua唯一提供的复杂数据结构)轻易模拟。
Lua可以在运行时随时构造出一个函数,并把它看作一个对象(正是所谓的firstclass
function),这个特性可以很好的满足函数式编程的需要。这是提供了这些基本的元特性,我
们可以任意的对语言进行自需的改造。
Lua原生支援的数据类型非常之少,它只提供了数字(缺省是双精度浮点数,可配置)、
布尔量、字符串、表、子程序、协程(coroutine)以及用户自定义数据这几种。但是其处理
表和字符串的效率非常之高,加上元表的支援,我们可以高效的模拟出需要的复杂数据类型
(比如集合、数组等)。
Lua是一个动态弱类型语言,支援增量式垃圾收集策略。有内建的,与操作系统无关的
协作式多线程(coroutine)支援。
更多推荐
魔兽世界 大脚
发布评论