さて、楽しい WoW なのですが、クライアントアプリがおそろしくカスタマイズ性がよく、もともと設定が細かくできることに加え、マクロというものでいろいろやることができます。右図は WoW ブログにマクロの記事書いたときにがんばってつくった絵。さらに Addon の仕組みが用意されていて、UI を変更したり各種イベントをフックしたりできる。Firefox の拡張作成と似てる。Lua で簡単に書けるようなので、ちょっくら作ってみることにしました。
まずは簡単そうな /translate Hello
とかで翻訳してくれるチャットコマンドを組み込もうかと、まったくさわったことなかった Lua を勉強開始。わりと素直な syntax。オヤジギャク的な意味でも尊敬しているエンジニア mattn さんのブログがわかりやすい。この記事のタイトルは mattn 先生にささげます。
lua メモ:
- 0 が 真。
- 関数は定義した位置の後でないと呼び出せない。
- リスト(table)のインデックスは 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 レポジトリとかもあったぽい。
早く WoW 界のチョコボに乗りたいのんで Silvermoon City の評判値かせがないといけなく忙しい。Silvermoon 周辺のエルフのごきげんはもう十分に取りつくしたので、今は世界にちらばった Silvermoon 出身エルフを求めて旅をしている最中です。なので今日はこの辺で!