*はじめに [#f2f95cd9] ベンダー(PCと商品を売買してくれる人)のしくみを見ながら、Reference、Reference ID(参照用ID)の感覚を掴んでいきましょう。もっとシャッキリ説明できる方がいたら、どうかニュアンスが正しく伝わるようにどんどん修正していってください。それだけが俺の願いです。 *ベンダーとは [#h3202cb8] ベンダーは店舗などに配置されたNPCのことを便宜上そう呼ぶだけで、「売買する機能を持ったNPC」のことだと考えていただければ十分です。ベンダーと他のNPCの違いはなんでしょうか? それは、''NPCのAIで売買がチェックされている''点と、''PCと売買をする時、自分の所持品とは別に在庫コンテナを持つ''点です。前者はNPCのAIを開いてみれば一目瞭然なので、後者を実際に見ていきましょう。 まず、Imperial CityのMarket Districtにある、Fighting ChanceのRohssanを例にとって見ていきます。 オブジェクトウィンドウのNPCから''Rohssan''を探し、右クリック→Use Infoを表示してみてください。上半分にNPC''Rohssan''と関連づけられているオブジェクトのリスト、下半分にNPC''Rohssan''が配置されているセルの一覧が表示されます。Rohssanならセル一覧にはFighting Chanceの店内セル一つだけだと思いますので、それをダブルクリックします。 &ref(vender1.png); 画像の対訳表 |使用リスト|Use Report| |以下のオブジェクトに使用されています|Use by these objects| |以下のセルで使用されています|Used in these cells| このUse Infoは、そのオブジェクトがどこに配置されているかを知ることができて便利です。何個配置されているか、だけなら「[[基本操作>MOD/Tool/ConstructionSet/基本操作]]」でも述べたように、オブジェクトウィンドウの表で確認できます。 レンダウィンドウにRohssanとFighting Chanceの内装が描画されたら、レンダウィンドウのRohssanのオブジェクトをダブルクリックしてください。以下のような''Reference''ダイアログが表示されるはずです。 &ref(vender2.png); 画像の対訳表 |参照用Editor ID|Refence Editor ID| |オブジェクト|Base Object| |オブジェクト本体を編集|Edit Base| |場所|Space| |Referenceをレンダウィンドウから選ぶ|Select Reference in Render Window| |セル|Cell| |スクリプトから参照できるようにする|Persistent Reference| |開いている(ドア)|Open By Default| |表示限界距離より遠くても表示|Visible When Distant| |Disableとして配置|Initially Disabled| 今表示しているのはMerchant Containerのタブです。なんとなく、今回話題となっているフレーズが出揃った気がしますね。Referenceにあるのは、ベンダーとしてのNPCに関連づけられているコンテナです。 ここで特定のコンテナを指定することにより、これを在庫としてNPC''Rohssan''が売買を行うのです。 CS Wikiにも記載されていますが、NPCがベンダーとしての機能を持つためには、以下の条件が必要とされます。 [[CS Wiki (The Elder Scrolls Construction Set Wiki)>http://cs.elderscrolls.com/constwiki/]]にも記載されていますが、NPCがベンダーとしての機能を持つためには、以下の条件が必要とされます。 //CS Wikiとだけ書いても、(Googleで検索しても)具体的にどこのwikiのことだかわかりづらいので正式名称とリンクを記入しておきます -NPCのAIで売買が可能になっていること -NPCのMerchant Containerタブで特定のコンテナがReferenceに指定されていること 指定しなくても売買は出来ますが、売った品物がNPCのインベントリに保管され、売るたびに延々と増えていきます。 これを防ぐには、指定したコンテナにRespawnを設定しておきましょう。 またコンテナの設定で「Disableとして配置」にチェックを入れておかないと、NPCのMerchant Containerタブから指定できないようです。 またコンテナの設定で「Disableとして配置」(Initially Disabled)にチェックを入れておかないと、NPCのMerchant Containerタブから指定できないようです。 -そのコンテナの所有権がNPCにあること //-コンテナはLockされ、そのLevelが「Need a key」であること←必須では無いようなのですが、とりあえず残しておきます。 他にも、どの時間帯に商売をしてくれるかなどのスケジュール処理は必要になってきますが。 さて、よく見るとReferenceの項目には’*****’ ’******’のように、なぜか名前が二つ続けて表示されているのがわかると思いますが、これは次の項で述べることにします。 ここでは、NPCが商品を売買するにあたり、どこから商品を出し入れしているのか、理解できていれば十分です。 *Referenceとはなんだったのか [#u280282b] referenceは「参照する」などの意味です。 前項では、NPCが「参照する」コンテナを指定する際に登場しました。 他にも、ドアマーカーで別のセルとの移動ポイントを作る際、ドアマーカーとドアマーカーを対応させるためにreferenceとして移動先のドアマーカーを指定します。 また、オブジェクトやドアの所有権が誰にあるのか、というOwnershipの指定も、ある種の参照として扱われているようです。 &ref(vender1.png); この上半分に表示されているのは、Rohssanと関連づけられているオブジェクトだと説明しましたが、言い代えるなら、これは''所有権の持ち主としてRohssanを参照している''と表現することもできるわけです。 *Reference ID、参照IDとは [#j04db7ed] 一方、Reference IDとはなんなのでしょうか。簡単に言ってしまえば、「いくつも存在する同一のオブジェクトを区別するための便宜上のEditor ID」となります。 これだけではわかりにくいと思いますが、では次の場合を考えてみましょう。 ここに、''ChestVendorSmithBladesI01''というEditor IDのコンテナがあります。Rohssanの店に存在するコンテナですが、実はこのコンテナ、Use Infoを見ればわかるように''Imperial CityのSlash 'n Smash''にも、''LeyawiinのThe Dividing Line''にも同じEditor IDを持つコンテナが配置されています。いずれもベンダーのMerchant ContainerとしてReferenceに指定されていますから、それぞれの在庫になっているということです。 ではこういう時、Slash 'n Smashで何かを購入すると、他の店では同じ品が同じだけ減ってしまったりしているのでしょうか? 結果的に同じEditor IDを持つのですから、そうなってしまいそうなものです。 ところが、ここでReference IDの存在が重要になってきます。 全てのオブジェクトにはEditor IDとForm IDを持つことを以前説明しましたが、残念ながら''スクリプトやReferenceで16進数のForm IDを指定することはできません''。英数字で構成されたEditor IDを指定することはできます。 オブジェクトを配置すると個別のForm IDが新たに割り振られます。コンソールなどからであればForm IDだけで十分ですが、前述のようにスクリプトなどから特定のオブジェクトを参照したい場合、Form IDだけでは用が足りないので困ってしまいます。 そこで、それぞれに異なるReference IDをつけてあげることによって、改めて別々の存在としてスクリプトから参照したりできるようになります。いわば、とあるEditor IDを持つ全く同じオブジェクトたちの中から、スクリプトが特定の一つを識別するための新しいIDとなるわけです。 **まとめ [#e2b321c2] -Referenceは様々な場面で、オブジェクトとオブジェクトを関連づけること、その対象オブジェクトを言う -Reference IDは、オブジェクトを個別に認識するために便宜上付けられるEditor IDのようなもの