콘솔 복붙용 코드
https://lua-api.factorio.com/latest/LuaPlayer.html#LuaPlayer.request_translation
이게 기능이 있긴한데 아니 이게 바로 결과물을 뱉는게 아니고 이벤트로 결과를 뱉네??
아니??? 어떻게 쓰란거지?????
그래서 코드를 복잡하게 짜야해서 한번 만들어봤는데 된다.
플레이어가 사용해야하는 함수라서 서버콘솔에선 못하고,
on_string_translated 이벤트를 읽어야해서 해당 이벤트에 핸들러 함수를 걸어야하는데,
시나리오 같은데에서 이미 걸려있으면 또 걸어버리면 시나리오 훼손되니까 없을때만 쓸 수 있게 조건 걸려있고,
멀티 디싱크 비동기화의 주인공인 무표기 전역변수 _Tjob, _my_table을 임시로 만들어서 (플레이 도중에 이 영역을 썼으면 할일 끝나면 되돌려 놓아야하는게 국룰.)
_Tjob은 작업프로그램을 작성해서 함수랑 이것저것 넣어두고, (함수 만들어 넣을거면 global에 넣어도 저장안되니 소용없어서 일반 전역변수 씀)
_my_table에는 현지화할 문자열이 들어간 함수를 넣어서,
_Tjob.start_job(_my_table) 으로 작업의 시작을 알리고,
쉬는 타임 없이 바로 내용 작성하면서 현지화문자열 요청을 걸고,
요청이 다 끝나면
_Tjob.end_request() 으로 요청을 닫고.
이 요청 작업은 오류 처리함수로 감싸서 오류가 났을 경우 재시도 할 수 있도록 만들어지다 만 쓰레기가 있을 경우 치우게 함.
그리고 현지화 이벤트마다 작업 다 끝났는지 확인해서 끝났으면 파일 기록하고 변수 이벤트 삭제하고 종료.
혹시 문자현지화 작업이 안끝날 경우,
/c _Tjob.abort()
하면 전역변수랑 이벤트 핸들러 걸어둔거나 화면에 진행상태 막대 없어짐.
gvv 모드랑 event trace 모드써서 신속한 디버깅이 가능해따...
이벤트라서 이벤트 로그에 기록이 죄다 남고, _Tjob.buffer for문 돌려서 변환이 안된거 찾아서 gvv로 편하게 보면서 로직구성에 빠진 부분들 고쳐서 대응 잘되게함.
_Tjob.request_translate(
{"test-wrong-key",{"very_wrong_key","bad",123,"so","bad",{"",{"EXTREMELY,BAD"}}}},
"ALTERNATIVE WORD"
)
이런것도 Unknown key 대신에 ALTERNATIVE WORD 들어가는걸 확인.
뭔가 하나 해내서 뿌듯하다.
아 _Tjob.player.request_translation(tbl) 이거 리턴값 받아서 요청보냈을때만 버퍼에 집어넣게 했어야했는데... 설명보니까 리턴값이 있네;
이...이게 뭐고..
/c 말고 /sc는 뭐임?
/silent-command 줄여쓴거
루아 문법은 생소한거 너무 많아서 막힐때가 많은데 그래도 이렇게 예제라도 볼 수 있으니 좋다. metatable같은거 보면 숨이 턱 막힘 ㅋㅋ
궁금한거 하나 더 있었는데 data stage 끝나고 runtime scripting 넘어 온 이후에는 아이템이나 엔티티에 해당하는 그래픽 리소스의 경로를 얻어올 수는 없으려나?
Ctrl+F3 누르면 아틀라스 나오잔아. 마우스 올려보면 reference라고 쬐그맣게 나옴. reference의 카테고리 같은걸 쓰고 / 슬래시 쓰고 거기 적힌 이름 쓰면 그림이 나옴.
https://lua-api.factorio.com/latest/Concepts.html#SpritePath
카테고리
이름들.
data에서 따로 집어넣은 스프라이트는 그냥 슬래시 앞에 카테고리 이런거 없이 이름만 써도 호출되기도 하던데
대충 아틀라스에서 볼 수 있다는건 알겠는데 그걸 스크립트로 하는 방법은 없을까? game.item_prototypes["iron-plate"]를 가지고 그 아이콘의 위치를 찾는다던지
아이템이면 무조건 item/아이템이름 으로 아이콘 호출이 되지않아?...