6-1. 캐릭터 번호(NO)


요즘 어쩌다보니 바빠져서 글을 쓸 수가 없었음

사실 쓰려면 쓸 수는 있었지만 기력이 다털리니까 뭔가 하고 싶은 맘이 들지 않았다


어쨌거나 오늘은 캐릭터번호랑 등록번호의 차이를 설명해줄거임

나도 잘 모르는 분야라 채널 뒤져보다가 알게 된거였는데 막상 링크 달고 끝내려니까 글을 찾을 수가 없더라


아무튼 캐릭터 번호랑 등록 번호는 딱히 설명할 것도 없고 내가 설명하기에도 잘 모르는 분야긴 한데


기본적인 대전제를 깔고 가자면 이거임


캐릭터 번호 ≠ 등록번호


서로가 같은 게 아니라는 걸 알아둬야됨 


그리고 캐릭터 번호는 



우리가 CSV에서 작성했던 NO를 캐릭터 번호라고 하는거고 


등록번호는 그와 별개로 ADDCHARA를 한 순서대로 내부적으로 나열된 순서같은거임


근데 이걸 말로만 하면 애매할 수 있잖슴?


그래서 예시를 가져옴





게임 스타팅 초반부에 테스트를 할 겸  ADDCHARA 3, 2, 1을 해봤다


예시를 들 겸 해서 간단하게 캐릭터를 세 명 만들어놨는데 캐릭터 번호(NO) 순서대로 김일득, 김이득, 김삼득으로 저장해놨음

이후에 TARGET을 1번으로 설정해놨고 타겟의 이름을 출력해볼거임


만약 TARGET = 1이 캐릭터 번호(NO) 1을 타겟으로 둔다는 말이면 출력되는 이름은 일득이겠지?




틀렸다 삼득이다


이 말은 즉 캐릭터 번호와 등록번호는 다르다는 걸 나타냄


등록번호에는 아마 이 순으로 설정되어 있을거임


등록번호 0 - 주인공

등록번호 1 - 김삼득(NO- 3)

등록번호 2 - 김이득(NO- 2)

등록번호 3 - 김일득(NO- 1)


즉 간단한 테스트를 통해 ADDCHARA를 한 순서대로 등록번호가 설정된다는 것을 알 수 있었음



7. 식중함수


그럼 다시한번 메인화면으로 돌아가보자



시작 부분이 뭔가 허전하다


너무 대충 만들어서 그런지 이름 하나 커스텀마이징 할 수 없는 구데기 게임이 되어버림

뭔가 그럴듯한 허울이라도 있어야 할 거 같은데 그마저도 없어서 이번에는 좀 에라같이 보이도록 이름 입력 기능을 만들거임


우선 

@NAME_CUSTOM

이란 함수를 만들었음


여기에 살을 붙일 건데 뭔가 좀 그럴듯하게 보이도록 일정 글자수가 넘으면 제한을 걸도록 만들거다 



일단 -틀- 은 만듬

계획상으로 글자수가 넘어가면 1차로 거르고, NPC와 같은 이름을 사용하면 2차로 거를거임


그리고 이걸 만들기 위해서는



글자수를 세어주는 STRLEN 명령어의 사용을 고려해볼 수 있을거임


그리고 NPC와 같은지 판정하는 데에는 



STRFIND를 고려해볼수도 있을거고 


다 좋긴한데 이렇게 하면 동적변수를 여러개 선언해야하고 귀찮아질 일이 많을거임



벌써부터 어질어질하지 않은가? 

지금은 함수가 짧다보니 괜찮지만 여러가지를 덧붙이다보면 언젠가는 머리가 띵해질지도 모른다



그러니 미리 식중함수를 써서 방지해주면, 오르가즘을 느낄 수 있다



참고로 식중함수는 식 안에서 쓸 수 있는 함수라고 생각하면 됨


식중함수


STRLEN을 명령어로 쓸 경우 결과값은 RESULT에 저장되지만

STRLEN을 식중함수로 쓸 경우 식중함수라는 말 그대로 비교식 안에서도 쓸 수 있기에 편해진다


비교식 이외에도 대입식 같은데에도 쓸 수 있음



명령어를 썼을 때 세줄 아무리 적어봤자 두 줄이었던 문장이, 비교식 한 줄 선에서 컷이 났음


굉장히 오금이 저릴 수 밖에 없다


아 근데 실수한게 있는데

STRLEN은 반각 문자랑 전각 문자의 글자수를 다르게 셈


즉 반각문자 5는 1로 세고 전각문자 는 2로 센다는 말임

그러므로 위의 예시는 사실상 글자수 제한이 10임을 알 수 있다


다음은 두번째 조건인 NPC이름을 설정하지 못하도록 하는 식중함수를 쓸거임



MATCH 식중함수긴 한데 더 정확히는



 GROUPMATCH를 쓸거임 MATCH는 배열에 키값이 몇개 들어있는지를 돌려주는 함수고 

