[처음 입문하는 공장장을 위한 열차 사용법]

https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=106924&s_type=search_subject_memo&s_keyword=%EA%B8%B0%EC%B0%A8&page=3

1. 메인버스에 처음 입문한 공장장을 위한 쉬운 열차 사용법반갑다젠장할 시험이 이번주인데 미쳤다고 누가 물어본 적도 없는 기차의 쉬운 사용법에 대한 글을 싸고있는 플탐 700시간짜리 애기 공장장이다나같은 놈도 쉽게 쓰고있는, 아주 기초적인 형태의 확장성 좋은 열차 터미널의 형gall.dcinside.com

https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=106926&page=2

2. 메인버스에 처음 입문한 공장장을 위한 쉬운 열차 사용법https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=106924&page=1 1. 메인버스에 처음 입문한 공장장을 위한 쉬운 열차 사용법gall.dcinside.com


[처음 입문하는 공장장을 위한 열차 인터럽트 사용법]

https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=107792&page=4

3. 처음 입문한 공장장을 위한 열차 인터럽트 사용법 -기초편-https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=106924&s_type=search_subject_memo&s_keyword=%EAgall.dcinside.com



암만 생각해도 이번 편은 처음 하는 사람이 쓰기엔 너무 어려울 것 같아서 제목에서 '입문하는' 뭐시기 걍 빼버렸는데



아무튼 최근 우탐모를 하면서 기존에 쓰던 것 보다 더 똑똑하게 기차를 쓰는 방법에 대한 수요를 느끼게 되어, 혼자 고찰하고 연구해본 결과 만들어내게 된 시스템을 공유하려고 이번 글을 씁니다.



서론은 여기까지로 하고 바로 들어가보겠습니다



1. 시스템의 구성


일단 이 시스템은 크게 4가지 요소로 구성됩니다.


1) 대기소,  2) 상차장{공급자},  3) 하차장{공급받는자},  4) 테이블



여기서 제일 생소한 이름인 테이블이 무엇이냐?

간단하게 말하자면 그냥 '빨간(녹색) 전선'입니다.



그런데 이 전선은 이 시스템을 구성하는 나머지 모든 요소들과 다 '직접' 이어져있어야합니다.

물론 신호 전달만 할 수 있으면 그만이기 때문에 AAI 모드의 신호 송수신기를 이용해도 괜찮습니다.

아무튼 이 시스템에 속하는 모든 상차장, 하차장, 대기소를 싹다 한 가지 색의 신호 전선으로 이어주면 제가 명명한 '테이블' 이라는 것을 완성한겁니다.



2. 테이블에 하는 일


이 테이블 위에는 열차로 옮기고자 하는 각 자원의 종류마다 두 가지의 신호를 올려두게 됩니다.


첫째로 각 자원의 '요청 신호'입니다.



이 요청신호는 각 하차장의 창고가 직접 발신합니다.

예시 사진의 경우, 이 벽돌 하차장은 창고의 재고가 5k 밑으로 떨어지게 되면 '벽돌 요청 신호'를 1만큼 테이블에 올려둡니다.

수량 비교 조합기의 출력 부분을 보면 빨간 전선으로 전신주와 신호를 주고받고 있는것을 알 수 있습니다.



그리고 테이블에 올라와야하는 두 번째 신호는 각 요청에 대한 '현재 배달원 수' 입니다.




예시 이미지를 보시면 이 벽돌 하차장의 정류장은 '기차 수 읽기' 항목을 통해 현재 정류장에 접근하고 있는 기차가 몇 대인가? 에 대한 정보를 알파벳 B 신호를 통해 테이블에 올리고 있습니다.


예시 사진은 현재 '품질'을 포함한 DLC 콘텐츠를 모두 제외한 채 우탐모를 하고있기에 어쩔 수 없지만 품질이 있다면 '현재 배달원 수' 정보를 품질이 다른 동종의 신호로 사용해도 상관 없습니다


그리고 모든 상차장은 역시 '기차 수 읽기'를 통해 하차장과 똑같은 종류의 신호를 테이블에 올려야합니다!



3. 대기소가 하는 일 


대기소는 테이블에 올라와있는 신호를 각 기차에 전달하고, 일이 없는 상태의 기차들을 한 곳에 모아 보관하는 역할을 합니다.




"테이블에 올라온 신호를 왜 대기소에서만 전달하나?"

에 관한 내용은 다음 단락에서 설명하겠습니다



4. 기차의 일정 구성



일단 이 시스템에 등록된 모든 배달원들은 주 일정에는 오직 '대기소'에 가기 하나만 넣어준 뒤, 모든 실제 업무는 인터럽트를 통해 자동으로 관리합니다.


그리고 각 인터럽트의 구성은 다음과 같습니다.


 


조건1, 조건2, 조건3을 모두 동시에 만족할 때, 요청된 해당 자원의 상차장으로 가서 -> 화물을 채우고, 하차장에 가서 -> 화물을 비우면

