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)

뭐 위의 변수들에 대해서는 크게 설명 안 해도 되겠지요? 그냥 몇 몇 변수들을 선언 하고 그리고 그 변수들에다가 값을 집어 넣었습니다. 저 위에 세팅되어 있는 값들이 앞으로 선택하게 될 경험치의 값들입니다.. 드디어 MsgNews 함수가 왔네요.. 일단 이 함수를 썼을 때 어떤 그림이 나오는지부터 한 번 보도록 하지요.. 아래 그림 나갑니다.


보 시는 바와 같이 이 함수는 사용자가 원하는 값을 입력했을 때 그 값을 받아서 돌려주는 역할을 합니다.. 뭐 모드에 있어서 꽃이라고 할 수 있는 그런 함수이지요.. 이 함수의 사용법만 잘 익혀도 어지간한 모드는 만들어내실 수 있으실 겁니다.. 그럼 함수의 원형 들어갑니다..

String MsgNews(
  Alias ( of type guildobject) pDestination,
  Alias ( of type corenode) pJumpToTarget,
  String pPanelParam,
  AIFunc,
  String pMessageClass,
  Number TimeOut,
  String pHeaderLabel,
  String pBodyLabel,
  Variable Argument List )

MsgNewsNoWait 함수와 거의 비슷한데 몇 몇 부분이 다르네요.. 먼저 return 값이 MsgNewsNoWait은 Boolean이었는데 이 함수는 String입니다. MsgNewsNoWait 함수는 함수가 성공적으로 잘 실행이 되었는지의 결과만을 돌려주었는데 MsgNews 함수는 실제로 함수 안에서 뭔가 다른 다양한 결과물을 return 값으로 돌려준다는 이야기로군요.. 본격적으로 함수 해부에 들어가보시지요.

첫 번째 pDestination은 MsgNewsNoWait 함수와 같습니다. 위의 그림상에서 쓰는 메세지를 보여줄 대상을 여기에서 선택하게 됩니다. Player를 선택해줘야겠지요?

두 번째 pJumpToTarget의 경우도 MsgNewsNoWait 함수와 같습니다. 경험치를 올려줄 대상을 여기서는 보여줘야 하기 때문에 사용자가 마우스로 클릭한 캐릭터.. 즉 "" 을 적어주어야 할 것입니다.

세 번째 pPanelParam이 MsgNewsNoWait 함수와는 다르게 여기에서는 많은 일을 해 주어야 합니다. 바로 이 부분을 통해서 필요한 입력값을 받게 됩니다. 자세한 설명 들어갑니다.

위의 예제에서..

    "@P"..
    "@B[1,@LExp +%1n]"..
    "@B[2,@LExp +%2n]"..
    "@B[3,@LExp +%3n]"..
    "@B[4,@LExp +%4n]"..
    "@B[5,@LExp +%5n]",

다음에 해당하는 라인이 바로 pPanelParam에 해당하는 부분입니다. 여기에서 "@P".. 부분은 처음 Print의 약자일수도 있겠고 Param의 약자일수도 있을 것 같습니다. PanelParam이 시작할때는 반드시 위와 같이 "@P" 로 시작을 하게 됩니다.

위의 두 번째 줄이 앞의 그림에서 첫 번째 버튼에 해당하는 부분입니다. 실제 화면에는 @LExp +%1n] 부분이 Exp +500 이라는 라인을 출력을 해 주게 됩니다. 뒤에 있는 %1n에 대해서는 Variable Argument List를 설명하면서 같이 설명을 하도록 하겠습니다. 일단 두 번째 줄이 Exp +500을 출력하게 된다는 것만 지금을 알고 넘어 가도록 하지요. 세 번째 줄은 Exp +1000 을 출력하게 되고 마지막 라인은 Exp +50000을 출력하게 됩니다.

