아래는 그냥 일반 벽
위는 좀 특수한 처리를 한 벽
만드는 원리 설명
기본적으로 바닐라에는 3개의 세력(force)가 있음
player, neutral, enemy
player는 당연히 유저
neutral은 나무, 바위, 물고기, 절벽 등
enemy는 바이터, 스피터, 땅벌레, 둥지
세력간에는 3가지의 상태가 있을 수 있음. 친구, 휴전, 적대
기본적으로 모든 세력은 적대 상태임. 이때는 상대방의 구조물을 동작시킬 수 없고 상대방의 포탑에 얻어 맞는다
휴전을 맺으면 상대방의 포탑한테 얻어맞지는 않지만 구조물을 동작시킬 수는 없음
친구상태면 포탑에도 안맞을뿐더러 상대방의 구조물을 동작시킬 수 있음(레시피 설정, 상자 접근, 철거 등등등)
이 세력 간의 관계는 쌍방적인 관계가 아니라 일방적인 관계임
A세력이 B세력을 친구로 등록할 수는 있지만 그렇다고 B세력이 A세력을 친구로 등록한 것은 아닐 수도 있음
이럴 경우 B가 A기지에 가면 아무일도 일어나지 않겠지만 A가 B기지에 가면 포탑한테 뚜들겨 맞을 수도 있다
세력을 만들거나 우호관계를 설정하는건 lua 스크립트를 이용해서 하게 된다.
새로운 세력 만들기 : game.create_force('alien') // alien이란 이름의 세력을 만듬
휴전 상태 : game.forces['player'].set_cease_fire('enemy',true) //true일 경우 휴전, false일 경우 휴전해제
친구 상태 : game.forces['player'].set_friend('enemy',true) //true일 경우 친구, false일 경우 친구해제
이걸 응용하면 바이터가 때리지 않는 벽을 만들 수 있다
먼저 wall이라는 새로운 세력을 만듬
-> game.create_force('wall')
wall이라는 세력과 player라는 세력끼리 서로 친구로 맺어줌. 그래야 player가 설치한 벽을 정상적으로 철거할 수 있다
-> game.forces['player'].set_friend('wall',true)
-> game.forces['wall'].set_friend('player',true)
enemy세력에서 wall 세력을 친구로 등록함
-> game.forces['enemy'].set_friend('wall',true)
wall세력이 굳이 enemy세력을 친구로 등록할 필요는 없다. 별 의미가 없음
이제 바이터가 벽을 치지 않는다!
그럼 벽을 설치할 때 벽을 wall세력으로 어떻게 설치하느냐?
벽이 설치되는 걸 이벤트로 감지하고 설치되는 순간
-> entity.force="wall"
이 스크립트를 먹여주면 됨. 설치되자마자 세력이 호로록 바뀌어버린다
이제 이걸 모드로 만들기만 하면 끝
이거 해보고 나니까 좀 치명적인 단점이 있는데
바이터가 부수지 않는 의도로는 잘 동작하긴 하지만
벽의 세력이 나랑 다르기 때문에 청사진이나 해체계획기로 타겟팅이 안됨 엌ㅋㅋ
호오오오오...찬찬히 정독해보겠슴다 ㄳ
필요하다면 모드로 만들어서 모드포탈에 올려드림
아님미다 이런것도 해보는게 재밌으니 직접 해보겠슴다
새로운 모더는 언제나 환영이야
그럼 동맹상태의 벽이면 길을 막아도 바이터가 부수지 않게 됨?
ㅇㅇ 그래서 아예 완전히 막아버리면 걍 경로탐색을 안하는것 같음
그러면 길을 아예 막아버린다면 워터필과 같은 구조물이 되겠네
ㅇㅇ 사실상 섬 만드는셈
아 좀 더 만지작 거려봤는데 벽에 파괴불가 속성이 걸려있으면 애초에 거들떠 보지도 않네. 걍 이걸로 하는게 훨씬 편할듯 ㅋㅋ
벽이 설치되는 걸 이벤트로 감지하고 설치되는 순간 -> entity.force="wall" 이 스크립트를 먹여주면 됨 ------------------------------------ 이 부분은 명령어 입력만으로는 안되는거임?
on_entity_built 라는 이벤트에 등록을 해주어야함
https://lua-api.factorio.com/latest/events.html#on_built_entity
https://m.dcinside.com/board/factorio/26202
대충 설명 적힌글
대충 힌트 예시를 하나 주자면 script.on_event(defines.events.on_built_entity,function on_built(event) game.print(event.created_entity.name) end 이런 코드를 쓰면 플레이어가 엔티티를 설치할 때마다 설치된 엔티티의 이름이 콘솔창에 출력이 됨. 저 부분을 설치된 아이템이 벽일 때 속성을 바꾸는 식으로 해봐
https://gall.dcinside.com/mgallery/board/lists/?id=factorio&page=1&search_pos=-29101&s_type=search_subject_memo&s_keyword=.5Blua.5D
모딩 따라하기 시리즈도 참조하면 좋음
혹시...위에 모드 만들어서 올려준다는거 아직 유효함미까 집에오면 겜할시간도 부족한데 간간히 봤는데 생각보다 복잡해서 진행이 안됨미다 ㅋㅋㅋ
ㅋㅋ 퇴근하고 올려드림. 근데 Force 건드리는 방식이 좋아보임 파괴 불가 속성 거는게 좋아보임?
파괴불가는 거들떠 보지도 않는다는게 어떤느낌인지 모르겠슴다? 첫 움짤같은 느낌을 기본으로 여러종류 미로로 만들고싶은데
그냥 벽에 무적판정 걸어주면 바이터가 마찬가지로 인식 안하고 미로처럼 빙빙 돌아감
미로만 잘탄다면 상관없을거같고 그게 훨씬 편하다니 편한걸로 부탁드림미다
https://gall.dcinside.com/mgallery/board/view/?id=factorio&no=50403