2018年1月29日

【Papyrus.psc】メッセージボックスの説明にアイテム名を取得して表示する

- Papyrusスクリプトの記憶を記録に残すシリーズその8 -

前回の内容に関連して、メッセージボックスの説明欄に装備中のアイテム名を表示してみます。
この機能を使うにはSKSEが必要です。


目次

  1. ダミーアイテムの作成と配置
  2. クエストの作成と設定
  3. メッセージボックスにクエストとエイリアスを関連付ける
  4. スクリプト

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() でクエストを停止しておきます。

ダミーアイテムに付ける名称を表示したいテキストに変えれば、メッセージボックスの説明欄で表示することができます。

目次に戻る


【Papyrus.psc】シリーズリスト

補足:私はスクリプトを書くのは好きですが、専門家ではありません。内容は creationkit.com の情報と個人的な経験を基にして書いています。どうかご参考程度にご覧ください。


0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。