800 컴퓨터 게임/803 더길드2 모드 강좌란

경험치 올리기 모드 강좌 - 소스 스크립트 분석 5

yyht 2011. 5. 10. 17:30

  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()

마지막 부분들입니다.

여기에서는 뭐 특별히 볼 것이 없네요...

일 단 MsgNews 함수에서 선택된 버튼의 값을 result 변수에 되돌려 줍니다. 첫 번째 버튼이 눌렸을 경우에는 result에 1의 값이 되돌려져 있을 테고, 두 번째 버튼이 눌렸을 경우에는 2의 값이 되돌려져 있을 테고.. 마지막 다섯 번째의 버튼이 눌렸을 때에는 5의 값이 되돌려져 있을 겁니다.. 그 result의 값을 체크해서 result의 값이 1일 때에는 IncreasedXP에 smallest의 값을 넣습니다. 이 값은 첫 번째 버튼에 보여졌던 숫자와 동일한 숫자입니다.

이런 식으로 IncreasedXP에 각 버튼에 보여진 경험치 숫자를 저장하고 그리고 IncrementXP함수를 불러옵니다. IncrementXP 함수의 원형은 아래와 같습니다.

Number IncrementXP(
  Alias ( of type sim) pTarget,
  Number XP)

역할은 간단합니다. 원하는 캐릭터에 원하는 경험치를 더해주는 것입니다.

사실 소스를 보시면 아시겠지만 MsgNews 함수만 제대로 이해하면 크게 어려울 것이 없는 소스입니다.

참고로 경험치 값을 구지 변수를 써서 만든 것은.. 혹시 경험치 값을 다른 값으로 바꿔야 할 필요가 있을 때를 위해서입니다..

가령 지금 경험치 구성은 아래와 같습니다.

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

그런데 500이라는 단위를 더 이상 사용할 필요가 없어져서.. 이 값을 1000으로 올리고 대신 1000을 2500 으로 올리고 싶을 때.. 만약에 변수가 아닌 상수를 썼다고 한다면 밑의 소스들을 전부 뒤져서 숫자들을 다 바꾸어 주어야 할 것입니다. 하지만 이 예에서처럼 변수처리를 해 준다면 간단하게 위의 변수만 아래처럼 바꾸어주면 되겠지요.

  local smallest = 1000
  local small = 2500
  local medium = 5000
  local large = 10000
  local largest = 50000

위처럼 변수의 값만 살짝 바꾸어주면 소스의 모든 내용이 같이 바뀌게 될 것입니다.. 이상으로 스크립트 분석은 마치도록 하겠습니다...

밑에 다시 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

이 제 스크립트는 만들어 졌습니다. 위에 function Run()부터 시작해서 바로 위의 end까지 전체를 하나의 텍스트 파일로 저장을 하고 그 파일의 이름은 ms_yCheatXP.lua 로 줍니다. 그리고 이 파일을 C:\Program Files\The Guild 2 - Pirates of the European Seas\Scripts\Measures 폴더 안에 카피를 합니다.. 이렇게 하면 스크립트 파일 설치까지 다 한 것이네요.

이제는 이 스크립트를 실제 게임에 붙여넣는 과정을 돌아보아야 할텐데.. 그 것은 오늘은 못 하겠네요.. 벌써 시간이 새벽 2시 40분입니다.. 자야겠어요 ^^;

 

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