다음으로 첫번째 버튼을 사용자가 클랙을 했을때 다음에 할 일을 알려주는 부분이 @B[1 부분입니다. 첫 번째 버튼이 클릭 되었을 때 1의 값을 돌려주라는 의미입니다. 그 밑에 @B[2는 2라는 값을 돌려주라는 의미이고 제일 밑의 @B[5는 5라는 값을 돌려주게 됩니다. @B[A 는 A라는 값을 돌려주게 될 것이고 @B[ABC 는 ABC라는 값을 돌려주게 될 것입니다..

따라서 위의 라인들을 종합해보면, 첫 번째 버튼이 눌리면 1이라는 값을 돌려주고 두 번째 버튼이 눌렸을 경우에는 2라는 값을 돌려주고 다섯 번째 버튼이 눌렸을 때에는 5라는 값을 돌려주게 됩니다.. 여기에서의 @B는 Button의 약자가 아닐까 합니다.

이제 몇 가지 유의점을 좀 알려드리겠습니다.

1. 위의 여섯 라인이 임의로 여섯 라인으로 구분은 되어 있지만 사실상 컴퓨터는 한 개의 라인으로 인식을 합니다. 위의 전체 내용이 pPanelParam의 하나의 매개변수로 입력이 되게 됩니다.
2. 모든 내용은 따옴표로 둘러쌉니다.
3. @B[ 부분과 @L 라인은 서로 콤마로 구분이 됩니다. 이 두 부분이 콤마로 구분되지 않으면 출력이 이상해집니다. 
4. @L 문자열이 끝날때는 반드시 ]로 구분해줍니다. 마지막에 ]를 찍지 않으면 줄이 겹쳐서 출력이 됩니다. 
5. 각 라인의 구분은 마침표 두개(..)로 구분을 합니다. 마침표 두개(..)는 라인이 아직 끝나지 않았음을 의미를 합니다.
6. 맨 마지막 라인은 콤마(,)로 마무리를 합니다.  콤마가 찍히면 pPanelParam이 끝났음을 알리게 됩니다.

네 번째 AiFunc는 인공지능과 관련된 기능이라는데 어떤 경우에 사용이 되는 것인지 아직 잘 모르겠습니다. 그냥 nil로 설정을 합니다.

다섯 번째부터 여덟 번째까지는 MsgNewsNoWait 과 다르지 않습니다. MsgNewsNoWait 부분과 올려드린 레퍼런스를 살짝 참고해주세요.

마지막으로 Variable Argument List 부분입니다. 이 부분은 메세지를 출력하는 부분에 특정 문자가 아닌 가변적인 변수의 값을 넣고자 할 때 사용을 합니다..

위 의 소스의 경우 %1n에는 Variable list 중에 가장 먼저 나열된 smallest의 값인 500이 출력이 됩니다. %2n에는 Variable list 중에서 두 번째로 나열된 small의 값인 1000이 출력이 됩니다. %5n의 경우에는 Variable list 중에 다섯 번째로 나열된 largest의 값인 50000이 출력이 됩니다.

Variable Argument list는 제일 먼저 나열된 변수부터 %1, %2, %3, %4.. 이런식으로 순차적으로 접근을 하게 되고, %숫자 뒤에 n, t, SN, GG, NAME, l 등의 기호를 붙여서 다양한 형식들을 만들어냅니다.

n : 해당 변수의 값으로부터 숫자를 찍어내라는 이야기입니다.
t : 해당 변수로부터 화폐단위를 찍어내라는 이야기입니다.
GG : GetID("") 함수와 함께 쓰여서 해당 변수로부터 건물의 이름을 찍어내라는 이야기입니다.
l : (소문자 엘)은 해당 변수로부터 문자열을 찍어내라는 이야기입니다.
SN : GetID(") 함수와 함께 쓰여서 해당 변수로부터 캐릭터의 이름을 찍어내라는 이야기입니다.
NAME : 해당 변수로부터 도시의 이름을 찍어내라는 의미입니다.

몇 가지 예를 들어보겠습니다.

%2SN 은 두 번째로 나열된 변수의 값을 사람 이름으로 찍어내라는 의미가 됩니다.
%3l 은 세 번째로 나열된 변수의 값을 문자열로 출력하라는 의미입니다.
%1GG 는 첫 번째로 나열된 변수의 값을 건물의 이름으로 출력하라는 이야기입니다.

위의 경우 외에도 다른 기호들이 더 있을 수 있습니다.

이 변수들은 String pPanelParam과 String pHeaderLabel, 그리고 String pBodyLabel 등에서 사용이 될 수 있습니다..

  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)

이 제 위의 함수를 정리를 해 보지요.. 먼저 변수 선언 부분입니다. 위에 선언된 변수들은 MsgNews 함수의 Variable list에서 사용할 변수들입니다. 그 변수들의 값을 미리 정리를 해 두었습니다. MsgNews 함수에서는.. 첫번째 항목은 Player에게 메세지를 뿌리게 해줍니다. 두 번째 항목은 이 모드가 쓰여질 대상을 보여줍니다. 세 번째 항목은 다섯 개의 버튼을 보여주며, 그 버튼들 중에서 하나가 선택 되었을 때 1부터 5까지 각각의 버튼에 해당하는 값을 result 라는 변수에 return 합니다. 마지막 Variable list에는 %1n부터 %5n 까지에 들어갈 미리 선언 된 변수들을 나열합니다.

이제 험한 산은 다 넘었군요. 다음번 이야기에서는 스크립트 강좌는 마칠 수 있겠네요.. ^^;

 

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

Posted by yyht
,