見出し画像

明日こそがんばる

では昨日の続きで、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か、アントニカのウィザード達だ。前者は惑星間の移動ができて、後者は既知の空間と時間の移動ができるので、後者にしよう。

GW明けに人間ドックに行ってきます

よく船がバグっているときに移動してくれるキャラに設定した。ただキャラの向きがずれてしまった。再配置する前についでにWizardのEpicも持たせておこう。

きせかえ人形が楽しい

これ、本当にEpicを持たせるとは思わなかった。こいつを倒せばEpicをゲットできる。ただPoKでは戦闘は禁止されているので倒せないが。
では、つづいて、イベントを設定していこう。いきなり移動サービスを入れるのは初心者の私でやるとドはまりするので、ひとつづつやっていこう。そもそもperlはともかく最近強く推しているluaはほとんど使ったことがない。

まずは挨拶すると文字を返してくるイベントを追加する。Perlにサンプルがあったのでそれを参考にする。

動いた動いた。ただPerlはそのうちサポートしなくなりそうな気がするので、今後スクリプトはすべてluaで書くことにする。今度は文字列のリンクをつけてさらに挨拶させるようにしてみる。

こんな感じ。luaのほうがわかりやすいな。

よしよし動いた。では早速メイン部分をつくっていこう。基本的な機能としては、NPCに対してlistと言えば、飛べるゾーンの一覧を表示し、実際のゾーン名を言えば、そのゾーンに飛ぶ感じになる。他にはリストは長大でlistを言われるたびに周囲にリスト全体を投げると重くなるので、sayではなく、その本人だけに伝えるようにする感じだ。

まずはデータベースのゾーン情報からevacで飛ぶ位置の情報を取得して、csv化する。なんかSQLのクエリーは簡単なものなら普通にかけるようになってしまった。覚えると扱いやすくて便利ね。

cshomeってまだ行ったことないな

csvからluaの連想配列に変換して貼り付ける。ついでに飛ぶ必要のないゾーンをコメントアウトで抜く。Lazarusでは微妙に飛べないゾーンがあったが、ここでは街と初期ゾーン以外は飛べるようにしておこう。あとLDoNとかの基本インスタンスでゾーンする場所もオリジナルのゾーンに飛べないようにする。

でけた

luaの構文とeqemulatorのAPIの勉強をしながら書いたので大したコード量でもないのに時間がかかってしまった。あとsyntaxエラーくらいだとクライアントにエラーが表示されるくらいだが、お行儀の悪いコードを書くとサーバが落ちてLDする。それにQuest APIはドキュメントがなさすぎてすごい不便だ。ただサンプルコードはたくさんあるのでなんとかなった。今回はいい勉強になった。たぶん次回からもっと効率よくコードがかけると思う。楽しいねえ。

リストの一部。なぜLazarusでは飛べないゾーンがあったのだろう

NPCにlistといったときはこんな感じ。そして飛びたいゾーンの名前をクリックするとそのゾーンに飛ぶ。Lazarusと挙動がまったく一緒だ。ためしにToVでもいってみようか。

完璧

なんか順調だな。GMだと帰りは本物のzoneコマンドで一発で帰れるのですごく便利。次回は、ちょっと難易度が高そうだが、各ゾーンにいるexpeditionを作ってくれるNPCを実装しようと思う。


この記事が気に入ったらサポートをしてみませんか?