目录
插件的基本构成
插件目录
要让WOW客户端识别一个插件,首先要在指定位置上设置一个独立的目录。WOW会将这个目录中的所有内容扫描识别成一个插件。对于windows系统而言,这个独立的目录必须位于Interface/AddOns内。
toc文件
toc文件 = table of content file,中文翻译为内容表格文件,他必须和插件目录同名。该文件内部包含插件的一些描述性信息包括:标题、插件描述、作者、插件中需要加载的文件等。
lua文件
lua是一门脚本语言。通常游戏开发中,游戏引擎负责进行交互式图像应用处理,脚本语言则负责组织游戏内容和逻辑部分(调用游戏引擎内部机能)。因此在插件中,lua文件会实现插件的动态行为。
XML文件
XML是一种标记语言,与HTML不用,主要用来进行数据传输。在很多UI框架中,他负责定义UI界面的外观。WOW插件的可视元素通常由它来定义。
其他文件
其他文件主要是多媒体文件,例如音乐和图片。
第一个插件的编写
创建一个插件目录
在Interface/AddOns目录中创建目录CombatDet.
创建CombatDet.toc文件
toc文件必须和目录同名,因此应为CombatDet.toc。其内容至少应该包含:
- 匹配的游戏版本号。如"## Interface: 20300",20300对应于游戏版本2.0.3。
- 标题。如"## Title: Combat Detection",指明该插件用于检测是否进入或离开战斗状态。
- 描述。如"## Note: This addons is used to detect the state of combat"。
- 插件启动时需要加载的文件。如"combat_det.lua"
创建CombatDet.lua文件
对进入/退出战斗做出响应(提示音&文字提醒)
- WOW游戏本身是通过一系列Game Event驱动的,进入或退出战斗时,都会产生对应的事件上报到游戏客户端的应用层。进入/退出战斗对应的事件名为"PLAYER_REGEN_ENABLED"、“PLAYER_REGEN_DISABLED”。
- 知道了进入/退出战斗的事件名称,只需要为lua脚本注册事件,并提供对应的回调函数即可。
- 因为所有的Game Event通常都需要通过UI处理并反应出来,因此我们需要创建一个UI元素,并利用该元素注册对应的事件:
if not MyCombatFrame then CreateFrame("Frame", "MyCombatFrame", UIParent) end MyCombatFrame:RegisterEvent("PLAYER_REGEN_ENABLED") MyCombatFrame:RegisterEvent("PLAYER_REGEN_DISABLED")
- 创建处理函数并作为回调注册,类型为OnEvent,即发生事件时调用。
function MyCombatFrame_OnEvent(self, event, ...) if event == "PLAYER_REG_ENABLE" then ChatFrame3:AddMessage("退出战斗!!!") PlaySoundFile("Interface//AddOns//CombatDet//exit_combat.mp3") elseif event == "PLAYER_REGEN_DISABLED" then ChatFrame3:AddMessage("进入战斗!!!") PlaySoundFile("Interface//AddOns//CombatDet//enter_combat.mp3") end end MyCombatFrame:SetScript("OnEvent", MyCombatFrame_OnEvent)
- PlaySoundFile用于播放音频,且播放时不会有fade out。
- ChatFrame3:AddMessage用来向聊天窗口3输出文本。
加载插件并实测:
加载自定义插件
下图是角色选择窗口中打开的插件列表,其中能够看到我们刚才定义好的Combat Detection插件
游戏内测试
可以看到,自定义"聊天"窗口是第三个聊天窗口,可以收到战斗状态的提示。