Traumachicken

6/21/2011

WoW Addonを作る

クソの役にも立たないHelloWorld Addon
を作ってみよう。

まずディレクトリ

...\World of Warcraft\Interface\AddOns

にHelloWorldフォルダを作ろう。

次にHelloWorldフォルダの中に、

HelloWorld.lua
HelloWorld.toc
HelloWorld.xml

の3つのファイルを作ろう。

.toc ・・・ Addonの設定ファイル
.lua ・・・ プログラム
.xml ・・・ UIの設定ファイル
という印象だ。

各ファイルの中身はこんな雰囲気だ。

  • HelloWorld.toc
## Interface: 40000
## Title: Hello World!
## Notes: My first AddOn
HelloWorld.lua
HelloWorld.xml
  • HelloWorld.lua
function HelloWorld()
print("Hello World!");
end

  • HelloWorld.xml
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/..\..\FrameXML\UI.xsd"
 Script File="HelloWorld.lua"/
  Frame name="HelloWorldFrame"
   Scripts
    OnLoad
     HelloWorld();
   /OnLoad
  /Scripts
 /Frame
/Ui

SHIT.
ブログではタグを使うことができない。
.xmlのタグになりそうな部分は勝手に推察してくれ。


以上を正しく行うと、
ゲーム内のAddonリストにHelloWorldが現れるはずだ。

読み込んだ後、
チャットウィンドウにHello World!が出れば成功だ。

なにかあったらこれを書いた人に聞いてくれ。

AddOn programming tutorial/Introduction



WoWはゲーム内のデータにアクセスするためのAPI、
その名もWoW APIを用意している。
非常にクールだ。


例えば GetAccountExpansionLevel()

これは拡張パックの番号を返す。

0 = Classic,
1 = Burning Crusade,
2 = Wrath of the Lich King,
3 = Cataclysm

という具合だ。

教わるまでもない拡張パックを教えてくれる機能を
HelloWorld Addonに追加してみよう。

HelloWorld.luaに次の関数を追加しよう。

function SayExpansionLevel()
 expansionLevel = GetAccountExpansionLevel();
 if expansionLevel == 0 then
  print("You are playing Classic!");
 elseif expansionLevel == 1 then
  print("You are playing Burning Crusade!");
 elseif expansionLevel == 2 then
  print("You are playing Lich King!");
 elseif expansionLevel == 3 then
  print("You are playing Cataclysm!");
 end
end
非常にクールだ。

次に関数の呼び出しをHelloWorld.xmlに追加しよう。

...

 HelloWorld();
 SayExpansionLevel();

...
非常にクールだ。

正しく追加されていれば、
チャットウィンドウにメッセージが表示されているはずだ。

ちょっと待ってくれ、
歯茎から血が出てきた。



よし。

次に何らかの値をストレージにセーブしてみよう。
Addonの設定を保存するときにひちゅようになるはずだ。


まずセーブする値を.tocファイルに明示しよう。

## SavedVariables: LoginTimeLog
これでLoginTimeLog変数が、
ストレージに書き込まれるようになった。

次にLoginTimeLog変数に何らかの値を入れよう。

LoginTimeLog = GetGameTime();

GetGameTime()関数はサーバータイムを返す関数だ。

値はゲーム終了時に、
自動的に以下のディレクトリにある.luaファイルに書き込まれる。

World of Warcraft\WTF\Account\USER\SavedVariables\
の中の HelloWorld.lua がそれだ。

中を確認してみよう。

思い通りの結果になっていないはずだ。



0 件のコメント: