
さて、楽しいWoW なのですが、クライアントアプリがおそろしくカスタマイズ性がよく、もともと設定が細かくできることに加え、マクロというものでいろいろやることができます。右図はマクロの記事書いたときにつくった絵。
さらにAddonの仕組みが用意されていて、UIを変更したり各種イベントをフックしたりできる。Firefoxの拡張作成と似てる。Luaで簡単に書けるようなので、ちょっくら作ってみることにしました。
まずは簡単そうな /translate Hello とかで翻訳してくれるチャットコマンドを組み込もうかと、まったくさわったことなかったLuaを勉強開始。わりと素直なsyntax。オヤジギャグ的な意味でも尊敬しているエンジニア mattnさんのブログがわかりやすい。この記事のタイトルはmattn先生にささげます。
luaメモ
- 0が 真。
- 関数は定義した位置の後でないと呼び出せない。
- リスト(table)のインデックスは0じゃなく1から始まる。
- functionのとちゅうでreturnできない(ブロックの最後でないとreturn使えない)。なので
do return endとか書くらしい。 - : 構文 がperlの
->と似てる。自動で1個目の引数がselfというlocal変数に入るのがやさしい。tableの要素をドットでアクセスできるのでfoo["bar"]はfoo.barと書けるのだが、まちがって関数をfoo.bar()とかやってしまうとselfにオブジェクトが来ないのでハマる。正しくはfoo:bar()。
で、こちらが初めて書いたlua。Google翻訳するあ。LuaSocketを使ってます。
ただ、書きながらたぶんだめだろうなーとは思ってたのだが、WoWではrequireやmoduleが実装されていないし外部のURLを叩くとかNG。セキュリティ的にヤバいもんね。。
つうわけで翻訳はヤメて、いろんな角度からバシバシスクリーンショット撮るいっぱい写真撮りたい人用Addonを書いてみることに。
完成したのはこちら。手元ではWindows/Macともに期待通りに動いていて、マトリックスみたく、ぐるーっとまわって写真とりまくれるようになって楽しい。
WoW Addon書いてみた時のtips
- WoW Wiki がやたら充実しているので何も困らない。
- ゲームメニュー → Interface → Help → Display Lua ErrorsをONにしておくとsyntaxエラーその他エラー時にこんな感じでdumpしてくれます。これはライブラリのロードの順番がいけない
- 開発用クライアントはないが、ここから Blizzardのグラフィック素材が落とせる。
-
/run ReloadUI()を実行すると、すでに読み込んでるAddonについては再起動してくれる。これをマクロに登録しすぐ呼べるようにキーバインドしておくといい。これでコードを書き換えた後いちいちWoWを再起動しなくてもいい。あとこのタイミングでSavedVariablesも保存される。 - 何かおかしいな、と思ったらSavedVariablesを消して再起動してみると良いかも。
アプリ/WTF/Account/(ID)/SavedVariables/(Addon名).lua アプリ/Account/(ID)/(サーバー名)/SavedVariables/(Addon名).lua - 設定画面とかGUIは普通に書くとめんどう。そのへんは Ace3 っていう、WoW Addon界では標準とされているぽいUtilityライブラリを使い楽をするとよいです。
- Ace3は全部ドキュメントされてないのでソースを呼んだ方がいいときもある。あと有名なアドオンのソースを見ると勉強になる。Ace2は古くAce3がいいらしい。移行についてはこちら。
Addonサイトが curse とか wowinterface とかあるのだけど、とりあえずcurseにアカウント作ってUPしてみた。承認が通れば この辺から 落とせるようになると思う。curseはgitレポジトリとかもあったぽい。