조그마한 프로그램이 아닌.. 제법 덩치가 있는 프로그램을 짜려고 한다면 일단 코드가 길~~어지는 문제와 함께.. 나중에 특정 소스 코드를 수정해야 할 일이 생겼을 때, 그 소스 코드를 찾기가 번거롭다는 단점들이 생겨나게 됩니다. 따라서 중, 대형 프로젝트를 하는 경우에는 모든 소스 코드를 하나의 파일에 다 때려 넣지 않고 관련이 있는 내용을 따로 분류해서 여러개의 파일에 나눠서 저장을 하게 됩니다.

더길드2에 있는 스크립트들이 그 좋은 예라고 할 수 있겠지요.. 더길드2에서 실행되는 모든 스크립트 컴맨드들이 하나의 파일 안에 다 들어가 있는 것이 아니라 Scripts 폴더 안에 수 백개의 파일로 나뉘어 있습니다.. 이 모든 파일들이 하나의 파일에 저장이 되어 있었더라면 개발하는 사람들이 참 끔찍하다 생각을 했을겁니다. 

여러가지 잇점 때문에 거의 대부분의 언어들이 다중 파일로의 소스코드 분할 기능을 지원을 합니다. Lua도 작은 C언어 답게 이 기능을 지원을 하는군요.. 이제부터는 어떻게 이 기능을 사용할 수 있는지를 설명을 드리겠습니다.

간단한 예제를 하나를 들어보겠습니다. 먼저 파일을 3개를 만들겁니다..

function AddExp()

  IncrementXP("", 300)

end

위의 내용을 ms_yCheatSub1.lua 라는 파일에 저장합니다.

function AddMoney()

  CreditMoney("", 500, "IncomeOther", false)

end

위의 내용을 ms_yCheatSub2.lua 라는 파일에 저장합니다.

Include("Measures/ms_ycheatsub1.lua")
Include("Measures/ms_ycheatsub2.lua")

function Run()

  ms_ycheatsub1_AddExp()
  ms_ycheatsub2_AddMoney()

end

위의 내용을 ms_yCheatMain.lua 파일에 저장합니다.

그리고 ms_yCheatSub1.lua, ms_yCheatSub2.lua, ms_yCheatMain.lua 이렇게 세 개의 파일을 C:\Program Files\The Guild 2 - Pirates of the European Seas\Scripts\Measures 폴더에 복사해 넣습니다.

203004   "_MEASURE_CheatMain_NAME_+0"    "Cheat Main"   |

위의 내용을 Text.dbt 제일 아래에 카피해 넣습니다.

30301 "ms_yCheatMain.lua" "" "CheatMain" 99 "hud/buttons/btn_220_Train.tga" 0 15 0 "" "" 15 0 0 "none" 0 0 |

위의 내용을 Measures.dbt 파일의 제일 밑에 복사해 넣습니다.

30301 30301 0 0 0 6 "hud/cursors/Cursor_Attack.tga" () "" 0 0 |

위의 내용을 MeasureToObjects.dbt 파일의 제일 밑에 복사해 넣습니다.

그리고 게임에 들어가서 사용자 캐릭터를 클릭하면 십자모양 아이콘이 하나가 오른쪽에 있을겁니다. 그 아이콘을 누르면 경험치가 300이 증거하고 돈이 500이 증가하는 것을 보실수가 있으실 겁니다..

설 명 드릴께요.. 경험치를 증가하게 만드는 함수는 AddExp() 함수로 이 함수는 ms_yCheatSub1.lua 파일에 정의되어 있습니다. 돈이 증가하게 만드는 함수는 AddMoney() 함수이고 이 함수는 ms_yCheatSub2.lua 파일에 정의가 되어 있있습니다. 이 두 함수들은 모두 ms_yCheatMain.lua 파일의 Run() 함수에서 불러다 쓰고 있습니다.. 이 세 파일이 일종의 프로젝트 파일들인 셈이지요..

그러면 어떻게 ms_yCheatMain.lua 파일의 Run 함수가 다른 두 파일에 정의되어 있는 함수들을 불러다 쓸 수 있었을까요? 그 대답은 Include 함수에 있습니다. 이 함수는 내부에 있는 파일을 현재의 파일에 붙여주는 역할을 하게 됩니다.. 따라서 Include 함수가 Measures/ms_yCheatSub1.lua 파일과 Measures/ms_yCheatSub2.lua 파일을 붙여줌으로 인해서 컴파일러는 이 세 개의 파일을 마치 하나의 파일인 것 처럼 인식을 하는 것입니다. 그래서 ms_yCheatMain.lua 파일의 Run() 함수가 다른 두 개의 파일에 있는 함수들을 마음대로 불러다가 사용을 할 수가 있게 되는 것이지요..

단 다른 파일의 함수들을 불러올때는 그 함수들의 앞에 그 함수들이 정의되어 있는 파일의 이름을 소문자로 적으십시오.

제가 올린 모드들 중에서 통합 치트모드와 흑사병 치료 단독모드가 이렇게 소스 분할이 되어 있습니다.

 

P.S.: 더 길드 2에 대해 더 자세하고 다양한 정보를 얻기 원하시면 네이버의 더길드 카페(http://cafe.naver.com/theguildz2)를 방문해 보세요.

Posted by yyht
,