ZEP Guidebook (KR)
  • πŸ‘‹Hello ZEP Script
  • ZEP Script κ°€μ΄λ“œ
    • ZEP Script 개발 κ°€μ΄λ“œ
      • μ‰¬μš΄ 개발 κ°€μ΄λ“œ
      • Javascript 개발 κ°€μ΄λ“œ
      • Typescript 개발 κ°€μ΄λ“œ
      • ZEP Script 배포 κ°€μ΄λ“œ
    • ZEP Script λ”°λΌν•˜κΈ°
      • 기초 예제 μ½”λ“œ
        • βœ‰οΈλ©”μ‹œμ§€ 좜λ ₯해보기
        • ♻️ZEP APP lifecycle μ΄ν•΄ν•˜κΈ°
        • πŸ‘€μΊλ¦­ν„° 이미지 λ°”κΎΈκΈ°
        • πŸ–ΌοΈλ‚˜λ§Œμ˜ UI λ§Œλ“€κΈ°
        • πŸ’’2초 μŠ€ν„΄ 효과 λ§Œλ“€μ–΄λ³΄κΈ°
      • ZEP Script 예제 μ½”λ“œ
        • ⏰타이머
        • β±οΈλ°©νƒˆμΆœ 타이머
        • πŸ€›μ‚¬μ΄λ“œλ°” μ•±
        • πŸ§Ÿβ€β™‚οΈμ’€λΉ„ κ²Œμž„
        • 🎨페인트맨 κ²Œμž„
        • πŸ™†β€β™€οΈμ΄ˆμ„± ν€΄μ¦ˆ
        • πŸ’©λ˜₯ν”Όν•˜κΈ° κ²Œμž„
        • πŸ₯Šκ²°νˆ¬ κ²Œμž„
        • πŸƒβ€β™‚οΈλ‹¬λ¦¬κΈ°
      • Custom Label 예제 μ½”λ“œ
        • Type-A
        • Type-B
        • Type-C
        • Type-D
        • Type-E
        • Type-F
        • Type-G
        • Type-H
        • Type-I
        • Type-J
      • μ‚¬μ΄λ“œ λ°” μ•± 예제 μ½”λ“œ
        • πŸ”ΉImage List
        • πŸ”ΉText List
        • πŸ”ΉText Button List
        • πŸ”ΉRanking List
        • πŸ”ΉSelect List
    • ZEP Script FAQ
    • 뢀둝
      • 🎑ZEP 슀크립트 ν™œμš© 사둀
      • πŸ—ΊοΈμŠ€νŽ˜μ΄μŠ€μ™€ λ§΅ μ΄ν•΄ν•˜κΈ°
      • βŒ¨οΈμžλ°”μŠ€ν¬λ¦½νŠΈ ν‚€μ½”λ“œ ν‘œ
      • πŸŽ¨μŠ€ν”„λΌμ΄νŠΈμ‹œνŠΈ μ΄ν•΄ν•˜κΈ°
      • πŸŒ€TileEffectType 상세 μ„€λͺ…
      • πŸ“ŒκΈ°μ€€ μ’Œν‘œ
      • πŸ›°οΈμ™ΈλΆ€ API ν†΅μ‹ ν•˜κΈ°
      • πŸ”°URL 쿼리슀트링 ν™œμš©ν•˜κΈ°
      • πŸͺ§μœ„μ ―μ—μ„œ μ‚¬μš©κ°€λŠ₯ν•œ 문법
      • πŸ”˜λͺ¨λ°”μΌλ²„νŠΌ 이미지 λ³€κ²½ν•˜κΈ°
      • ✳️ZEP 슀크립트 μƒν˜Έμž‘μš© 였브젝트 κ°€μ΄λ“œ
      • πŸ“‡μ˜€λΈŒμ νŠΈ npcProperty
  • ZEP SCRIPT API
    • πŸ“˜ZEP Script API
      • API Summary
      • ScriptApp
        • Lifecycle
        • Field
        • Storage
        • Event Listeners
        • Callbacks
        • Methods
      • ScriptMap
        • Field
        • Methods
      • ScriptPlayer
        • Field
        • Methods
      • ScriptWidget
        • Field
        • Event Listeners
        • Methods
      • UtilityClass
        • Time
Powered by GitBook
On this page

Was this helpful?

  1. ZEP Script κ°€μ΄λ“œ
  2. ZEP Script λ”°λΌν•˜κΈ°
  3. μ‚¬μ΄λ“œ λ°” μ•± 예제 μ½”λ“œ

Select List

PreviousRanking ListNextZEP Script FAQ

Last updated 1 year ago

Was this helpful?

Select List ν˜• μœ„μ ―μ€ ν…μŠ€νŠΈμ™€ ν…μŠ€νŠΈ μž…λ ₯ μ°½, ν˜Ήμ€ 선택 λ²„νŠΌμ„ ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆλŠ” UIμž…λ‹ˆλ‹€.

ν™œμš© 예 ) νƒ‘μŠΉ μ•±, 찌λ₯΄κΈ° μ•±, 아바타 특수 효과 μ•±

Image

Example

// Editable fields. Used for validation.
const RequiredFields = {
    password: "string",
    lock: "boolean"
};

