armoha / euddraft

System for pluginizing eudplib codes.
Other
29 stars 4 forks source link

[chatEvent] Support Global Namespace #100

Closed armoha closed 1 year ago

armoha commented 1 year ago
:: Example euddraft config file (.eds/edd)

[chatEvent]
__addr__: addr
__patternAddr__: patternAddr
__ptrAddr__: ptrAddr
__lenAddr__: lenAddr
@판매: 11
@테란다판다: 12
@저그다판다: 13
@토스다판다: 14
^@홀짝 .*.*$: 11
^@용 .*.*$: 101
^@신화 마린 .*.*$: 102
^@전설 마린 .*.*$: 103
^@보물 마린 .*.*$: 104
^@영웅 마린 .*.*$: 105
^@희귀 마린 .*.*$: 106
^@고급 마린 .*.*$: 107
^@일반 마린 .*.*$: 108
^@신화 히드라 .*.*$: 109
^@전설 히드라 .*.*$: 110
^@보물 히드라 .*.*$: 111
^@영웅 히드라 .*.*$: 112
^@희귀 히드라 .*.*$: 113
^@고급 히드라 .*.*$: 114
^@일반 히드라 .*.*$: 115
^@신화 드라군 .*.*$: 116
^@전설 드라군 .*.*$: 117
^@보물 드라군 .*.*$: 118
^@영웅 드라군 .*.*$: 119
^@희귀 드라군 .*.*$: 120
^@고급 드라군 .*.*$: 121
^@일반 드라군 .*.*$: 122
^@라운드 .*.*$: 123
^@미네랄 .*.*$: 124
^@가스 .*.*$: 125
^@상평통보 .*.*$: 126
^@테란 업글 .*.*$: 127
^@저그 업글 .*.*$: 128
^@플토 업글 .*.*$: 129
@P1: 101
@P2: 102
@P3: 103
@P4: 104
@플1: 101
@플2: 102
@플3: 103
@플4: 104
@리셋: 105
@초기화: 106
@5배속: 107
[test.eps]
// Example epScript code
var addr, patternAddr, ptrAddr, lenAddr;
function onPluginStart() {
    EUDRegisterObjectToNamespace("addr", addr);
    EUDRegisterObjectToNamespace("patternAddr", patternAddr);
    EUDRegisterObjectToNamespace("ptrAddr", ptrAddr);
    EUDRegisterObjectToNamespace("lenAddr", lenAddr);
}

function chat() {
    SetResources(AllPlayers, Add, 1, Ore);
    if (!(addr >= 1)) return;
    SetResources(AllPlayers, Add, 1, Gas);
    const chatDict = py_eval('{\
    "@판매": 11,\
    "@테란다판다": 12,\
    "@저그다판다": 13,\
    "@토스다판다": 14,\
    "@P1": 101,\
    "@P2": 102,\
    "@P3": 103,\
    "@P4": 104,\
    "@리셋": 105,\
    "@초기화": 106,\
    "@5배속": 107,\
    }');
    // "@플1": 101,\
    // "@플2": 102,\
    // "@플3": 103,\
    // "@플4": 104,\
    setcurpl(getuserplayerid());
    if (addr >= 2) {
        EUDSwitch(addr);
        foreach(chat, id : chatDict.items()) {
            EUDSwitchCase()(id);
            println("\x07채팅 인식: \x04'{}' (id: {})", chat, id);
            break;
        }
        EUDSwitchDefault()();
        println("\x08버그: \x04유효하지 않은 값 ({})", addr);
        EUDEndSwitch();
        return;
    }
    const patternDict = py_eval('{\
    "@홀짝 ": 11,\
    "@용 ": 101,\
    "@신화 마린 ": 102,\
    "@전설 마린 ": 103,\
    "@보물 마린 ": 104,\
    "@영웅 마린 ": 105,\
    "@희귀 마린 ": 106,\
    "@고급 마린 ": 107,\
    "@일반 마린 ": 108,\
    "@신화 히드라 ": 109,\
    "@전설 히드라 ": 110,\
    "@보물 히드라 ": 111,\
    "@영웅 히드라 ": 112,\
    "@희귀 히드라 ": 113,\
    "@고급 히드라 ": 114,\
    "@일반 히드라 ": 115,\
    "@신화 드라군 ": 116,\
    "@전설 드라군 ": 117,\
    "@보물 드라군 ": 118,\
    "@영웅 드라군 ": 119,\
    "@희귀 드라군 ": 120,\
    "@고급 드라군 ": 121,\
    "@일반 드라군 ": 122,\
    "@라운드 ": 123,\
    "@미네랄 ": 124,\
    "@가스 ": 125,\
    "@상평통보 ": 126,\
    "@테란 업글 ": 127,\
    "@저그 업글 ": 128,\
    "@플토 업글 ": 129,\
    }');
    var commandLength;
    const patternDebug = StringBuffer();
    patternDebug.insert(0);
    EUDSwitch(patternAddr);
    EUDSwitchCase()(0);
    DisplayText("\x05아무 채팅/패턴에도 속하지 않음");
    return;
    foreach(pattern, id : patternDict.items()) {
        EUDSwitchCase()(id);
        patternDebug.appendf("\x07패턴 인식: \x04'{}' (id: {}) ", pattern, id);
        commandLength = py_len(u2utf8(pattern));
        break;
    }
    EUDSwitchDefault()();
    println("\x08버그: \x04유효하지 않은 패턴 ({})", patternAddr);
    return;
    EUDEndSwitch();

    const number, digit = parse(ptrAddr + commandLength);
    if (digit == 0) {
        patternDebug.append("\x08명령어 오류: 숫자가 아님");
    } else {
        patternDebug.appendf("{} ({}자리)", number, digit);
    }
    patternDebug.Display();
}

function afterTriggerExec() {
    chat();
}