GROUPMATCH는 키값이 VALUE1 VALUE2 와 같은 그룹에서 몇개나 일치하는지를 확인해주는 함수임


그러므로 



이런식으로 만들어줄 수도 있다



이후에 조금더 손봐줬음

WHILE - WEND 문은 비교식이 참일 경우 루프하므로 WHILE 에다가 1을 넣으면 


WHILE 1 != 0 


과 같은 식이 되서 무한루프가 됨 


    PRINTFORMW 이름을 %RESULTS%로 하시겠습니까?
    PRINTL [0] 네
    PRINTL [1] 아니오
    INPUT 

 

그러므로 이 부분에서 0을 골라 BREAK문이 나오지 않는 이상은 계속해서 이름을 설정하게 된다



8. 사용자 정의 식중함수



식중함수의 MATCH는 

    RESULT = 0
    FOR COUNT, A, B
        IF X:COUNT == Y
            RESULT += 1
        ENDIF
    REND

와 같은 기능을 수행한다

이 말은 즉 무엇일까 MATCH도 함수라는 뜻임


사실상 식중함수는 함수를 식 안에서도 쓸 수 있게 해놓은거에 불과함


그리고 사용자 정의 식중 함수는 우리도 이 식중함수를 비슷하게 만들 수 있다는 것을 뜻한다


사용자 정의 식중함수


솔직히 사용자 정의 식중함수가 필요한 경우는 그리 많지 않다

사용자 정의 식중함수가 필요해지기 전에 다른 식중함수나 명령어들로 완만하게 타협되는 경우가 많음


그래도 가끔씩 함수가 한계를 보일 때가 있음


사용자 정의 함수에서 RETURN값은 정수나 RETURNFORM을 통해 숫자형 변수 밖에 반환할 수 없기 때문임 

공교롭게도 문자나 문자형 변수는 RESULTS값으로 반환할 수 없다


애초에 RETURNS 같은건 존재하지 않는 것이다...


시발...


그대신 사용자 정의 식중함수로는 반환할 수 있음



대충 딴데서 들고옴


위 함수는 STR.CSV를 쓰지 않고 커맨드 이름을 호출하기 위해 만든 식중 함수임


@EVENT_COMNAME(COMNUM)
#FUNCTIONS


우선 사용자 정의 식중함수의 특징을 들자면


#FUNCTION 과 #FUNCTIONS 임

둘 다 이 함수가 식중함수로 쓰이는 함수임을 먼저 선언하는 거고


#FUNCTION 은 정수값을 반환할때 쓰이고

#FUNCTIONS은 문자값을 반환할때 쓰임


그리고 사용자정의 식중함수는 값을 반환할때 무조건 RETURNF를 써야한다 

앞에 #FUNCTION 이냐 #FUNCTIONS 냐에 따라 RETURNF가 문자형 값을 반환하는지 정수형 값을 반환하는 지는 달라진다


이외에는 함수랑 거의 다를바가 없긴한데 


일반 사용자 정의 함수와는 다르게

식중함수 외로 쓸때 CALL로는 부를 수 없고 CALLF로 불러야하는 등 여러가지 제한사항이 있는데

그건 링크에 있으니 직접 찾아보기 바란다



식중함수는 써도 되고 안써도 되는 분야긴 한데



때에 따라 쓰면 골아픈 문제도 쉽게 해결할 수 있는 경우도 종종 있음


위에 TOINT와 GETNUM도 식중함수임

생각보다 활용처가 많으니 왠지 모르겠다 싶을 때 식중함수를 뒤져보면 답이 나오는 경우도 있다



이정도면 내가 아는 기본적인 부분은 끝인거 같은데



이외에는 내가 알아가면서 쓰게되지 않을까 싶음

TRAIN부분은 아직 해보지 않아서 건들기 애매하고 그 이외에는 거의 다 설명한거 같기도 하고

뭔가 더 알아낸 게 없는 이상에야 이정도로 끝내거나 아니면 CHARANUM변수나 써본 명령어나 식중함수 몇몇개 다루고 끝내지 않을까 싶음


그러니까 대강 이정도면 원하는 에라를 만들 수 있지 않을까



혹시라도 빠진거나 추가적으로 다뤄줬으면 좋겠는 게 있으면 댓글로 적어주길 바람



그리고 에라 제작에 입문한다면 


[MAKE] era 초보 개발자,제작자 참고용 링크


달아준 링크 외에도 여기에 있는 다양한 해외 사이트도 병행해서 본다면 조금은 도움이 될거임


처음 era 제작할 때 어떻게 할지 몰라서 죽 쑨 경험이 한두번이 아니라서

이런 글이 있었으면 좋겠다고 생각해서 쓴 글이었는데 의외로 많이 봐줘서 고맙고


좀 더 쉽게 에라 개발에 뛰어드는 사람이 많아졌으면 좋겠다


만들던 에라 있으면 꼭 만들기 바람

ㅎㅇㅌ