게임에서 Lua 스크립트 호출, 개발과 디버그
Lua 스크립트 개발 도구 설치
“Lua 스크립트 개발 도구 설치” 섹션Lua 스크립트는 원하는 편집기로 작성할 수 있습니다. VSCode와 EmmyLua 플러그인을 사용하면 문법 강조, 중단점 디버그, 변수 확인을 편하게 사용할 수 있습니다.
- VSCode 설치: https://code.visualstudio.com/
- VSCode 확장 메뉴에서 EmmyLua를 검색해 설치합니다.
xlua의 Lua 파일은 .lua.txt 확장자를 사용하므로 VSCode가 기본적으로 Lua 파일로 인식하지 못할 수 있습니다. 작업 영역 설정의 JSON 파일에 다음 내용을 추가합니다.
{ "files.associations": { "*.lua.txt":"lua" }, "luaide.apiType": "xlua" }사용자 설정이 아니라 작업 영역 설정에 추가하세요. 설정 후 .lua.txt 파일에 Lua 문법 강조가 표시되면 설정이 적용된 것입니다.
MOD에서 스크립트 실행과 디버그
“MOD에서 스크립트 실행과 디버그” 섹션게임의 Lua 스크립트 코드는 최종적으로 Asset\BuildSource\LuaScripts\ 리소스경로에 매핑되어 실행됩니다. 실행 시 RUN_SCRIPT 또는 RUN_SCRIPT_FUNC로 스크립트나 스크립트 안의 함수를 호출할 수 있습니다.
RUN_SCRIPT_FUNC*test_script#TestFunc1디버그 기능을 정상적으로 사용하려면 VSCode를 작업 영역 방식으로 열어야 합니다. 프로젝트 폴더 또는 LuaScripts가 포함된 폴더를 작업 영역에 추가한 뒤 저장합니다.
중단점 디버그 절차는 다음과 같습니다.
- F5를 누르거나 VSCode의 실행 메뉴에서 디버그 시작을 선택합니다.
EmmyLua Attach Debug를 선택합니다.- 게임 프로세스
DesertLegend.exe에 연결합니다.
연결이 성공하면 VSCode가 디버그 모드로 전환됩니다.
플러그인 설정표로 Lua 로직 연결
“플러그인 설정표로 Lua 로직 연결” 섹션사용자 지정 Lua 로직을 게임에 연결하려면 플러그인 설정표를 사용할 수 있습니다. 연결할 로직과 함수를 지정하면 게임은 해당 로직이 실행될 때 연결된 Lua 함수를 자동으로 실행합니다. Lua 스크립트 충돌을 줄이기 위해 이 방식을 권장합니다.
| 유형 | 대상 필드 | 대상 값 | 함수 예시 | 설명 |
|---|---|---|---|---|
| ADD | on_game_start | 스크립트명#함수명 | function onGameStart() — 게임 진입 시 실행 end | 게임 진입 또는 저장 불러오기 후 실행됩니다. |
| ADD | get_lua_intAD | 스크립트명#함수명 | function GetLuaIntVal(valKey, contextArgVal) return 0 end | [$lua_int:KEY$] 조회에 대응하는 사용자 지정 정수 조회입니다. |
| ADD | get_lua_str | 스크립트명#함수명 | function GetLuaStringVal(valKey, contextArgVal) return "" end | [$lua_str:KEY$] 조회에 대응하는 사용자 지정 문자열 조회입니다. |
| ADD | game_hour_logics | 스크립트명#함수명 | function OnGameHourLogic(curDay, curH) end | 게임 시간 단위마다 실행되는 로직입니다. |
| ADD | camp_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) | 진영 외교 관계를 변경합니다. | 두 진영, 관계 상태, 호감도 처리 방식과 알림 여부를 받습니다. |