이 배달원은 무사히 하나의 업무를 마친 것입니다.


그리고 이 기차가 다시 대기소로 돌아가있는 상태에서 세 가지 조건을 동시에 만족하는 요청이 생길 때 또 출발해서 하나의 일정을 완수합니다.


그리고 각 조건들은 다음을 의미합니다.



조건 1 = '요청 신호'가 있으면 출발하세요

조건 2 = 지금 들어온 '요청 신호'를 먼저 수행하고있는 배달원이 없을 때만 출발하세요

조건 3 = 상차할 물건이 없다면 요청이 있더라도 출발하지 마세요



조건 1에 대하여


조건 1을 만족하기 위해서는 하차장의 창고에 쌓인 재고가 목표 수량보다 적어 요청신호를 발신하고 있는 상태여야 합니다.



이 부분에서 "테이블에 올라온 신호를 왜 대기소에서만 전달하나?" 라는 질문에 대해 답할 수 있습니다.


한 종류의 자원을 받는 하차장이 여러개 있을 때, 요청을 받아 출발한 기차가 '실제로 자원을 요청하고 있는 하차장'으로 이동하려면, 자원을 요청하고있지 않는 하차장의 정류장은 꺼져있어야 합니다.


하지만 하차장을 켜고 끄는 조건에 쓰이는 신호는 아래 예시 사진을 보면 아시겠지만 '요청 신호'와 똑같은 신호를 사용하고 있습니다.


이런 상황에서 하차장의 '기차에 신호 보냄'의 체크를 TRUE로 설정하면, 하차장에서 출발하려는 기차는 '와 미친 요청 신호가 몇 천 개가 있네' 이러면서 또 일하러 갑니다


물론 수량비교조합기 등을 하나 더 써서 다른 종류의 신호로 정류장의 on-off를 제어하면 위 오류를 막을 수 있지만 저는 하차장마다 신호조합기 하나 더 쓰기 싫어서 그냥 이렇게 했습니다




조건 2에 대하여


이 조건이 없으면 겨우 아이템 몇백 개만 채워도 만족되는 요청신호 하나를 위해서 첫 번째 기차가 이동하는 시간동안 그 뒤에 있는 기차들을 무한정 중복으로 호출합니다.


그렇기에 실제로 움직이고 있는 기차들의 숫자도 함께 읽어 테이블에 올린 뒤, 이 두 신호를 비교하는 조건을 추가해줬습니다.



여기서 주의해야할 부분은 위에서도 얘기했지만 각 자원의 [상차장]에도 똑같이 기차 수 읽기를 통해 각 자원마다 고유한, 같은 신호를 테이블에 올려줘야합니다.


그렇지 않으면 이 조건을 추가했음에도 불구하고 첫 번째로 출발한 기차가 대기소 -> 상차장으로 이동한 뒤에 상차를 완료하고 하차장으로 이동하기 시작하는 순간까지 후속 기차들을 무한정 호출하게 됩니다.



조건 3에 대하여


아무튼 이 시스템은 몇 개의 기차로 하여금 여러 종류의 자원의 공급을 동시에 관리하도록 하기 위해 존재하는 것입니다.

그런데 있지도 않은 물건을 위해 그 물건이 실제로 생길 때 까지 굳이 상차장까지 가서 허송세월을 하고있으면 그만큼 다른 물자를 수송할 수 없게 됩니다.


따라서 요청에 따라 물건을 수송하기 위해 필요한 만큼의 재고가 실제로 있는지 확인하기 위해 이 조건이 존재합니다.



하지만 조건 2를 구현하기 위해 이미 자원 한 종류당 두 가지 씩이나 되는 신호를 할당해 테이블에 올리고 있습니다.

이 조건을 구현하기 위해서 신호를 또 한 가지 더 할당하자니 복잡하기도 하고 귀찮기도하고 아무튼 문제가 많습니다.


그렇기때문에 기차가 실제로 사용할 수 있을 만큼의 재고를 보유하지 못한 공장은 그냥 꺼버립니다.

그리고 회로 조건이 아닌 '~~ 정류장이 가득 차지 않음' 이라는 조건을 활용해 회로 신호가 아닌 방법으로 세 번째 조건을 구현했습니다




결론


이 시스템을 활용하면 LTN이나 다른 모드가 없더라도 기차들이 여러 종류의 재료들을 '실제로 수요가 있을 때'를 자동으로 판별해서

적절하게 옮겨줍니다

한 종류의 자원을 요청하는 하차장이 여러개 있어도 잘 작동합니다.

심지여 많은 수의 하차장이 몇 놈은 요청하고 몇 놈은 요청을 안하고있어도 잘 작동합니다.

같은 종류의 아이템을 요청하나, 목표하는 재고 수량이 서로 달라도 작동합니다.


아무튼 잘 작동합니다



혹시 설명이 부족한 부분이 있거나, 이 시스템에 예기치 못한 오류가 있거나, 본인의 게임에 이를 적용하려 할 때 문의할 점이 있다면 댓글 바랍니다