CreateObject(int, string, location, int, string)

与えられた地点に指定した種類のobjectを作成します。

object CreateObject(
    int nObjectType,
    string sTemplate,
    location locLocation,
    int bUseAppearAnimation = FALSE
    string sNewTag = "" 
);

Parameters

nObjectType

作成するobjectの種類(OBJECT_TYPE_*;使える物は限定されています。Remarksをみてください)

sTemplate

作成するobjectのブループリントResRef文字列

locLocation

objectを作成する位置

bUseAppearAnimation

それが現われる時、作成されたオブジェクトにアニメーションを使用させます。

sNewTag

新しいタグの名前(デフォルト: "")


Description

この関数はモジュール内の特定の位置に指定したobjectを作成させます。

この関数を使うことで、アイテム類、クリーチャー、配置物または商店等をあるイベントの発生に合わせて出現させることが可能になります。

パッチにより、sTamplateが無効な場合、

クリーチャーを作成しようとしたときはバッジャー(アナグマ)が、アイテムを作成しようとしたときはその他小物が作られます。パッチ1.30で確認したところ、少なくとも何かが作られるようになりました。



Remarks

nObjectTypeパラメーターには下記の定数のみが使用できます。

- OBJECT_TYPE_ITEM

- OBJECT_TYPE_CREATURE

- OBJECT_TYPE_PLACEABLE

- OBJECT_TYPE_STORE
- OBJECT_TYPE_WAYPOINT (パッチ1.30から)

sNewTagで新しいタグを付けていれば(デフォルトは"")、そのタグでオブジェクトが作成されます。


「sTemplate」には注意してください、さもないと貴方が望んでいる以上のアナグマが発生することになります。ResRefはツールセットと貴方のモジュールで、objectのパレットにおいてユニークキー(他に同じ物がない独特の文字列)です。スタンダードの配置物とクリーチャーのResRefが見たければ、画面内に配置したobjectを右クリックして、「プロパティ」オプションで見てください。配置していない、もしくは一番最良の方法は−ブループリントのパレットで「コピーを作成して編集」を使うことです。「コピーを作成して編集」は適切なobjectの詳細設定を見る事ができる為、非常に確実です。そこには例えば「SKELETON001」のようにブループリントResRefが書いてあります。

残念ながら、ツールセットはそういった動作をします。− ブループリントのコピー(ブループリントを使用して作成されたオブジェクトのコピーではないもの)が、貴方が予期するかもしれないことを示します。よって、貴方のResRefは実際は新しいブループリント用にツールセットに作成された参照文字列(ResRef)です。− プロパティスクリーンを取り消し、スクリプト・エディタに戻る際に即座に消えるもの。さらに混乱することに、標準のブループリントから作成されるobjectのデフォルトのtagは、ブループリントのResRefと同じで、TagをResRefと間違いへと導きかねません。

リソースのResRefを見つける最も簡単な方法は、「表示」メニューをクリックし、「プレビューウィンドゥの表示」メニューを選択することです。これはプレビューウィンドゥを開き、ResRefだけでなく、名前、Tag、そしてもしあればリソースの詳細なコメント等の詳細を表示します。既に配置しているobjectをクリックするか、ツールセットの様々なパレットからObjectを選択するかでプロパティを見ることができます。


Known Bugs

パッチ1.30より、bUseAppearAnimationがついに動くようになりました。ただし動作に若干おかしなところがあると報告されています。


Biowareによると、マップピン付きのウェイポイントを作る場合に問題があるそうです。

このことについてはパッチ1.31のリリースノートで言及されていないので、この問題が未解決かどうかはわかりません。


エリアのOnEnterイベントで、エリアに入ってきたのが何者であるかを調べないでクリーチャーObjectを作成する場合、NWNはクリーチャーを作りつづける無限ループへと陥ります(なぜなら作られたクリーチャーがそれぞれOnEnterイベントに設定されたスクリプト((自分自身を作成した)クリーチャーを作成するスクリプト)を呼び出すからです)。

この問題は GetIsPC(GetEnteringObject()) を使うことにより避けることができます。

TRUEの場合にクリーチャーを作成し、FALSEの場合には作られたクリーチャーがイベントの他の部分を実行するようにします。



Version

1.31

Example

// 下記のスクリプトは次のウェイポイントにニワトリを作成する。
// 備考:以下のスクリプトはモジュール内に「Waypoint1」というタグを持つ
// ウェイポイントを使うことを必要とする。
// 「このプログラムを含むスクリプトを絶対にエリアの
//   OnEnter用イベントに用いないこと!!」(Known Bugsを参照)

int nObjectType = OBJECT_TYPE_CREATURE;
string strTemplate = "nw_chicken"; // スタンダードのニワトリ
location locLocation= GetLocation(GetObjectByTag("Waypoint1")); // ウェイポイントの位置を調べる
int bUseAppearAnimation = TRUE; 
CreateObject(nObjectType, strTemplate, locLocation, bUseAppearAnimation);

See Also

functions: ActionCreate | CopyObject | CreateObjectVoid
categories: Item Creation Functions
constants: OBJECT_TYPE_* Constants


author: Dave Withnall, editor: Charles Feduke, additional contributor(s): Jit Fong Oon, Jazael, Stephen Fritz, JP team: geshi, Rainie
Send comments on this topic.