영역과 위치라는게 있고, 스니펫이라는게 있는데,
스니펫은 나무를 바이터로 바꾸는 예제가 있기 때문에 알겠지만,
영역과 위치는 도대체 뭔지 알기 어려울거 같아서 써봄.
https://lua-api.factorio.com/latest/LuaSurface.html#LuaSurface.get_script_areas
https://lua-api.factorio.com/latest/LuaSurface.html#LuaSurface.get_script_positions
쟤네들은 이름을 지어주면 위 함수들로 호출이 가능하다. 스크립트를 통한 변경도 가능하니 링크로 잡아둔 함수 밑에있는 다른 함수도 보자.
아무튼 호출하는 예제를 오른쪽 스니펫 칸에 적어봄.
multi에다가 ㅌ라고 이름지어둔 스크립트포인트의 배열을 집어넣고 for문을 돌림.
그리고 실행하면, (실행하려면 설명에 있듯이, 왼쪽버튼으로 맵 위에다 드래그를 해야한다)
콰과광...
이펙트 엔티티만을 만들었기때문에 데미지도 폭발흔적도 아무것도 없고 그냥 멋있을 뿐이다.
local surface = game.player.surface
local p1 = surface.get_script_position(1)
local p2 = surface.get_script_position('새 포인트')
local a1 = surface.get_script_area(1)
local a2 = surface.get_script_area('영역이란다')
local multi = surface.get_script_positions('ㅌ')
for _, p in pairs(multi) do
surface.create_entity{
name = 'nuke-explosion',
position = p.position,
}
end
스니펫.
위에 1, "영역이란다", "새 포인트" 등은 그냥 변수지정만 해두는 예제로만 써두고 안썼음.
저 기능으로 지정된 위치나 영역 정보는 {x,y} 나 {{a,b},{c,d}} 같이 단순한 좌표랑 영역 값이 아니라
몇가지 key를 가지고 있는 table값이니 실수로 그냥적다가 에러내기 쉽게 생김.
https://lua-api.factorio.com/latest/Concepts.html#ScriptArea
https://lua-api.factorio.com/latest/Concepts.html#ScriptPosition
table 내용은 여기에.
추가로, 개체 태그라는게 있는데, 이건
game.get_entity_by_tag('용사바이터')
같이 호출하면 해당 이름을 가진 LuaEntity를 return한다.
https://lua-api.factorio.com/latest/LuaGameScript.html#LuaGameScript.get_entity_by_tag
이렇게 surface(지면)별로 저장해둔 영역과 위치 데이터, 그리고 태그가 달린 개체 데이터는 blueprint.zip 맵데이터 안에 저장되어,
시나리오를 처음부터 플레이하기를 해도 그 데이터가 유지되어있어서 게임을 하는중에 굴러가는 시나리오 스크립트에서 사용할 수 있다.
그냥 클릭만 해서 들어갈 수 있는 GUI 메뉴 중 하나인데,
나 쓰려면 lua 프로그래밍 하세요~ 라고 대놓고 말하고 있는 기능은 이 두 가지가 거의 유일한거 아닌가 싶다.
댓글 0