Bethesda Tutorial Papyrus Introduction to Properties and Functions/ja

From the CreationKit Wiki
Jump to navigation Jump to search


Language: English  • français • 日本語 • 한국어 • polski
JapaneseFlag.pngこのページは日本語です。
リンク先ページの編集上の訂正または翻訳が必要です。

Bethesda Tutorial Papyrus プロパティと関数の導入



Bethesda Tutorial Papyrus プロパティと関数の導入
スクリプティング シリーズ、3章
チュートリアルハブに戻る
LeftArrow.png 前のチュートリアル 次のチュートリアルRightArrow.png

概要[edit | edit source]

このチュートリアルはあなたがすでに「Hello World Tutorial」及び「Variables and Conditionals Tutorial」を完了していることを前提に説明していきます。
これは最初の2つのチュートリアルより長くなり、より高度なトピックを紹介します。がんばってください!


このチャプターで学べること:

  • 前のチュートリアルで上辺だけ説明したものに関して:
    • スクリプトの最初の行とスクリプトの extends (継承) について
    • スクリプトにツールチップを加える方法 {}
  • プロパティとフックの方法
  • 関数の作成と使用法

最初の行[edit | edit source]

前のチュートリアルで概略だけを説明して先に行ってしまったいくつかの事についてこれから説明します。

チュートリアルをここまで順にやってきた人は、石碑にアタッチしたスクリプトの最初のラインは以下のようになっているはずです:

 Scriptname HelloWorldScript extends ObjectReference
  • Scriptname HelloWorldScript extends ObjectReference: どのスクリプトの最初のラインでもこれから始まります。
  • Scriptname HelloWorldScript extends ObjectReference: ここでスクリプトを命名しています。今回の場合「HelloWorldScript」という名前はこのスクリプトに言及するどんなスクリプトも、この名前を使用することになります。
  • Scriptname HelloWorldScript extends ObjectReference: このスクリプトが既に存在する別のスクリプトに基づいている事を意味する特別なワードです。
  • Scriptname HelloWorldScript extends ObjectReference: このスクリプトが他のスクリプト(今回の場合は「ObjectReference」)に基づいて拡張されていることを意味します。

拡張されたスクリプト[edit | edit source]

あなたが作成するほとんどのスクリプトは別のスクリプトから拡張されたものです。
あなたがスクリプトを拡張する時、「私とのスクリプトは、この他のスクリプトに特別なものをプラスしています」という意味のスクリプトを書いています。

あなたがどのスクリプトを拡張するかということは、「私のスクリプトのオブジェクトタイプ」についてゲームに言う方法でもあります。

例えば、あなたがリファレンスとなるオブジェクトにスクリプトを加える場合(たとえば今作成している石碑)、その「ObjectReference」Scriptを拡張する必要があります。
あなたがQuestにスクリプトを加えたいならば、「Quest」Scriptを拡張することになります。

スクリプト作成に慣れるにつれ、その拡張されるスクリプトのコンテンツについてより詳しくなることでしょう。
今はあなたのスクリプトは別のスクリプトで拡張される必要があるのだということだけを、とりあえず知っておいて下さい。

ツールチップを加える[edit | edit source]

作成したスクリプトの2行目について不思議に思いましたか?以下のような一文です:

  {This is my very first script!}

あなたがその新しいスクリプトを作成した時、その「Documentation String」に以下のように入力したはずです:

Papyrus Tutorial1 NewScript.jpg

これはスクリプトタブにリストされたあなたのスクリプトにマウスを置くとツールチップとして、そのテキスト内容が以下のようにポップアップで表示されます:

Script Tooltip.jpg

もしあなたがそのツールチップのテキスト内容を変えたい場合、その { } 内のテキストを変更してください。

あなたはProperty(特性)を管理する助けとしてツールチップを加える事もできます。

プロパティ[edit | edit source]

Propertyは変数に似ていますが、エディターでいろいろなものにそれをフック(リンク)させることができます。

それではフックしてみましょう。

