밑에서 만들던거 디버그 메뉴 만드는중

ㅇㄹ | 조회 수 166 | 2016.09.07. 18:34

FOR,IF,SELECTCASE문은 추가됬고(WHILE 같은건 시간문제)

들여쓰기도 만들었고

 

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {
            EmueraERB erb = new EmueraERB("SYSTEM");
            EmueraMethod init = new EmueraMethod("EVENTFIRST");


            BaseLibrary.GetInput(init, "입력해주세요", "실패했습니다", "[0]Start", "[1]Load", "[2]Debug");


            //SELECT 테스트

            init.Add(
                new SelectCaseStatement("LOCAL:0".ToLine(),
                    new PrintLine("아무것도 아닙니다", PrintFlag.NEWLINE).ToState(),
                    Tuple.Create("1".ToLine(), new PrintLine("1입니다", PrintFlag.NEWLINE).ToState()),
                    Tuple.Create("2".ToLine(), new PrintLine("2입니다", PrintFlag.NEWLINE | PrintFlag.FORM).ToState())));

 

            BaseLibrary.DebugMenu(init, "디버그 메뉴");
            erb.Methods.Add(init);
            erb.WriteTo(AppDomain.CurrentDomain.BaseDirectory);
        }
    }
}

 

디버그 호출하면

 

@EVENTFIRST
    PRINTL 입력해주세요
    PRINTL
    PRINTL [0]Start
    PRINTL [1]Load
    PRINTL [2]Debug
    $EVENTFIRST_GET_INPUT_LOOP
    INPUT
    IF RESULT != 0 && RESULT != 1 && RESULT != 2
        PRINTL 실패했습니다
        GOTO EVENTFIRST_GET_INPUT_LOOP
    ENDIF
    SELECTCASE LOCAL:0
        CASE 1
            PRINTL 1입니다
        CASE 2
            PRINTFORML 2입니다
        CASEELSE
            PRINTL 아무것도 아닙니다
    ENDSELECT
    PRINTL 디버그 메뉴
    PRINTL
    PRINTL [0] 캐릭터 편집
    PRINTL [1] FLAG 편집
    PRINTL [2] TFLAG 편집
    PRINTL [3] ITEM 편집
    PRINTL [4] ITEMSALES 편집
    PRINTL [5] MONEY 편집
    PRINTL [6] TCVAR 편집
    PRINTL [7] DAY 편집
    PRINTL [8] TIME 편집
    PRINTL [9] MASTER 편집
    PRINTL [10] TARGET 편집
    PRINTL [11] ASSI 편집
    PRINTL [12] PLAYER 편집
    PRINTL [13] ASSIPLAY 편집
    PRINTL [14] PBAND 편집
    $EVENTFIRST_GET_INPUT_LOOP_1
    INPUT
    IF RESULT != 0 && RESULT != 1 && RESULT != 2 && RESULT != 3 && RESULT != 4 && RESULT != 5 && RESULT != 6 && RESULT != 7 && RESULT != 8 && RESULT != 9 && RESULT != 10 && RESULT != 11 && RESULT != 12 && RESULT != 13 && RESULT != 14
        PRINTL 다시 입력해주세요
        GOTO EVENTFIRST_GET_INPUT_LOOP_1
    ENDIF
    SELECTCASE RESULT:0
        CASE 1
            PRINTL FLAG이 선택됨
            VARSIZE FLAG
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [1]FLAG:{COUNT} = {FLAG:COUNT}
            NEXT
        CASE 2
            PRINTL TFLAG이 선택됨
            VARSIZE TFLAG
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [2]TFLAG:{COUNT} = {TFLAG:COUNT}
            NEXT
        CASE 3
            PRINTL ITEM이 선택됨
            VARSIZE ITEM
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [3]ITEM:{COUNT} = {ITEM:COUNT}
            NEXT
        CASE 4
            PRINTL ITEMSALES이 선택됨
            VARSIZE ITEMSALES
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [4]ITEMSALES:{COUNT} = {ITEMSALES:COUNT}
            NEXT
        CASE 5
            PRINTL MONEY이 선택됨
            VARSIZE MONEY
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [5]MONEY:{COUNT} = {MONEY:COUNT}
            NEXT
        CASE 6
            PRINTL TCVAR이 선택됨
            VARSIZE TCVAR
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [6]TCVAR:{COUNT} = {TCVAR:COUNT}
            NEXT
        CASE 7
            PRINTL DAY이 선택됨
            VARSIZE DAY
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [7]DAY:{COUNT} = {DAY:COUNT}
            NEXT
        CASE 8
            PRINTL TIME이 선택됨
            VARSIZE TIME
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [8]TIME:{COUNT} = {TIME:COUNT}
            NEXT
        CASE 9
            PRINTL MASTER이 선택됨
            VARSIZE MASTER
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [9]MASTER:{COUNT} = {MASTER:COUNT}
            NEXT
        CASE 10
            PRINTL TARGET이 선택됨
            VARSIZE TARGET
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [10]TARGET:{COUNT} = {TARGET:COUNT}
            NEXT
        CASE 11
            PRINTL ASSI이 선택됨
            VARSIZE ASSI
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [11]ASSI:{COUNT} = {ASSI:COUNT}
            NEXT
        CASE 12
            PRINTL PLAYER이 선택됨
            VARSIZE PLAYER
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [12]PLAYER:{COUNT} = {PLAYER:COUNT}
            NEXT
        CASE 13
            PRINTL ASSIPLAY이 선택됨
            VARSIZE ASSIPLAY
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [13]ASSIPLAY:{COUNT} = {ASSIPLAY:COUNT}
            NEXT
        CASE 14
            PRINTL PBAND이 선택됨
            VARSIZE PBAND
            FOR COUNT:0 , 0 , RESULT:0 , 1
                PRINTFORML [14]PBAND:{COUNT} = {PBAND:COUNT}
            NEXT
    ENDSELECT

 


