아이템 쿡북

아이템과 관련하여 자주 수행하는 작업들입니다. 아이템(게임 객체)에 대한 자세한 내용은 여기를 확인하세요.

중첩 아이템 처리

최상위 맵 및 차량 활성 아이템 캐시는 월드에 놓인 바깥쪽 아이템을 추적합니다. 중첩된 아이템이 턴마다 또는 주기적으로 처리되어야 한다면, 바깥쪽 아이템이 캐시에 남아 있도록 부모 컨테이너도 처리가 필요하다고 보고해야 합니다.

활성 상태, 처리 관련 플래그, 내용물을 변경할 때는 일반 itemitem_contents 변경 API를 사용하세요. 이 경로들은 부모 체인을 따라 캐시된 처리 아이템 목록을 무효화하고, 필요하면 배치된 최상위 아이템을 맵 또는 차량 활성 캐시와 다시 동기화합니다. 호출자가 처리 캐시를 위쪽으로 무효화하지 않는 한 item_tags, item_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 );
}