- Papyrusスクリプトの記憶を記録に残すシリーズその8 -
前回の内容に関連して、メッセージボックスの説明欄に装備中のアイテム名を表示してみます。
この機能を使うにはSKSEが必要です。
目次
1. ダミーアイテムの作成と配置
1-1. ダミーアイテムの作成
装備中のアイテムというのはプレイ中に変わりますので、その名称は事前に取得しておくことのできないテキストです。
こういった動的なテキストをメッセージボックスに表示するためには、スクリプトで取得した装備アイテム名を、特定のダミーアイテムの名称にコピーするという方法を用います。どこかに配置した特定のアイテムであれば、クエストを利用することでその名称をメッセージボックスに表示することができます。
スクリプトからはメッセージボックスのテキストを直接操作することができないため、このような方法を取ります。
ダミーアイテムは何でも良いですが、どこかのセルに配置して使うため、メッシュの付いた既存アイテムを複製すると楽です。今回は MiscItem の中から Basket01(かご)を複製し、ダミーアイテムとしましょう。
ダミーアイテムの設定は下図の通りです。IDに分かりやすい名前を付け、Name は空欄にしておきます。
1-2. ダミーアイテムの配置
ダミーアイテムを Render Window でどこかに配置します。アクティベーターでメッセージを表示するならそのセル内で良いでしょう。魔法でメッセージを表示するなど特定のセルに限らない場合は、MOD用の新規セルを作成してそこに置いた方が良いでしょう。
既存のセル内に置いた場合は、Referenceを開いて Initially Disabled のチェックを入れ、表示されないようにしておきます。
2. クエストの作成と設定
2-1. 新規クエストの作成
配置したダミーアイテムの名称は、クエストを用いることで表示できます。Character > Quest から新規にクエストを作成しましょう。
Quest Data のタブでは、IDに名前を付ける以外はデフォルトのままで大丈夫です。以前にも説明したことがありますが、新規クエストはID入力後に一旦閉じて、再度開いてから設定を行います。
2-2. クエストにエイリアスを設定する
Quest Aliases タブを開き、ダミーアイテムをエイリアスとして設定します。右クリックから「New」を選択すると新規追加できます。
上図は設定済みの画面ですが、中身を見てみましょう。
左上の Alias はエイリアス名です。後ほどメッセージボックス内にこのエイリアス名を手入力しますので、そのつもりで付けましょう。右の方の「Stores Text」にチェックを入れておきます。
Fill Type で Specific Reference を選ぶと、右側のボタンからセルとオブジェクトを指定できます。Render Window で先ほど配置したダミーアイテムを選択しましょう。
3. メッセージボックスにクエストとエイリアスを関連付ける
メッセージボックスの作成は前回やりました。表示するメッセージボックスとクエストを関連付けるには、Owner Quest の欄で先ほどのクエストを指定します。
そして、Message Text の中にエイリアスを指定します。
<Alias=EkaDummy>
のようにエイリアス名を書くことで、エイリアスに付いている名称(Name)を表示させることができます。
プレイヤー名は <Alias=Player>
と書くことで、クエストで設定しなくても表示することができます。
注意点ですが、このエイリアス名の指定は Message Text 欄での書き方です。Menu Buttons (選択肢)には適用できません。
4. スクリプト
やっとスクリプトの作成まで来ました。今回はアクティベーターに付けて、プレイヤーがアクティベートした瞬間に装備している武器名等をメッセージで表示してみます。
このスクリプトで GetName()
と SetName()
を使うためにSKSEが必要です。
Message Property mesMenu Auto ; 表示するメッセージ MiscObject Property micDummy Auto ; ダミーアイテム Quest Property qstEkaMessage Auto ; クエスト ;--------------------------------------------------アクティベート Event OnActivate(ObjectReference akActionRef) String strWep ; 文字列変数 ; 右手武器の名称をstrWepに取得してダミーの名称に付ける strWep = Game.GetPlayer().GetEquippedWeapon().GetName() micDummy.SetName(strWep) qstEkaMessage.Start() ; クエストの開始 Int intIndex = mesMenu.Show() ; メッセージを表示 If intIndex == 0 Debug.MessageBox("ボタン1を押しました。") EndIf qstEkaMessage.Stop() ; クエストの停止 strWep = None EndEvent
プロパティには作成したものをそれぞれ指定してください。
strWep =
の行で、右手武器の名称を取得しています。それを次の行でダミーアイテムの名称に付けています。
アクティベートした時点でダミーアイテムの名称を変更していますので、その時々に応じたテキストをメッセージボックスに表示できます。
qstEkaMessage.Start()
でクエストを開始してからメッセージを表示し、処理が終わったら qstEkaMessage.Stop()
でクエストを停止しておきます。
ダミーアイテムに付ける名称を表示したいテキストに変えれば、メッセージボックスの説明欄で表示することができます。
補足:私はスクリプトを書くのは好きですが、専門家ではありません。内容は creationkit.com の情報と個人的な経験を基にして書いています。どうかご参考程度にご覧ください。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。