簡單的選單選擇樹

蒂姆·阿什利·詹金斯 (Tim Ashley Jenkins) 貢獻,2017 年

該實用程式可讓您建立並初始化整個分支EvMenu 傳遞給一個函式的多行字串的例項。

注意:自從建立 contrib 以來,EvMenu 本身就有了自己的模板 具有更多功能且與所使用的風格不相容的語言 這個contrib。兩者仍然可以並行使用。

EvMenu 非常強大和靈活,但可能有點讓人不知所措 並提供簡單的多選選單可能不需要的大量功能。

這個模組提供了一個函式init_tree_selection,它充當前端 對於 EvMenu,從您的多行字串中動態取得選項 提供。 例如,如果您這樣定義一個字串:

TEST_MENU = '''Foo
Bar
Baz
Qux'''

然後在呼叫時使用 TEST_MENU 作為 ‘treestr’ 來源 init_tree_selection 對玩家:

init_tree_selection(TEST_MENU, caller, callback)

玩家將看到 EvMenu,如下所示:

___________________________

Make your selection:
___________________________

Foo
Bar
Baz
Qux

進行選擇會將選擇的鍵作為指定的回撥傳遞給 字串以及呼叫者,以及選擇的索引(行 來源字串上的數字)以及樹本身的來源字串。

除了指定選單上的選項外,您還可以指定 類別。 類別透過在其下方放置選項來表示,前面帶有 一個“-”字元。 如果選擇的是一個類別,那麼選擇它會彈出一個 新的選單節點,提示玩家在這些選項之間進行選擇,或繼續 返回上一級選單。此外,類別預設標記有 金鑰末尾有“[+]”。該標記和返回選項都可以 禁用。

類別也可以巢狀在其他類別中 - 只需再新增一個“-” 更深。您可以根據需要多次執行此操作。沒有硬性限制 您可以向下檢視的類別數量。

例如,讓我們為選單新增更多選項,將“Bar”變成 類別。

TEST_MENU = '''Foo
Bar
-You've got to know
--When to hold em
--When to fold em
--When to walk away
Baz
Qux'''

現在當我們呼叫選單時,我們可以看到「Bar」已經變成了一個類別而不是一個 可選擇的選項。

_______________________________

Make your selection:
_______________________________

Foo
Bar [+]
Baz
Qux

請注意「欄」旁邊的 [+]。如果我們選擇“Bar”,它會向我們顯示列出的選項 在它下面。

________________________________________________________________

Bar
________________________________________________________________

You've got to know [+]
<< Go Back: Return to the previous menu.

只有一個選項,它本身就是一個類別,以及返回的選項, 這將帶我們回到上一個選單。讓我們選擇“你必須知道”。

________________________________________________________________

You've got to know
________________________________________________________________

When to hold em
When to fold em
When to walk away
<< Go Back: Return to the previous menu.

現在我們也看到它下面列出的三個選項。我們可以選擇其中之一或者 使用“返回”返回到我們之前所在的“酒吧”選單。這是非常 簡單地製作選擇的分支樹!

最後一件事 - 您只需透過以下方式即可設定各種選項的描述 新增“:”字元,後面接著選項行的說明。對於 例如,讓我們為選單中的「Baz」新增描述:

TEST_MENU = '''Foo
Bar
-You've got to know
--When to hold em
--When to fold em
--When to walk away
Baz: Look at this one: the best option.
Qux'''

現在我們看到 Baz 選項附加了與其鍵分開的描述:

_______________________________________________________________

Make your selection:
_______________________________________________________________

Foo
Bar [+]
Baz: Look at this one: the best option.
Qux

一旦玩家做出選擇 - 例如說「Foo」 - 選單就會終止 並使用選擇呼叫指定的回撥,如下所示:

callback(caller, TEST_MENU, 0, "Foo")

選擇的索引與包含以下內容的字串一起給出 選擇的關鍵。 這樣,如果選單中有兩個選項相同 關鍵,你仍然可以區分它們。

這就是全部!對於簡單的分支樹選擇,使用這個 系統比手動建立EvMenu節點容易得多。這也使得 產生具有動態選項的選單要容易得多 - 因為選單的來源 樹只是一個字串,您可以在之前輕鬆地透過程式生成該字串 將其傳遞給 init_tree_selection 函式。 例如,如果玩家施放 在沒有指定目標的情況下施咒或進行攻擊,而不是給他們一個 錯誤,您可以向他們提供有效目標清單以供選擇 產生多行目標字串並將其傳遞給 init_tree_selection,可呼叫的執行一次操作 做出選擇。

這個選擇系統只適用於簡單的分支樹 - 做任何事 非常複雜,例如在類別之間跳躍或提示任意 輸入仍然需要完整的 EvMenu 實現。對於簡單的選擇, 但是,我相信您會發現使用此功能要容易得多!

此模組中包含一個範例選單和功能,可讓玩家 改變他們名字的顏色 - 隨意改變它來感受一下如何 該系統的工作原理是將此模組匯入到您遊戲的default_cmdsets.py中 模組並將 CmdNameColor 新增至預設角色的指令集中。


此檔案頁面是從evennia\contrib\utils\tree_select\README.md產生的。對此的更改 檔案將被覆蓋,因此請編輯該檔案而不是此檔案。