MessageBoxなどで変数の値を表示する方法
メッセージの中でプレイヤーの所持金額やアイテムの名前などを表示することができます。本家のMessageBoxとMessageBoxExのページも必要に応じてご参照下さい。
Message(Box)ExにはOBSE0014が必要
Messageを表示させる関数には、「Message」「MessageBox」「MessageEx」「MessageBoxEx」の4つがありますが、「Ex」が付くものの使用にはOBSE0014以降が必要なので注意してください。「Ex」は無印に比べ変数の表示機能などが大幅にパワーアップされています。
Message(Box)で使用可能な変数
無印ではshort/float/long変数の数字の表示のみが可能です。
書き方 | 説明 | 表示例 |
---|---|---|
%g | 整数を表示 | 999 |
%.0f | 小数第0位まで(=整数を)表示 | 999 |
%.2f | 小数第2位まで表示 | 999.99 |
%% | 「%」を表示 | % |
Message(Box)Exで使用可能な変数
無印のものに加え、Exでは表現の幅が大幅に広がっています。ただしOBSEが必要です。下記の他にもいくつかありますが、使い道が少なそうなので割愛します。
書き方 | 説明 | 表示例 |
---|---|---|
%r | 改行する | |
%n | そのリファレンスのNameを表示 | Apple |
%i | そのリファレンスのFormIDを表示 | 0003365D |
%k | その整数に該当するキーボードキーを表示 | W |
%q | 「"」を表示 | " |
変数の表示の仕方の例
何パターンかの例を挙げてみます。
小数を表示:プレイヤーの座標を表示
「GetPos」を使ってプレイヤーの座標を表示。
float x ;座標と方向は小数なのでshortでなくfloatの使用を推奨 float y float z float rz set x to Player.GetPos X set y to Player.GetPos Y set z to Player.GetPos Z set rz to Player.GetAngle Z Message "プレイヤーの座標は「%.3f, %.3f, %.3f」。向きは「%.3f度」です。" x y z rz
Messageの中で変数の表示の指示があった場合、後ろに羅列してある変数を順番に参照していきます。1番最初の「%.3f」で「x」を参照、次の「%.3f」で「y」…と続きます。
Nameを表示:プレイヤーが調べる・話しかけると嫌味を言われシカトされる
Playerが話しかけた時だけ嫌味を言われてActivateできないスクリプト。
ref Activator Begin OnActivate ;Activateされたら実行されるブロック set Activator to GetActionRef ;GetActionRefはこの場合、Activateした人を返す If (Activator == Player) ;Activateした人がPlayerなら MessageBoxEx "え、なに、あんたの名前%nだって? ダサ、話しかけてくんなよアホ%n。" Activator Activator Return ;ここで処理が終了されるのでActivateされない EndIf Activate ;Player以外ならActivate End
「%n」を使うと、そのリファレンスのNameを表示します。今回の場合はPlayerの名前がズバリ表示されます。使い道は広いです。
おまけ:設定画面などで現在の設定状態を表示する方法
バイクMODの場合、「○×モード:ON」、「△□モード:OFF」みたいに表示することがあるのですが、これも仕組みは単純です。↓はバイクMODのお手軽運転モードのON/OFFを表示するところです。
ref EDM set EDM to DummyItem If (NR500Quest.EasyDrivingMode == 0) ;モードがOFFなら SetName "OFF" EDM ElseIf (NR500Quest.EasyDrivingMode == 1) ;モードがONなら SetName "ON" EDM EndIf MessageBoxEx "EasyDrivingMode: %n" EDM ;%nの部分にはONかOFFと表示される
手順としては、「SetName」でEDMに登録されているダミーアイテムのNameをONやOFFに変えて、それをMessageBoxExで表示しているだけです。ダミーアイテムの使用についての補足をしておきます。
変数EDMは「ref」とある通り、実在する何かのオブジェクトへの「リファレンス」でしかありません。Windowsで言えば、「単なるショートカットでリンク先が登録されているだけ」といったところです。
例えば「EDM.MoveTo Player」とやった場合、EDM変数がプレイヤーのところにやってくるのでなく、EDM変数が登録しているオブジェクトがやってきます。何らかのオブジェクトが必要なのです。
今回は「お手軽運転モードのON/OFFの表示をしたいだけ」なので、適当なダミーアイテムを新しく作ってそれを使っています。
「フラグがONの時とOFFの時で別のメッセージを用意すれば良いのでは?」と思われる方もいらっしゃるかもしれませんが、それだとON/OFFの組み合わせの数だけ、例えば3つのフラグの場合は「2x2x2=8」通りのメッセージの用意が必要であり、非現実的です。2個くらいまでならそっちのが早いですが…。
ちなみに設定メニューを含めたこれらのものは「HTSCLight」を参考にしています。作者様ありがとうございました。