アイテム クックブック

ここでは、アイテムを使って実行したい一般的なタスクをいくつか紹介します。 アイテム(ゲームオブジェクト)の詳細については、こちらを確認してください

ネストされたアイテムの処理

最上位のマップおよび車両のアクティブアイテムキャッシュは、ワールドに置かれた外側のアイテムを追跡します。ネストされたアイテムがターンごと、または周期的な処理を必要とする場合、その外側のアイテムがキャッシュに残るよう、親コンテナも処理が必要であることを報告しなければなりません。

アクティブ状態、処理関連フラグ、内容物を変更するときは、通常の item および item_contents 変更 API を使用してください。これらの経路は、親チェーンを上向きにたどってキャッシュされた処理アイテム一覧を無効化し、必要に応じて配置済みの最上位アイテムをマップまたは車両のアクティブキャッシュと再同期します。呼び出し側が処理キャッシュを上向きに無効化しない限り、item_tagsitem_contents のストレージ、アクティブ状態を直接変更しないでください。

処理間隔は、最も速く処理される子から継承されます。アクティブな道具が入った食品コンテナは、食品だけのコンテナならより遅い腐敗間隔を使える場合でも、そのアクティブな道具の1ターン間隔を維持する必要があります。変更によって item::processing_speed() が変わる可能性がある場合、外側のアイテムをアクティブキャッシュへ再追加すると、既存の参照は古い項目として残らず、正しい速度キューへ移動されます。

内容物を再帰的に処理するときは、子を取り外したり処理したりする前に、contents.processing_items() の変更安全なスナップショットを取得してください。ネストされた食品を処理する間は、密封または保存コンテナなどの親コンテナ文脈を維持し、腐敗動作が変わらないようにしてください。

あるtripointから別のtripointへのアイテムの移動

auto move_item( map &here, const tripoint &src, const tripoint &dest ) -> void
{
    map_stack items_src = here.i_at( src );
    map_stack items_dest = here.i_at( dest );

    items_src.move_all_to( &items_dest );
}