그동안 계속 올린다 올린다 말만 하면서 안 올려왔던 강좌라는 것을 한 번 시작을 해 보려고 합니다. 모드를 만드시는 분들에게 가장 도움이 되는 것이 기존에 올라와 있는 모드를 완전히 해부해서 보여주는 것일텐데.. 그런 의미에서 제가 올린 모드들 중에서 경험치를 올리는 모드를 좀 해부를 해 볼까 합니다.

일단 제가 올리고자 하는 강좌는 스크립트에 기반을 둔 모드입니다. DB 폴더에 있는 자료들은 많이 만지지는 않습니다. DB 폴더 안에 있는 dbt 파일들을 만져서 뭔가 바꿔보고자 하는 분들은 본 강좌란에 올라와 있는 타르갈님과 ww321in님의 dbt 파일 강좌들을 살펴보시기 바랍니다.

Lua 스크립트에 대한 간략한 정의와 정보는 전에 제가 올려드린 글을 참고해 주시기 바랍니다. 전의 글은 아래의 링크에서 보실 수 있습니다.
http://yyht.tistory.com/1194

스크립트 프로그래밍 환경은 또 따로 올려놓은 포스팅이 있으니 그 포스팅을 참고해 주시기 바랍니다. 프로그래밍 환경에 대한 글은 아래의 링크에서 보실 수 있습니다.
http://yyht.tistory.com/1195

또한 스크립트 모드를 적용할때는 반드시 알아야 할 점이 있는데 스크립트 모드는 기존의 세이브 파일에는 적용이 되지 않습니다. 반드시 게임을 새로 시작을 해야 합니다. 이 부분에 대해서도 제가 이미 포스팅을 해 놓은 글이 있습니다. 아래의 글을 읽어보세요.
http://yyht.tistory.com/1196

그러면 서론은 이만 하고 본론으로 들어가도록 하겠습니다.. 일단 먼저 full source부터 보시지요..

function Run()

GetLocalPlayerDynasty("Player")

  local CheatMode = GetSettingNumber("GAME", "CheatMode", 0)
  if CheatMode ~= 1 then
    MsgQuick("Player", "@LCheatMode is disabled")
    MsgNewsNoWait("Player","","","intrigue",-1,
      "@LCheatMode is disabled",
      "@LCurrently CheadMode is disabled. If you want to enable the CheatMode, please add as below in the Config.ini file.$N$N[GAME]$NCheatMode = 1$N$NConfig.ini file can be found in the main folder of The Guild 2")
    return 
  end

  local smallest = 500
  local small = 1000
  local medium = 5000
  local large = 10000
  local largest = 50000
  local IncreasedXP

  local result = MsgNews("Player","","@P"..
    "@B[1,@LExp +%1n]"..
    "@B[2,@LExp +%2n]"..
    "@B[3,@LExp +%3n]"..
    "@B[4,@LExp +%4n]"..
    "@B[5,@LExp +%5n]",
    nil,
    "intrigue",
    -1,
    "@LExp Change",
    "@LHow much Exp do you want more?",
    smallest, small, medium, large, largest)

  if result==1 then
    IncreasedXP = smallest 
  elseif result==2 then
    IncreasedXP = small 
  elseif result==3 then
    IncreasedXP = medium
  elseif result==4 then
    IncreasedXP = large
  elseif result==5 then
    IncreasedXP = largest
  end

  IncrementXP("", IncreasedXP)
  StopMeasure()

end

위의 소스를 분석을 하려고 합니다. 위에서부터 차근 차근 설명하면서 내려올테니.. 너무 부담 가지지 마시고 들여다봐 주세요.. Full source 분석이 끝나면 구체적으로 게임에 붙이는 방법까지 설명을 하도록 하겠습니다. 일단 이번 posting에서는 여기까지.. ^^; 하려고 하는데.. 그냥 끝나면 좀 아쉬우니까 한 가지만 이야기 하고 마칠께요..

function Run()

몇 가지 기능들...

end

위의 구조가 더길드2 Lua 스크립트에 있어서는 가장 기본적인 구조입니다. 사실 Lua는 여러가지 함수들의 조합으로 프로그래밍을 합니다. 그런데 그 많은 함수들 중에서 제일 처음 어떤 함수를 먼저 실행을 시킬 것인가는 문제가 아닐 수 없지요.. 그래서 제일 처음 실행되는 함수의 이름을 미리 정해놓고 있습니다. 그 함수의 이름이 Run 이지요... 따라서 아래와 같은 구조의 경우.

function myfunction()

  어쩌구 저쩌구

end

function Run()

  filename_myfunction()

end

위와 같은 구조의 경우.. 쉽게 생각을 하면 myfunction이라는 함수가 Run보다 앞에 있기 때문에 myfunction 함수가 Run 보다 먼저 실행될것이라고 생각을 할 수도 있지만.. 사실은 그렇지 않습니다. Lua 스크립트 언어는 Run 이라는 함수를 먼저 찾고.. 제일 먼저 Run 이라는 함수를 실행을 시킵니다.. 그리고 Run이라는 함수에서 myfunction 이라는 함수를 불러오고 있기 때문에 그 후에 myfunction 함수를 실행을 시키는 구조입니다.. 이게 Lua 스크립트의 가장 기본적인 골격이군요..

또 한 가지 주의 할 점이.. Lua 스크립트는 소문자와 대문자를 서로 가립니다... 따라서..

function run()
end

위의 함수와

function Run()
end

위의 함수는 전혀 별개의 함수로 인식을 합니다.. Lua 파일이 처음에 실행을 시키는 함수는 Run 함수입니다. 처음 R은 대문자이고 뒤의 un은 소문자입니다. 반드시 스펠링이 다음과 같이 되어야 합니다.. ^^; Run

다음에 또 뵙지요.

 

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

Posted by yyht
,