輸入函式

          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 中。

新增您自己的輸入函式

  1. 在上面的表單上新增一個函式到mygame/server/conf/inputfuncs.py。您的函式必須位於該模組的全域最外層範圍內,且不以下劃線 (_) 開頭才能被辨識為 inputfunc。 我

  2. 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 別名 - hellosupports_set,這表示它將透過某些用戶端假定的 GMCP HelloSupports.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 函式。