5月の最後あたりから9nanometer氏のカスタムワールド制作企画『カスタムゴッドの休戦地』の募集を読んで、
この機会に初のカスタムワールド作成を試みています。
投稿予定のカスタムゴッドは2体で、これは2~3日ですぐに形になりました。
しかしカスタムマップ作りがなかなかの曲者で、まずマップエディタ作りで色々なwikiを読んだのにもかかわらず、
何度も難航してしまいました。
マップエディタが起動しないミス
Elonaのマップエディタを起動するためには
『Elona.exeのショートカットを作成して、プロパティからリンク先のアドレスの最後に【” medit】を付ける』
という内容なのですが、ずっと【正)elona.exe” medit】ではなく【誤)elona.exe medit”】と付け足していたので、
そんなリンク先はないと何度もポップアップ窓が出て焦ったり、もっと変な事やってエラー1が連発したりして散々でした。
これを2時間続けて気がつくまでに目眩がしそうでした…。
その後はマップ作りは順調で、それの合間にイベント用のCNPCの用意をしていましたが、今度はここで躓きました。
MMA独自のタグや変数の入れ方が間違っていた
今度の壁はMMA独自の記述や『変数』周りの問題でした。
これは自分とは昔から相性が悪い(数字の問題が大変苦手…)ため、簡単だろうと思ったクエストの実装に手間取りました。
というのも、「こんな流れでクエストを進めて行きたい」といった内容の選択肢とゴールまでは記述できましたが、肝心の変数が間違っていたようで、選択肢通りに動作しませんでした。既存の公開されているカスタムワールドのソースを拝見させてもらいつつ導入してみたのですが、どうにも解決できず本当に参りました。
躓いている内容を教えて頂ければ、知っている範囲で教えますよ
— 9nmのお兄ちゃん (@9nanometer) May 31, 2020
有り難い事に企画者の9nanometer氏に助け船を出してもらえたので、クエスト内容と実際のCNPCテキストをDMで相談しました。
どんなクエストを実装したいのか色々と汲み取ってもらえて、修正&加筆してもらった内容を送ってもらいました。
※ここで初めて『マップ変数(mgdata)』で何が動作するのか・どこで記述すればいいのかを知りました。
おかげでマップをテストワールドに配置しての実験では、CNPCが選択肢通りに喋ってくれました。感謝です。
自分が忘れないよう、教えていただいたテキストの記述仕方とmgdataの使い方をメモしておきます。
[記述例] %txtevstartや%txtyesなどの条件文によって分岐させたい場合は連続して書く
[正]
%txtevstart,JP,条件1
処理1
%txtevstart,JP,条件2
処理2
%txtevstart,JP
処理3
[誤]
%txtevstart,JP,条件1
処理1
%txtyes,JP
処理
%txtevstart,JP,条件2
処理2
%txt*,JPの*が異なる記述を挟んではいけない。
今回はお使いクエストに『ジャーナルにクエストが書き込まれる』仕様も欲しかったため、
記述の中にmgdata(マップ変数)を記述する必要があったようです。
[記述例] pdata*euv*/mgdata*set*とmgdata*euv*を使ってお使いクエストを作る
%txt_ucnpc_ev_b
//クエスト攻略後(mgdata90=1000)
%txtevstart,JP,mgdata90eqv1000
「会話5:クエストは攻略されたよ」{c}さようなら%bye{ev},,,,,
//クエスト攻略中(mgdata90=1)
%txtevstart,JP,mgdata90eqv1
「会話3:Citem01を3個持ってきてくれたか?」{tuitemcountp:Citem_01}{c}渡す%watasu{ev},,,,,{c}持ってない%bye{ev},,,,,
//通常の会話(クエスト攻略前2回目以降)
%txtevstart,JP,mgdata1eqv1
「会話2-1:依頼」そうだ『Citem_01を3個』持ってきてくれ」{c}わかった%yes{ev},,,,,{c}断る%no{ev},,,,,
//通常の会話(クエスト攻略前1回目)
%txtevstart,JP
「会話1:おはよう」{c}次へ%next2{ev},,,,,
//通常の会話(クエスト攻略前1回目)→2番目の会話
%txtnext2,JP
「会話2:今日は良い天気だな」{c}次へ%next3{ev},,,,,
//通常の会話(クエスト攻略前1回目)→2番目の会話→3番目の会話 (ここでmgdata1=1に変更※1回目の会話終了のフラグ)
%txtnext3,JP
「会話3:じゃあさようなら」{c}さようなら%bye{ev},,,,,
//依頼を引き受けた
%txtyes,JP
{mgdata90set1}{updatejournal}{snd:write1.wav}「会話2-2:待っているよ」{c}さようなら%bye{ev},,,,,
//依頼を断った
%txtno,JP
「会話2-3:それは残念だな」{c}さようなら%bye{ev},,,,,
//届け物を持ってきた時
%txtwatasu,JP,pdata0euv3
{removeuitem:Citem_01}{createuitem:Citem_02}{throwitem}{completequest}{mgdata90set1000}「会話4-2:確かに3個あるな。お礼に『Citem_02』を渡そう」{c}さようなら%bye{ev},,,,,
//数が足りない時
%txtwatasu,JP
「会話4-3:数が足りないようだな」{c}さようなら%bye{ev},,,,,
%txtbye,JP
%txt_ucnpc_ev_e
%txtwatasu,JP,pdata0euv3
まずpdata0が3以上か比較し、そうだった場合は以下が流れる。
%txtwatasu,JP,pdata0euv3
{removeuitem:Citem_01}{createuitem:Citem_02}{throwitem}{completequest}{mgdata90set1000}「会話4-2:確かに3個あるな。お礼に『Citem_02』を渡そう」{c}さようなら%bye{ev},,,,,
%txtwatasu,JP
上の条件に一致しない場合(pdata0が3以上でない)は以下が流れる。
%txtwatasu,JP
「会話4-3:数が足りないようだな」{c}さようなら%bye{ev},,,,,
『cmapjournaltitle*』『cmapjournalcaption*』の「*」に入る数値は
mgdata90~99 に対応しており、
mgdata90の場合は「* = 1」、mgdata91の場合は「* = 2」、mgdata99の場合は「* = 10」となる。
mgdata90を使ってジャーナルにクエスト内容を書き込みたい場合は、cmapjournaltitle1とcmapjournalcaption1と書く。
もし複数のクエストを用意したい場合は、2個目のクエストをmgdata91で管理し、
cmapjournaltitle2とcmapjournalcaption2を追加すれば2個のクエストを実装する事ができる。
現在進行形の問題 (※解決済※)
主要なマップが昨日には完成し、マップ間ワープ用CNPCは問題なく動作。後はいくらかCNPCを入れれば完成が近づくな、
という所で致命的な問題に気がつきました。どうも『CNPCがCitemを受け取ってくれない』…。
マップは全部作れた。マップ間ワープも問題なかった。致命的なのは{tuitemcountp:*}でアイテムを誰も受け取ってくれず、持ってない扱いになってしまう事。これには昨日からずっと悩まされている。アイテム名変えたりもしてみたり別のcitem指定してもダメだった。#Elona_MMA
— sonno rem (@einer_laune_N) June 4, 2020
1日中かけてあらゆる実験をしてみたのですが、それもまた反応がない…。
なお実装しようと思っていたCNPCは『特定のCitemを100消費すると返礼用Citemが手に入る』というものです。
現状のソースを書いておくので、ここが間違っているという箇所があれば教えてください。
//自販機
%txt_ucnpc_ev_b
%txtevstart,JP
{tuitemcountp:Citem_ManiGold}「マイド~!キョウもオツカれサン!」{n}{n}色々な飲み物が売っている。一律100mgのようだ。{c}買う%yes{ev},,,,,{c}やめておく%bye{ev},,,,,
%txtyes,JP
「ショウヒンを選んでヤ~」{c}ラーナ山頂のおいしい水%mizu{ev},,,,,{c}ラムネサイダー%cider{ev},,,,,{c}クリムえ~る(お酒)%sake{ev},,,,,{c}まろやか牛乳%milk{ev},,,,,{c}魔香BINBIN%maka{ev},,,,,{c}やっぱりやめる%bye{ev},,,,,
%txtmizu,JP,pdata0euv100
{se:gasha.wav}「マイド~!」{n}{n}飲み物が出てきた。{removeuitem:Citem_ManiGold}{createuitem:Citem_ManiDrink_Water}{throwitem}{c}さようなら%bye{ev},,,,,
%txtmizu,JP
「mgタラヘンで!」{c}さようなら%bye{ev},,,,,
%txtcider,JP,pdata0euv100
{se:gasha.wav}「マイド~!」{n}{n}飲み物が出てきた。{removeuitem:Citem_ManiGold}{createuitem:Citem_ManiDrink_Cider}{throwitem}{c}さようなら%bye{ev},,,,,
%txtcider,JP
「mgタラヘンで!」{c}さようなら%bye{ev},,,,,
%txtsake,JP,pdata0euv100
{se:gasha.wav}「マイド~!」{n}{n}飲み物が出てきた。{removeuitem:Citem_ManiGold}{createuitem:Citem_ManiDrink_Alcohol}{throwitem}{c}さようなら%bye{ev},,,,,
%txtsake,JP
「mgタラヘンで!」{c}さようなら%bye{ev},,,,,
%txtmilk,JP,pdata0euv100
{se:gasha.wav}「マイド~!」{n}{n}飲み物が出てきた。{removeuitem:Citem_ManiGold}{createuitem:Citem_ManiDrink_Milk}{throwitem}{c}さようなら%bye{ev},,,,,
%txtmilk,JP
「mgタラヘンで!」{c}さようなら%bye{ev},,,,,
%txtmaka,JP,pdata0euv100
{se:gasha.wav}「マイド~!」{n}{n}飲み物が出てきた。{removeuitem:Citem_ManiGold}{createuitem:Citem_ManiDrink_Makabin2}{throwitem}{c}さようなら%bye{ev},,,,,
%txtmaka,JP
「mgタラヘンで!」{c}さようなら%bye{ev},,,,,
%txtbye,JP
%txt_ucnpc_ev_e
CNPCの動作テストもしてくれるという方がいらっしゃるならば、
citem一式とCNPCを同梱したzipも置いておくので挙動をチェックしてもらえたら幸いです。
テストをしてくださった方は、このブログ記事のコメント欄やTwitterのDM、メールフォームなどからお知らせください。
問題の方が解決しました。テストしていただきありがとうございました。
テスト用Citem・CNPC同梱ファイルRemCustomTestFiles_200605.zip
もしこれで『こちらではちゃんと動作した』ということなら、当方の環境がおかしいということになるので根本的にこちらのMMAを入れ直して再テストする必要が出てきます…(とはいえ、何度かはじめから作り直したElona_MMAの環境でやってみてはいるのですが…)
最後に:参考にしたカスタムワールドのCNPCも動作しなかった… (※解決済※)
なおこのCNPCに関しては『ロストランド』に登場するキャセロールに居る鍛冶師のNPCのソースを参考にしています。ヒュドラの硬皮(CNPCヒュドラを倒すと手に入るドロップCitem)を所持していくと、その個数に合ったアイテムで新たなアイテムを作ってもらえるという内容です。
今回気になって確認したら、なんとこの鍛冶師にヒュドラの硬皮を持っていっても「皮が足りないようだな」と言われてしまい…。
※%txtciderになってますが実際は違います(自販機のCNPCの記述と混ざってしまった)
どうにも手詰まりです。
この問題が解決すれば、上記の『Citemを消費してCitemをもらう』という部分が解決するのですが、
逆に解決しないとなるとメインクエスト(といってもお使いクエスト)の最後の報酬をもらう場面や、
自販機でCitemを消費してCitemをもらう(買う)という機能も実装できないので、かなり参ります…。
追記:上記の問題が解決しました
また9nanometer氏がテストのち助言をしてくださり、無事に問題が解決しました。
そもそも思い違いをしていた所があり、成る程そういう仕様だったのかと目から鱗でした。
CNPC:自動販売機は無事に動作した
テストしてもらった所、CitemのMゴールド×100を渡した後、商品用のCitemと交換できたそうです。
この『Citemを100個CNPCに渡す』という行動について、自分はてっきりインベントリにそのCitemがあり、
会話で選択すれば交換が成立すると思っていました。
しかし正しくは『鑑定済みのCitemを100個、干渉(iキー)からCNPCに手渡す』でした。
なので、CNPCのインベントリに該当Citemが100個わたった後で、会話をして選択肢を選ぶ必要があります。
おかげで方法が分かったので、ロストランドの鍛冶師にも無事に★ヒュドラの硬皮と装備品が交換できました。
Citem:”reftype.”が鉱石じゃないとCNPCは受け取らない
これはもう一つの躓きです。自販機に必要な「Mゴールド」は渡す事ができました。
しかしクエストで必要なCitemを渡す事ができませんでした。
何故かというとどうやら”reftype.”が鉱石(77000)じゃないと受け取ってくれないようです。
これもMゴールドは元から鉱石に設定していたので上手くいっていたようですが、クエスト用Citemは別でした。
reftype. "77000"//鉱石
reftypeminor. "77001"
他にも受け取ってもらえるアイテムカテゴリがあるようですが、鉱石が無難だそうです。
色々と知らない事だらけですが、またカスタムマップ制作作業に戻れそうで安心しました。
【今回のPOINT】
- {tuitemcountp:Citem}を使ってCNPCにCitemを渡すイベントの時は、干渉(iキー)から手渡してから話しかける。
- Citemの”reftype.”(アイテムカテゴリ)は鉱石じゃないと受け取ってもらえない。
Comment|コメント