일단 여기까지 이 다음에 변수 선택한다음 바꿀값 입력하고 뒤로가기 만들고 해야죠

또 라벨이 중복되면 자동으로 숫자 붙이는것도 만들었습니다

 

역시 에라는 만질게 많아서 재밋네요(슬슬 버그 잡아야 할텐데...)

 

 

참고로 뒤에선 이런식으로 생성합니다

 

 

        public static string[] GlobalVariable = new string[]
        {
            "FLAG","TFLAG","ITEM","ITEMSALES","MONEY","TCVAR","DAY","TIME","MASTER","TARGET","ASSI","PLAYER","ASSIPLAY","PBAND"
        };
        public static string[] ChractorVariable = new string[]
        {
            "ABL","BASE","MAXBASE","TALENT","EXP","MARK","RELATION","JUEL","CFLAG","EQUIP","TEQUIP","PALAM","STAIN","EX","SOURCE"
        };
        public static void GetInput(EmueraMethod method, string description, string failMessged, params string[] buttons)
        {
            string[] buttonValues = new string[buttons.Length];
            try
            {
                for (int i = 0; i < buttons.Length; i++)
                {
                    buttonValues[i] = "RESULT != " + int.Parse(Regex.Match(buttons[i], @" *\[(?<number>[0-9]+)\].*").Groups["number"].Value).ToString();
                }
            }
            catch (FormatException)
            {
                throw new ArgumentException("유효하지 않은 버튼입니다", nameof(buttons));
            }
            method.Add(new PrintLine(description, PrintFlag.NEWLINE));
            method.Add(new PrintLine("", PrintFlag.NEWLINE));
            foreach (var button in buttons)
            {
                method.Add(new PrintLine(button, PrintFlag.NEWLINE));
            }
            var inputLabel = new LabelLine(method.Name + "_GET_INPUT_LOOP");
            method.AddLabel(inputLabel);
            method.Add(new InputLine());
            method.Add(
                new IfStatement(
                    new RawLine(string.Join(" && ", buttonValues)),
                    new PrintLine(failMessged, PrintFlag.NEWLINE), new GotoLine(inputLabel)
                ));
        }
        public static void DebugMenu(EmueraMethod method, string description)
        {
            GetInput(method, description, "다시 입력해주세요", StringToButton("캐릭터".Append(GlobalVariable), str => str + " 편집"));
            var caseStates = new List<Tuple<EmueraLine, EmueraStatement>>();
            for (int i = 0; i < GlobalVariable.Length; i++)
            {
                var selected = GlobalVariable[i];
                caseStates.Add(
                    Tuple.Create(
                        (i + 1).ToString().ToLine(), (
                        (new PrintLine(selected + "이 선택됨", PrintFlag.NEWLINE) +
                        ("VARSIZE " + selected)).ToMultiLineStatement() +
                        new ForStatement(
                            new GlobalVariableLine("COUNT"),
                            new RawLine("0"),
                            new GlobalVariableLine("RESULT"),
                            new RawLine("1"),
                            new PrintLine($"[{i + 1}]" + selected + ":{COUNT} = {" + selected + ":COUNT}", PrintFlag.FORM | PrintFlag.NEWLINE)
                        )) as EmueraStatement));
            }
            method.Add(
                new SelectCaseStatement(
                    new GlobalVariableLine("RESULT"), null, caseStates.ToArray()));
        }

 