const SELECT_ITEM_DATA = {
    Select_1: {
        id: 1,
        order: 1, // Item sorting order
        displayName: "Item 1", // Item display name
        password: "password", // password
        lock: false, // lock(boolean)
    },
    Select_2: {
        id: 2,
        order: 2,
        displayName: "Item 2",
        password: "password",
        lock: false,
    },
    Select_3: {
        id: 3,
        order: 3,
        displayName: "Item 3",
        password: "password",
        lock: false,
    },
    Select_4: {
        id: 4,
        order: 4,
        displayName: "Item 4",
        password: "password",
        lock: false,
    },
    Select_5: {
        id: 5,
        order: 5,
        displayName: "Item 5",
        password: "password",
        lock: false,
    },
    Select_6: {
        id: 6,
        order: 6,
        displayName: "Item 6",
        password: "password",
        lock: false,
    },
    Select_7: {
        id: 7,
        order: 7,
        displayName: "Item 7",
        password: "password",
        lock: false,
    },
    Select_8: {
        id: 8,
        order: 8,
        displayName: "Item 8",
        password: "password",
        lock: false,
    },
};


App.onStart.Add(() => {
    init();
});

App.onJoinPlayer.Add(function (player) {
    player.tag = {};
});

App.onSidebarTouched.Add(function (player) {
    showMainWidget(player);
})

function init() {
    // ensureStorageInitialized
    if (!App.storage) {
        App.storage = "{}";
        App.save();
    }
    const appStorage = JSON.parse(App.storage);

    // updateItemDataFromStorage
    if (appStorage.setting) {
        for (let key in SELECT_ITEM_DATA) {
            if (appStorage.setting.hasOwnProperty(key)) {
                SELECT_ITEM_DATA[key] = Object.assign({}, SELECT_ITEM_DATA[key], appStorage.setting[key]);
            } else {
                SELECT_ITEM_DATA[key] = Object.assign({}, SELECT_ITEM_DATA[key]);
            }
        }
    }
}

function showMainWidget(player) {
    App.getStorage(() => {
        const appStorage = JSON.parse(App.storage);
        if (player.tag.widget) {
            player.tag.widget.destroy();
            player.tag.widget = null;
        }
        if (player.isMobile) {
            player.tag.widget = player.showWidget("SelectList.html", "sidebar", 0, 0);
        } else {
            player.tag.widget = player.showWidget("SelectList.html", "bottomleft", 0, 0);
        }

        let selectItemData = SELECT_ITEM_DATA;
        if (appStorage.setting) {
            let newList = {};
            for (let key in selectItemData) {
                if (appStorage.setting.hasOwnProperty(key)) {
                    newList[key] = Object.assign({}, selectItemData[key], appStorage.setting[key]);
                } else {
                    newList[key] = Object.assign({}, selectItemData[key]);
                }
            }
            selectItemData = newList;
        }

        player.tag.widget.sendMessage({
            type: "init",
            isMobile: player.isMobile,
            isAdmin: isAdmin(player),
            selectItemData: selectItemData,
        });

        player.tag.widget.onMessage.Add(function (sender, msg) {
            switch (msg.type) {
                case "close":
                    if (sender.tag.widget) {
                        sender.tag.widget.destroy();
                        sender.tag.widget = null;
                    }
                    break;
                case "requestSaveSetting":
                    const result = validateDatabase(msg.editData);
                    if (!result) {
                        sender.showAlert("Invalid Input");
                        return;
                    }
                    App.getStorage(() => {
                        const appStorage = JSON.parse(App.storage);
                        appStorage.setting = result;
                        App.setStorage(JSON.stringify(appStorage));

                        if (sender.tag.widget) {
                            sender.tag.widget.sendMessage({
                                type: "responseSaveSetting",
                            });
                        }

                        let selectItemData = {};
                        for (let key in SELECT_ITEM_DATA) {
                            if (appStorage.setting.hasOwnProperty(key)) {
                                selectItemData[key] = Object.assign({}, SELECT_ITEM_DATA[key], appStorage.setting[key]);
                                SELECT_ITEM_DATA[key] = selectItemData[key];
                            } else {
                                SELECT_ITEM_DATA[key] = Object.assign({}, SELECT_ITEM_DATA[key]);
                            }
                        }
                        if (selectItemData == {}) {
                            selectItemData = SELECT_ITEM_DATA;
                        }
                        handleUpdateSetting(selectItemData);
                    });

                    break;
            }
        });
    });

}

function handleUpdateSetting(selectItemData) {
    for (const player of App.players) {
        if (!player) continue;
        if (player.tag.widget) {
            player.tag.widget.sendMessage({
                type: "update",
                selectItemData: selectItemData,
            });
        }
    }
}

function validateDatabase(database) {
    let newDB = {};
    for (let key in database) {
        let item = database[key];
        newDB[key] = {};
        for (let field in RequiredFields) {
            // validateFields
            if (!item.hasOwnProperty(field) || typeof item[field] !== RequiredFields[field]) {
                return false;
            }
            if (field === "password" && (!item[field] && item["lock"])) {
                return false;
            }

            newDB[key][field] = item[field];
        }
    }
    return newDB;
}

function isAdmin(player) {
    return player.role >= 3000;
}
πŸ”Ή
9KB
SelectList.zip
archive