「int count」スクリプトラインの上に以下を追加してください:

 Message property box1 auto
 {Points to the message box that is shown on the first activation.}

 Message property box2 auto
 {Points to the message box that is shown on the second activation.}
 
 Message property box3 auto
 {Points to the message box that is shown on the third activation.}
  • Message property box1 auto: Propertyのタイプです。この場合「Message」タイプです(これは「int」タイプのスクリプトで「count」変数を定義した事と同じです)
  • Message property box1 auto: この「Message」は変数ではなく、Propertyであることを言っています。
  • Message property box1 auto: このPropertyは「box1」という名前であることを言っています(これは「int」タイプのスクリプトで「count」変数を定義した事と同じです)
  • Message property box1 auto: あなたがPropertyを宣言する際、忘れずに使用しなければならないキーワードです(ほとんど全てのPropertyは「auto」キーワードを使用しています。当分なぜこれが必要かについて分からなくても心配しないでください。単にPropertyを宣言する時に「auto」を加える必要があるということだけ覚えておいて下さい)

先ほどと同じように { } を使用したので、それらの行についてのツールチップを提供します。ちょっと見てみましょう:

「Hit file->save」で「Script」ウィンドウを閉じて、その石碑のReferenceウィンドウ上の「Propaties」ボタンをクリックしてください。
以下のようなウィンドウが開かれ、そのリスト項目にマウスカーソルをおくとツールチップがポップアップされるはずです:

Properties Tooltip.jpg

メッセージボックスを作成する[edit | edit source]

それではこのPropertyにフックするための「Message」オブジェクトを作成しましょう。
Object Windowで「Miscellaneous」を開き「Messages」カテゴリをクリックしてください。そのリスト上を右クリックし「New」を選択してください。

New Message.jpg


以下を入力してください:

  • ID: myMessageBox1
  • Message Text: Hello World! This is the first time the player activated the Pillar.
Hello World Message example.jpg

そうしたら、あと2つ以下のようなMessage Boxを作成してください:

  • ID: myMessageBox2
  • Message Text: This is the second time the player activated the Pillar.
  • ID: myMessageBox3
  • Message Text: It's been three or more times activating the Pillar.

スクリプトのPropertyにMessageBoxをフックする[edit | edit source]

あなたのスクリプトのPropertyウィンドウをもう一度開いてください。

Cリストにある「box1」のライン上をクリックして「Edit Value」ボタンを押してください。 左の「Pick Object」プルダウンメニューが有効になるのでそこで「myMessageBox1」を指定してください。 同じように「box2」には「myMessageBox2」を、「box3」には「myMessageBox3」をそれぞれ割り当ててください。

Edit Property Value example.jpg
Edit Property Value example2.jpg
Edit Property Value example3.jpg

「OK」ボタンでPropertyウィンドウとReferenceウィンドをそれぞれ閉じ(それをしないと変更が反映されません)、最後にプラグインをセーブしてください。

これで3つのMessageオブジェクト(myMessageBox1, myMessageBox2, and myMessageBox3))にProperty(box1, box2, and box3)をリンク(フック)させることができました。

3つPropertyに3つのMessageBoxを適切にリンクできたことを確認したならば、スクリプト編集を続けましょう。

Calling functions on Properties[edit | edit source]

ゲーム上でそれらMessageBoxを表示させましょう。

あなたのスクリプトを開いて、以下の行を:

if count == 1
   Debug.MessageBox("Hello, World!")
elseif count == 2
   Debug.MessageBox("Hello, World. Again!")
else
   Debug.MessageBox("Hello, World. Enough already!")
endif

以下のように変更してください:

if count == 1
   box1.Show()
elseif count == 2
   box2.Show()
else
   box3.Show()
endif

今したことは(box1, box2, box3)PropertyのそれぞれのMessageオブジェクト上に「Show()」関数(Function)を呼びました。 「.」(ピリオド)は、ピリオドの右の関数(Show())を左のオブジェクト(box1)に呼びます。

入力できたらスクリプトをセーブして、OKを押しReferenceウィンドウを閉じてください。そしてあなたのプラグインをセーブし、ゲームでテストしてください(COC MolagBalVoiceCell)

ミスがなければゲーム上で、その石碑をそれぞれクリックするたびにそれらのメッセージが表示されるはずです。