만든지 얼마 안되다보니 지저분하네요

  • |
facebook twitter google plus pinterest kakao story band
파일 첨부

여기에 파일을 끌어 놓거나 파일 첨부 버튼을 클릭하세요.

파일 크기 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )
ㅇㄹ 2016.09.07. 18:46

대괄호안에 숫자가 아니라 {COUNT}가 들어갔어야 됬는데

또 실수네요 ㄷ

번호 제목 글쓴이 날짜 조회 수
공지 공지사항 [5] 파라디클로로.. 16.05.18. 2299
공지 내가 곧 법이다 [15] 파라디클로로.. 16.05.18. 3207
333 후타나리쪽으로 꼴리는 에라계 게임 뭐가있음? [1] ㄱㅇㅅㅌ 17.02.02. 462
332 여긴 파라디클로로.. 17.02.02. 595
331 저같은 놈은 홍마관ntr을 좋아합니다 [2] 17.01.25. 499
330 옆동네 주소가 바뀐건가요... [4] ㅇㅇ 17.01.19. 1019
329 에라타입문은 어디서 받을 수 있나요?? [2] azr 17.01.17. 365
328 신박한 댓글 광고를 보았습니다. [4] 우뉴우뉴 17.01.13. 426
327 독방촉수궁 리버스는 번역된거없나요? [1] ㅇㅇ 17.01.09. 225
326 에라판 조회수 순위 [2] file ㅇㄹ 17.01.08. 749
325 에라마왕 소질 개방 방법좀 알려주세요 [2] ㅇㅅㅇ 17.01.07. 114
324 여러분의 행적은 모두 추적되고 있습니다 [3] file ㅇㄹ 17.01.05. 671
323 나는 알고 싶다. [7] 질문충 17.01.05. 364
322 압축파일.. 암호가.. 대체... 뭐죠....? [5] ㅇㅇ 17.01.04. 562
321 2016년 겨울 코미케 참가하면서 구매한 일반지들.jpg [2] file 스톰보이즈 17.01.02. 286
320 그분께서 드디어 복구해주셨군요... [1] 귀농이 16.12.29. 338
319 혹시 에라호텔 현황 아시는분 있남유? [3] 난★ 16.12.27. 313
318 옆동네가 어딘지좀알려줘잉 [6] 1 16.12.24. 928
317 배달 왔다.jpg [2] file 스톰보이즈 16.12.20. 651
316 뉴비가 2ch스레 뒤지다가 파츄로더라는 걸 처음 알았는데 [2] ㅁㄴㅇ 16.12.17. 552
315 번역좀.. [2] smile 16.12.10. 306
314 와... 16.12.04. 200