콘솔 복붙용 코드

https://pastebin.com/D6L97LU3


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 들어가는걸 확인.

뭔가 하나 해내서 뿌듯하다.