もし「cannot call show() on a none object」(オブジェクト上のshow()を呼べない)についての警告が表示された場合、エディターに戻り、適切にPropertyがMessageオブジェクトにフックされているか確かめてください。

それができたら、次は関数を作成しましょう。

関数の作成[edit | edit source]

デバック上で「MessageBox()」関数を呼んだように、PropertyのそのMessage上で「Show()」関数は呼ばれます。
私たちは自身のスクリプト上で作成された関数を呼ぶ事ができます。
ただ、新しい関数を呼ぶ前にまずはそれを作成しなければなりません。

あなたのスクリプトの一番下に以下のスクリプトを加えてください:

 Message function GetMessage(int currentCount)   
   Message chosenMessage 

   if currentCount == 1
       chosenMessage = box1 
   elseif currentCount == 2
       chosenMessage = box2
   else
       chosenMessage = box3
   endif

   Return chosenMessage 

 endFunction

この最初のラインを以下のように分解して説明します:

  • Message function GetMessage(int currentCount): この関数はMessageオブジェクトを返すこと意味します。注意:このオプション関数は何かを返す必要はありません。
  • Message function GetMessage(int currentCount): これが「関数」であることを示します。Propertyを宣言する時「property」を使用したのと同じです
  • Message function GetMessage(int currentCount): これは関数の名前です。私たちのスクリプトからそれを「呼ぶ」ために使用します。
  • Message function GetMessage(int currentCount): 全ての括弧()は「引数」を意味します。それを呼ぶ時、関数に与える必要があります。今回の場合、「INTeger(整数)」をこの関数に供給させます。私たちはその引数を「currentCount」と命名しました。この関数で取得する値について参照するのにこの「currentCount」引数を使用します。

次の行:

  • Message chosenMessage: ここではタイプがMessageである変数を宣言しています(先ほどの「int」タイプとして「count」変数を宣言したのと同じです。私たちはどんな種類のオブジェクトも作成することができます。今回の場合は「Message」オブジェクトです)
  • Message chosenMessage: この変数の名前を「chosenMessage」と名づけました

その下のセクション(ラインではなく、if - else構文全体):

「currentCount」(現在のカウント)が1ならばbox1を「chosenMessage」に入れます。
同様にカウントが2ならばbox2を「chosenMessage」に入れ、それ以外ならbox3を入れるようにしています(「==」 と「=」の違いに注意してください)

最後の行:

 Return chosenMessage

この意味はGetMessage()関数を呼ぶ時、そのMessageは現在の「chosenMessage」Property(box1~3のどれか)を返します。

それでは新しい関数を利用するためスクリプトを変更しましょう。

以下の行を:

if count == 1
   box1.Show()
elseif count == 2
   box2.Show()
else
   box3.Show()
endif

このように置き換えます:

 GetMessage(count).Show()

ここでしていることはGetMessage()関数を呼んで、パラメータとしてcount(カウントの値)を指定しています。 そしてゲーム上でそれらを表示するためその右に「.」ピリオドとShow()を置きました。

完成したスクリプトはこのようになります:

 Scriptname HelloWorldScript extends ObjectReference  
 {This is my very first script!}

 Message property box1 auto
 {Points to the message box that is shown on the first activation.}

 Message property box2 auto
 {Points to the message box that is shown on the second activation.}
 
 Message property box3 auto
 {Points to the message box that is shown on the third activation.}

 int count  ;stores the number of times this object has been activated

 Event OnActivate(ObjectReference akActionRef)
    count = count + 1
    
    GetMessage(count).Show()
 endEvent

 Message function GetMessage(int currentCount)
   Message chosenMessage

   if currentCount == 1
       chosenMessage = box1 
   elseif currentCount == 2
       chosenMessage = box2
   else
       chosenMessage = box3
   endif

   Return chosenMessage 

 endFunction

ゲームで実行させたとき、Messageボックスは正しくポップアップするはずです。(COC MolagBalVoiceCell)

次のチュートリアル[edit | edit source]

次のチュートリアルは仲間を生き返らせる特別なボスを作成していきます。

LeftArrow.png Previous Tutorial Return to Tutorial Hub Next Tutorial RightArrow.png