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

ㅇㄹ | 조회 수 178 | 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()));
        }

 

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

파일 첨부

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

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

0개 첨부 됨 ( / )
말 던지기전에 10초만 고민하고, 자기가 쓴 글을 다시 한번만 읽어보셈.
그 10초가 다음 대화의 방향을 크게 바꿀 수 있을지도 모름.
ㅇㄹ at 2016.09.07. 18:46

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

또 실수네요 ㄷ

우뉴우뉴 at 2016.09.07. 21:22

문돌이는 이게 뭘라 그저 웁니다....

번호 제목 글쓴이 날짜 조회 수
공지 ↓이거 읽으셈. 개같이 굴지말고 + a [60] 파라디클로로.. 17.06.23. 195
공지 난 규칙을 적어놓은 공지사항이다. 좀 읽어라. [6] 파라디클로로.. 16.05.18. 2781
공지 내가 곧 법이다 [17] 파라디클로로.. 16.05.18. 3713
399 메가텐 컨셉잡고 하다가 웃겨서 끄적끄적 잡담여우 17.05.14. 203
398 갑작스레 떠오른 아이디어 [6] 변태아저씨 17.05.13. 251
397 GVT를 보면서 드는 참 아쉬운 생각 쁘이휘에렙베.. 17.04.30. 185
396 PM번역 앙망하옵니다. [1] laya 17.04.29. 270
395 예전에 마리미떼에서 생물체(번역가 곽형준님)이 번역했던 동방 팬픽 구할 수 있을까요? [2] hdzr 17.04.27. 127
394 ??? : 참지넷망해서 올린거에요 [5] file ㅇㅍㅇ 17.04.27. 957
393 혹시 여기 니코동 채널가입하신분 계십니까? [4] 쿨럭쿨럭 17.04.25. 174
392 eraGVT 최신 올릴까 했는데 에러가 좀 크네 [2] 느어억 17.04.24. 179
391 야구단 꾸리는 에라도 있는데 레스토랑 에라는 없나 [3] 토스트앤설탕.. 17.04.23. 191
390 메가텐 상사 이벤트 개빡치네 [3] 스1이나빨자 17.04.22. 360
389 에라를 배우고 싶습니다 [2] 밥shop 17.04.21. 240
388 이제서야 sq에 대해 알게된 늙뉴비 17.04.20. 135
387 일본 에라위키가서 다운로드 받고싶으면 가입해야함? [3] 느어억 17.04.20. 171
386 YM자동저장 기능 있었으면좋겠다. [6] 17.04.19. 191
385 밑에서 옆동네 질문글 싼 병신인데 [2] ㅇㅇ 17.04.18. 363
384 하도 옆동네 옆동네 타령하길래 어딘지 했더니 [5] 암수한몸 17.04.18. 510
383 옆동네 얘기 꺼내서 진짜루 미안한데 옆동네 링크 바뀜? [1] ㅇㅇ 17.04.18. 380
382 YM오랜만에 해보니까 좋네 [4] dwe 17.04.17. 243
381 뭐여? GVT 새로 올라온거 어디간거여? [2] 느어억 17.04.17. 128
380 쓰레기통 ㅇㅈ합니다 [4] ㅇㄹ 17.04.16. 293