본문으로 건너뛰기
검색어를 입력하세요.
이 페이지는 기계 번역의 도움을 받아 번역되었습니다. 정확한 기준은 중국어 간체 문서입니다.

게임에서 Lua 스크립트 호출, 개발과 디버그

Lua 스크립트 개발 도구 설치

“Lua 스크립트 개발 도구 설치” 섹션

Lua 스크립트는 원하는 편집기로 작성할 수 있습니다. VSCode와 EmmyLua 플러그인을 사용하면 문법 강조, 중단점 디버그, 변수 확인을 편하게 사용할 수 있습니다.

Emmylua.png

xlua의 Lua 파일은 .lua.txt 확장자를 사용하므로 VSCode가 기본적으로 Lua 파일로 인식하지 못할 수 있습니다. 작업 영역 설정의 JSON 파일에 다음 내용을 추가합니다.

{
"files.associations": {
"*.lua.txt":"lua"
},
"luaide.apiType": "xlua"
}

사용자 설정이 아니라 작업 영역 설정에 추가하세요. 설정 후 .lua.txt 파일에 Lua 문법 강조가 표시되면 설정이 적용된 것입니다.

Imgpic 3.png

Imgpic 4.png

MOD에서 스크립트 실행과 디버그

“MOD에서 스크립트 실행과 디버그” 섹션

게임의 Lua 스크립트 코드는 최종적으로 Asset\BuildSource\LuaScripts\ 리소스경로에 매핑되어 실행됩니다. 실행 시 RUN_SCRIPT 또는 RUN_SCRIPT_FUNC로 스크립트나 스크립트 안의 함수를 호출할 수 있습니다.

RUN_SCRIPT_FUNC*test_script#TestFunc1

디버그 기능을 정상적으로 사용하려면 VSCode를 작업 영역 방식으로 열어야 합니다. 프로젝트 폴더 또는 LuaScripts가 포함된 폴더를 작업 영역에 추가한 뒤 저장합니다.

338*42픽셀

중단점 디버그 절차는 다음과 같습니다.

  1. F5를 누르거나 VSCode의 실행 메뉴에서 디버그 시작을 선택합니다.
  2. EmmyLua Attach Debug를 선택합니다.
  3. 게임 프로세스 DesertLegend.exe에 연결합니다.

연결이 성공하면 VSCode가 디버그 모드로 전환됩니다.

플러그인 설정표로 Lua 로직 연결

“플러그인 설정표로 Lua 로직 연결” 섹션

사용자 지정 Lua 로직을 게임에 연결하려면 플러그인 설정표를 사용할 수 있습니다. 연결할 로직과 함수를 지정하면 게임은 해당 로직이 실행될 때 연결된 Lua 함수를 자동으로 실행합니다. Lua 스크립트 충돌을 줄이기 위해 이 방식을 권장합니다.

유형대상 필드대상 값함수 예시설명
ADDon_game_start스크립트명#함수명function onGameStart()
— 게임 진입 시 실행
end
게임 진입 또는 저장 불러오기 후 실행됩니다.
ADDget_lua_intAD스크립트명#함수명function GetLuaIntVal(valKey, contextArgVal)
return 0
end
[$lua_int:KEY$] 조회에 대응하는 사용자 지정 정수 조회입니다.
ADDget_lua_str스크립트명#함수명function GetLuaStringVal(valKey, contextArgVal)
return ""
end
[$lua_str:KEY$] 조회에 대응하는 사용자 지정 문자열 조회입니다.
ADDgame_hour_logics스크립트명#함수명function OnGameHourLogic(curDay, curH)
end
게임 시간 단위마다 실행되는 로직입니다.
ADDcamp_daily_logics스크립트명#함수명function OnCampDailyLogic(tagCamp, curDay)
end
활성 진영의 일일 로직입니다.

게임 핵심 Lua 로직 교체

“게임 핵심 Lua 로직 교체” 섹션

일부 핵심 로직은 Lua 스크립트에 있습니다. MOD 제작자는 대응 스크립트를 덮어써 외교, 내정, 호감도 같은 로직을 조정할 수 있습니다.

주요 로직은 Asset\BuildSource\LuaScripts\GameLogics.lua.txt에 매핑됩니다. 게임디렉터리의 ModSamples\LuaScripts 폴더에서 참고 파일을 찾을 수 있습니다. MOD 설정의 override 기능으로 해당경로을 매핑하면 지정 Lua 스크립트를 교체할 수 있습니다.

자주 참고하는 인터페이스는 다음과 같습니다.

인터페이스용도매개변수 설명
OnGameStart()게임 진입 또는 저장 불러오기 후 호출됩니다.매개변수 없음
GetLuaStringVal(valKey, contextArgVal)[$lua_str:KEY$] 조회 인터페이스입니다.valKey는 조회 키, contextArgVal은 현재 스크립트 환경 매개변수입니다.
GetLuaIntVal(valKey, contextArgVal)[$lua_int:KEY$] 조회 인터페이스입니다.정수 조회 결과를 반환합니다.
SetRoleRep(opRole, targetType, tagID, opVal, isAdd, isNotify, isChainedMode)캐릭터 명성 또는 관계 값을 변경합니다.대상 유형, 대상 ID, 변경값과 알림 여부를 받습니다.
GivePresentLogic(contextArgVal)NPC 선물 호감도 로직입니다.현재 환경 매개변수를 받습니다.
OnCampDailyLogic(tagCamp, curDay)진영 일일 로직입니다.현재 진영과 날짜를 받습니다.
OnAIDecideDipEvent(execCamp, dipInfo)AI 세력의 외교 행동 판정입니다.실행 진영과 외교 이벤트 정보를 받습니다.
OnDipEventCallback(dipResult, dipInfo)외교 이벤트 처리 결과 콜백입니다.외교 결과와 이벤트 정보를 받습니다.
SetCampRl(campID1, campID2, rlState, fvOpMode, fvOpVal, isNotify)진영 외교 관계를 변경합니다.두 진영, 관계 상태, 호감도 처리 방식과 알림 여부를 받습니다.