明日こそがんばる
では昨日の続きで、PoKから各ゾーンに飛ぶことができるNPCの設置を行おうと思う。Lazarusでは、PoKのCresent Reachへゾーンする石が消されて、そこにNPCがたっており、そのNPCに話しかけることにより全部ではないが主
要な狩り場に直接飛ぶことができた。
この機能によって、GGは必須でなくなりグループ構成に幅をもたせることができる。このようなサービスのないPEQではパーティにDRUやWIZが必須になっていた。人によっては、グループの数だけWIZとDRUを用意し、移動するときだけバラけて、ゾーンに到着したらWIZだけ固めるみたいなマクロを組んでいる人がいた面倒くさい話だ。まあGGは必須でなくなったのはLazarusの功績だが、その代わり、足を早くする機能をもつクラスがDRUかBRDだけしかないため、結局グループにある程度制約がついてしまった。あるいは扱いにくい馬にのることになった。私が作るサーバはこの辺の制約も撤廃したい。
話が飛んでしまった。ではまずは、Cresent Reachの石を取り除こう。
この手のクリック可能なものは、オブジェクトあるいはドアとして表現されている。今回の場合はドアだ。正確にいうと移動しないドアで、クリックすると指定されたゾーンに飛ぶ機能がついている。単純に石の名前をMacroQuestで取得して、その名前をデータベースのドアから検索して消すだけだ。
クエリーはこんな感じ。PEQ Database Editorでもいじることができるが、ポータビリティを考えると、なるべくクエリーで記述するようにしていこうと思う。
すばらしい。こんな感じで自分が思った通りに動くと気分がいい。次に、移動サービスを行ってくれるNPCを置こう。Lazarusのよくないところはオリジナルコンテンツがあまりストーリーに沿っていないところだ。さっきから不満ばかり書いているが、別にLazarusをディスっているわけではない。そもそもディスっているなら勉強とは言え真似たりはしない。話がずれたが、エバークエスト的には移動を司るキャラといえば、OoWにでてくるRiftseekerか、アントニカのウィザード達だ。前者は惑星間の移動ができて、後者は既知の空間と時間の移動ができるので、後者にしよう。
よく船がバグっているときに移動してくれるキャラに設定した。ただキャラの向きがずれてしまった。再配置する前についでにWizardのEpicも持たせておこう。
これ、本当にEpicを持たせるとは思わなかった。こいつを倒せばEpicをゲットできる。ただPoKでは戦闘は禁止されているので倒せないが。
では、つづいて、イベントを設定していこう。いきなり移動サービスを入れるのは初心者の私でやるとドはまりするので、ひとつづつやっていこう。そもそもperlはともかく最近強く推しているluaはほとんど使ったことがない。
まずは挨拶すると文字を返してくるイベントを追加する。Perlにサンプルがあったのでそれを参考にする。
動いた動いた。ただPerlはそのうちサポートしなくなりそうな気がするので、今後スクリプトはすべてluaで書くことにする。今度は文字列のリンクをつけてさらに挨拶させるようにしてみる。
こんな感じ。luaのほうがわかりやすいな。
よしよし動いた。では早速メイン部分をつくっていこう。基本的な機能としては、NPCに対してlistと言えば、飛べるゾーンの一覧を表示し、実際のゾーン名を言えば、そのゾーンに飛ぶ感じになる。他にはリストは長大でlistを言われるたびに周囲にリスト全体を投げると重くなるので、sayではなく、その本人だけに伝えるようにする感じだ。
まずはデータベースのゾーン情報からevacで飛ぶ位置の情報を取得して、csv化する。なんかSQLのクエリーは簡単なものなら普通にかけるようになってしまった。覚えると扱いやすくて便利ね。
csvからluaの連想配列に変換して貼り付ける。ついでに飛ぶ必要のないゾーンをコメントアウトで抜く。Lazarusでは微妙に飛べないゾーンがあったが、ここでは街と初期ゾーン以外は飛べるようにしておこう。あとLDoNとかの基本インスタンスでゾーンする場所もオリジナルのゾーンに飛べないようにする。
luaの構文とeqemulatorのAPIの勉強をしながら書いたので大したコード量でもないのに時間がかかってしまった。あとsyntaxエラーくらいだとクライアントにエラーが表示されるくらいだが、お行儀の悪いコードを書くとサーバが落ちてLDする。それにQuest APIはドキュメントがなさすぎてすごい不便だ。ただサンプルコードはたくさんあるのでなんとかなった。今回はいい勉強になった。たぶん次回からもっと効率よくコードがかけると思う。楽しいねえ。
NPCにlistといったときはこんな感じ。そして飛びたいゾーンの名前をクリックするとそのゾーンに飛ぶ。Lazarusと挙動がまったく一緒だ。ためしにToVでもいってみようか。
なんか順調だな。GMだと帰りは本物のzoneコマンドで一発で帰れるのですごく便利。次回は、ちょっと難易度が高そうだが、各ゾーンにいるexpeditionを作ってくれるNPCを実装しようと思う。
この記事が気に入ったらサポートをしてみませんか?