輸入函式¶
Internet│
┌─────┐ │ ┌────────┐
┌──────┐ │Text │ │ ┌────────────┐ ┌─────────┐ │Command │
│Client├────┤JSON ├─┼──►commandtuple├────►Inputfunc├────►DB query│
└──────┘ │etc │ │ └────────────┘ └─────────┘ │etc │
└─────┘ │ └────────┘
│Evennia
Inputfunc 是 傳入訊息路徑 上的最後一個固定步驟。使用從用戶端傳送的 commandtuple 結構來尋找並呼叫可用的 Inputfunc。 Inputfunc 的工作是透過觸發指令、執行資料庫查詢或任何需要的操作來執行要求的任何操作。
在表格上給出commandtuple
(commandname, (args), {kwargs})
Evennia將嘗試在表單上尋找並呼叫Inputfunc
def commandname(session, *args, **kwargs):
# ...
或者,如果沒有找到匹配項,它將在此表單上呼叫名為「default」的 inputfunc
def default(session, cmdname, *args, **kwargs):
# cmdname is the name of the mismatched inputcommand
預設輸入函式位於 evennia/server/inputfuncs.py 中。
新增您自己的輸入函式¶
在上面的表單上新增一個函式到
mygame/server/conf/inputfuncs.py。您的函式必須位於該模組的全域最外層範圍內,且不以下劃線 (_) 開頭才能被辨識為 inputfunc。 我reload伺服器。
要過載預設的 inputfunc(見下文),只需新增一個同名的函式即可。您還可以擴充套件設定列表INPUT_FUNC_MODULES。
INPUT_FUNC_MODULES += ["path.to.my.inputfunc.module"]
這些模組中名稱不以 _ 開頭的所有全域級函式將被 Evennia 用作 inputfunc。該列表是從左到右匯入的,因此後面匯入的函式將替換前面的函式。
預設輸入功能¶
Evennia 定義了一些預設的輸入函式來處理常見情況。這些定義在
evennia/server/inputfuncs.py。
文字¶
輸入:
("text", (textstring,), {})輸出:取決於觸發的指令
這是最常見的輸入,也是所有傳統泥漿支援的唯一輸入。引數通常是使用者從指令列傳送的內容。由於所有文字都來自使用者輸入 就像這被認為是一個指令,這個輸入函式將執行諸如缺口替換之類的操作,然後將輸入傳遞給中央指令處理程式。
迴音¶
輸入:
("echo", (args), {})輸出:
("text", ("Echo returns: %s" % args), {})
這是一個測試輸入,它只是將引數作為文字回顯到 session。可用於測試自訂用戶端輸入。
預設¶
如上所述,預設功能吸收所有未識別的輸入指令。預設只會記錄一個錯誤。
client_options¶
輸入:
("client_options, (), {key:value,...})輸出:
正常:無
得到:
("client_options", (), {key:value,...})
這是用於設定協定選項的直接指令。這些可以用 @option 設定
指令,但這提供了一種用戶端方式來設定它們。並非所有連線協定都使用
所有標誌,但以下是可能的關鍵字:
get (bool):如果為 true,則忽略所有其他 kwargs 並立即傳回目前設定 作為輸出指令
("client_options", (), {key=value,...})-client (str):用戶端識別符,如「mushclient」。
version (str):用戶端版本
ansi (bool): 支援 ansi 顏色
xterm256 (bool): 是否支援 xterm256 顏色
mxp (bool): 是否支援MXP
utf-8 (bool): 是否支援UTF-8
screenreader (bool):螢幕閱讀器模式開/關
mccp (bool): MCCP 壓縮開/關
screenheight (int): 螢幕高度(以行為單位)
screenwidth (int): 螢幕寬度(以字元為單位)
inputdebug (bool):偵錯輸入函式
nomarkup (bool): 刪除所有文字tags
raw (bool): 保留文字 tags 未解析
請注意,此 inputfunc 有兩個 GMCP 別名 -
hello和supports_set,這表示它將透過某些用戶端假定的 GMCPHello和Supports.Set指令進行存取。
get_client_options¶
輸入:
("get_client_options, (), {key:value,...})輸出:
("client_options, (), {key:value,...})
這是一個方便的包裝器,透過將“get”傳送到上面的 client_options 來檢索當前選項。
get_inputfuncs¶
輸入:
("get_inputfuncs", (), {})輸出:
("get_inputfuncs", (), {funcname:docstring,...})
傳回格式為 ("get_inputfuncs", (), {funcname:docstring,...}) 的輸出指令 - 所有可用輸入函式及其檔案字串的清單。
登入¶
注意:這目前是實驗性的,還沒有經過很好的測試。
輸入:
("login", (username, password), {})輸出:取決於登入掛鉤
這將在目前 Session 上執行 inputfunc 版本的登入操作。它旨在由自訂用戶端設定使用。
get_value¶
輸入:("get_value", (name, ), {})
輸出:("get_value", (value, ), {})
從此 Session 目前控制的角色或帳戶中檢索值。採用一個引數,這只會接受特定的白名單名稱,您需要過載函式才能擴充。預設情況下,可以檢索以下值:
“name”或“key”:帳號或傀儡角色的金鑰。
“location”:目前位置的名稱,或“無”。
“servername”:連線到的Evennia伺服器的名稱。
重複¶
輸入:
("repeat", (), {"callback":funcname, "interval": secs, "stop": False})輸出:取決於重複函式。將返回
("text", (repeatlist),{}以及列表 如果給定一個不熟悉的回呼名稱,則接受名稱。
這將告訴 evennia 以給定的時間間隔重複呼叫命名函式。這將在幕後設定一個 Ticker。只有以前可接受的函式可以透過這種方式重複呼叫,您需要過載此 inputfunc 來新增您想要提供的函式。預設情況下,只允許兩個範例函式,“test1”和“test2”,它們只會以給定的時間間隔回顯文字。透過傳送 "stop": True 停止重複(請注意,您必須包含回呼名稱和 Evennia 的時間間隔才能知道要停止什麼)。
不重複¶
輸入:
("不重複", (), ("回呼":funcname, "interval": secs)輸出:無
這是一個方便的包裝器,用於將“stop”傳送到 repeat inputfunc。
監視器¶
輸入:
("monitor", (), ("name":field_or_argname, stop=False)輸出(變化時):
("monitor", (), {"name":name, "value":value})
這將設定屬性或資料庫欄位的物件監控。每當欄位或 Attribute 以任何方式變更時,都會傳送輸出指令。這是在幕後使用MonitorHandler。透過「停止」鍵停止監控。請注意,在停止時您還必須提供名稱,以便讓系統知道應取消哪個監視器。
僅允許使用白名單中的欄位/屬性,您必須過載此函式才能新增更多。預設情況下,可以監控以下欄位/屬性:
“name”:目前角色名稱
“位置”:目前位置
“desc”:描述引數
取消監控¶
輸入:
("unmonitor", (), {"name":name})輸出:無
一個方便的包裝器,將“stop”傳送到 monitor 函式。