簡單的選單選擇樹¶
蒂姆·阿什利·詹金斯 (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產生的。對此的更改
檔案將被覆蓋,因此請編輯該檔案而不是此檔案。