지금 Renai Transportation 이랑 우탐모랑 두개 사이에서
Renai는 우주에서도 투입기, 기차 충돌 동작 정상적으로 하게 해야하고
우탐모는 우주철도에 아이템 안올라가게 해야함.
후자는 그냥 우주철도 collision_mask 문제였어서 쉽게 해결했는데,
전자 같은경우에는 Renai Transportation에서 실행하는 스크립트 동작을 수정할 필요가 있음... Renai Transportation 모드를 수정하면 우주 일 경우 추가로 연산하는걸 전부 안하게 만들면 간단하게 해결 되는데, 이걸 다른 모드에서 진행할 수가 있나..? 아니면 아예 이벤트를 재정의 해야하나??
스크립트를 수정해야 하는거면 renai 모드에서 따로 그 스크립트에 대한 인터페이스를 적용하지 않는 이상 모드 포크해서 직접 수정해야할 가능성이 높음
그러면 결국에 동작 자체를 수정하는건 불가능 하다는거네.. 그러면 설치된 물체의 표면을 속이거나 하는 방법으로 해봐야겠네.. 안되면 그냥 모드로 따로 안묶고 수정하면서 해야지 뭐..
한번 renai 스크립트 구경이나 해볼까 했는데 따라가기 엄청 힘드네 ㅋㅋ..
스크립트 죄다 통짜라 그냥 따라가긴 힘들긴한데 우주 관련된거는 .space나 orbit이나 .inspace 검색하면 나오더라
걍 대충보니 엔티티 설정되는 순간에 어디에 설치된건지를 보고 설치된 위치가 우주면 InSpace = true를 설정하게 해서 못 동작하게 하는방식인가보네. 저 정보는 Renai 모드 관리하는 전역 변수 global.CatapultList에서 설정하는 것 같은데 저기에 접근해서 값을 false로 교체해버리면 동작하지 않을까 싶음. 스크립트로 하려면 /c __RenaiTransportation__ global.CatapultList[entity.unit_number].properties.InSpace=false 이런식으로
하지만 이걸 콘솔 스크립트로 매번 쳐줄수도 없는 노릇이고 자동으로 하려면 on_tick, on_built_entity 이벤트에 맞추어 저 InSpace값을 덮어씌우는걸 고려할 수 있는데 문제는 RenaiTransportation 모드에서 저 값을 수정할 수 있도록 remote interface를 열어준게 아니니까 저 변수에 접근을 할 수가 없음.
이걸 억지로 하려면 /c __RenaiTransportation__ remote.add_interface(어쩌고 저쩌고) 하는 방식으로 임시로 땜빵 remote interface를 추가할 수는 있는데 이건 게임 저장하고 다시키면 유지가 안되서 매번 킬 때마다 새로 적용 해줘야하고 멀티플레이로 한다면 비동기화 문제를 일으킬 수도 있음.
표면을 속이거나 하는 방식은 표면의 이름자체를 아예 다른걸로 바꿔버릴거란 뜻이려나? 이거 막 바꾸면 우탐모 자체에서 안꼬이려나 걱정되네
아니면 이름은 안바뀌고 진짜 속이는게 목적이라면 호환용 모드를 A,B 두 개를 만들어서 A는 renai보다 먼저 실행되게 하고 B는 renai보다 나중에 실행되게 하는거임. on_built_entity가 발생하면 A모드는 그걸 아예 임시 표면으로 텔레포트 시키고, renai는 임시표면은 우주가 아니니까 InSpace를 false로 설정하고, B는 임시 표면에 있던 개체를 다시 정상적으로 원래 있던 위치로 텔레포트 시키는 식. 진짜 잘 되는지는 실험해봐야 알겠지만 ㅋㅋ
ㅇㅎ.. 일단 좋은 참고가 되네..
혹시 특정 이벤트보다 먼저, 나중에 실행되게 하는걸 정할 수 있나? 호환성으로 뭐 하면 나중에 실행된다는 얘기는 옛날에 들어본거 같기도 한데
내가 알기론 모드 이름 사전순 정렬 순서로 알고 있음, 호환성 걸어두면 더 나중에 실행되고
그럼 내가 만드는 A모드를 기존에 있던 B모드보다 먼저 실행시키고 싶으면 호환성 설정으론 못하고 단지 사전순으로 더 빠르게 하는 방법밖에 없는거임?
B모드가 친절하게 A모드를 호환성 걸어주지 않는 이상 아마 그럴듯?
https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=25511
참고용으로 옛날에 본 글 들고옴