Oblivionいじり アレコレ

OBLIVIONのCSやMOD,改造などの情報を載せています。他にオマケ情報もあり。

MessageBoxなどで変数の値を表示する方法

メッセージの中でプレイヤーの所持金額やアイテムの名前などを表示することができます。本家のMessageBoxMessageBoxExのページも必要に応じてご参照下さい。

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」を参考にしています。作者様ありがとうございました。

戻る