1. 使用指令和建立東西¶
在本課中,我們將測試我們可以在遊戲中開箱即用地執行哪些操作。 Evennia 附帶 大約 90 個預設指令,雖然您可以隨意覆寫這些指令,但預設值可能非常有用。
連線並登入您的新遊戲。你會發現自己處於「地獄邊境」位置。這個 是此時遊戲中唯一的房間。讓我們稍微探討一下預設指令。
預設指令的語法類似MUX:
command[/switch/switch...] [arguments ...]
一個例子是:
create/drop box
/switch 是一個特殊的可選標誌,用於使指令表現不同。開關始終直接放在指令名稱後面,並以正斜線 (/) 開頭。 _引數_是指令的一個或多個輸入。將某些內容分配給物件時,通常會使用等號 (=)。
您是否習慣以@開頭的指令,例如@create?那也行。 Evennia 簡單地忽略前面的@。
1.1. 尋求協助¶
help
將為您提供所有可用指令的清單。使用
help <commandname>
檢視該指令的遊戲內幫助。
1.2. 環顧四周¶
最常見的指令是
look
這將顯示當前位置的描述。 l 是look 指令的別名。
當在指令中定位物件時,您可以使用兩個特殊標籤:here 表示目前房間,或 me/self 指向您自己。因此,
look me
將為您提供您自己的描述。在這種情況下,look here 與普通的 look 相同。
1.3. 從神位退下來¶
如果您剛安裝了Evennia,您的第一個玩家帳號稱為使用者#1 –也稱為_超級使用者_或_上帝使用者_。這個使用者很厲害——如此強大以至於它可以超越許多遊戲限制(例如鎖)。這可能很有用,但它也隱藏了您可能想要測試的一些功能。
若要暫時退出超級使用者位置,您可以在遊戲中使用 quell 指令:
quell
這將使您開始使用目前角色等級的許可權,而不是超級使用者等級的許可權。如果您沒有更改任何設定,您的初始遊戲角色應該具有_開發者_級別許可權 –在不像超級使用者那樣繞過鎖的情況下盡可能高。這對於本頁上的範例來說效果很好。使用
unquell
完成後再次獲得超級使用者狀態。
1.4. 建立物件¶
基本物件可以是任何東西——劍、花和非玩家角色。它們是使用 create 指令建立的。例如:
create box
這會在您的庫存中建立一個新的「盒子」(預設物件型別)。使用指令inventory(或i)檢視它。現在,「box」是一個相當短的名稱,所以讓我們重新命名它並新增一些別名:
name box = very large box;box;very;crate
Warning
MUD 用戶端和分號:
一些傳統的 MUD 用戶端使用分號 ; 來分隔用戶端輸入。如果是這樣,上面的行將給出錯誤,您需要更改用戶端以使用另一個指令分隔符號或將其置於「逐字」模式。如果仍然遇到問題,請改用 Evennia Web 使用者端。
我們現在已將該盒子重新命名為“非常大的盒子”——這就是我們在觀察它時將看到的。但是,我們也可以透過我們為上面的 name 指令提供的任何其他名稱來識別它(i.e.、crate 或像以前一樣簡單地使用 box)。我們也可以在初始 create 物件指令中直接在名稱後面給出這些別名。對於所有建立指令都是如此 –您始終可以為新物件的名稱提供 ; 分隔的別名清單。在我們的範例中,如果您不想更改框物件的名稱本身,而只想新增別名,則可以使用 alias 指令。
在搭建教學的此時,我們的角色正在攜帶盒子。讓我們放棄它:
drop box
嘿,快點,—它就在地面上,一切正常。還有一種快捷方式可以使用 /drop 開關(e.g、create/drop box)一次性建立和刪除物件。
讓我們仔細看看我們的新盒子:
examine box
檢查指令將顯示有關框物件的一些技術細節。現在,我們將忽略這是什麼 資訊手段。
嘗試在框中輸入 look 以檢視(預設)描述:
> look box
You see nothing special.
預設的描述不是很令人興奮。讓我們來新增一些味道:
desc box = This is a large and very heavy box.
如果您嘗試get指令,我們將撿起盒子。到目前為止,一切都很好。但是,如果我們真的希望這是一個又大又重的盒子,人們就不應該那麼容易帶著它逃跑。為了防止這種情況,我們必須將其lock下來。這是透過為其分配_lock_來完成的。 TO這樣做,首先確保盒子被扔到房間裡,然後使用lock指令:
lock box = get:false()
鎖代表了一個相當大的主題,但是現在,這將實現我們想要的。上面的指令將lock這個盒子,這樣就沒有人可以抬起它——但有一個例外。請記住,超級使用者會覆蓋所有鎖,並且無論如何都會拿起它。確保您正在取消超級使用者許可權,然後嘗試再次取得它:
> get box
You can't get that.
認為這個預設錯誤訊息看起來很乏味嗎? get 指令尋找名為 get_err_msg 的 Attribute 以自訂錯誤訊息傳回。我們使用 set 指令設定屬性:
set box/get_err_msg = It's way too heavy for you to lift.
現在嘗試獲取該框,您應該會看到一條更相關的錯誤訊息回顯給您。將來要檢視該訊息字串是什麼,可以使用「檢查」。
examine box/get_err_msg
Examine 將傳回屬性值,包括顏色程式碼。例如,examine here/desc 將傳回目前房間的原始描述(包括顏色程式碼),以便您可以複製並貼上以將其描述設為其他內容。
您建立新指令 –或修改現有的-在遊戲外的Python程式碼中。我們稍後將在指令教學 中探討這樣做。
1.5. 獲得個性¶
Scripts 是強大的異常物件,對許多「幕後」事物很有用。他們的可選能力之一是按計時器做事。為了嘗試我們的第一個 script,讓我們將其應用到我們自己身上。 evennia/contrib/tutorials/bodyfunctions/bodyfunctions.py 中有一個範例 script 稱為 BodyFunctions。要將其新增到我們自己中,我們可以使用 script 指令:
script self = tutorials.bodyfunctions.BodyFunctions
上面的字串告訴Evennia在我們指定的地方挖掘Python程式碼。它已經知道要查詢 contrib/ 資料夾,因此我們不必提供完整路徑。
另請注意我們如何使用
.而不是/(或 Windows 上的\)。這個約定就是所謂的「Python 路徑」。在 Python 路徑中,您可以使用.分隔路徑的各個部分,並跳過.py檔案結尾。重要的是,它還允許您指向 Python 程式碼_內部_檔案,如我們的範例所示,其中BodyFunctions類位於bodyfunctions.py檔案內部。我們稍後再去上課。這些「Python 路徑」在 Evennia 中被廣泛使用。
等一會兒,你會發現自己開始進行隨機觀察…
script self =
上面的指令將顯示給定物件(在本例中是您自己)上有關 scripts 的詳細資訊。 examine 指令也包含此類詳細資訊。
您將看到距離下次「觸發」還有多長時間。如果倒數計時達到零時沒有任何反應,請不要驚慌 –這個特定的 script 有一個隨機發生器來確定它是否會說些什麼。所以你不會在每次觸發時看到輸出。
當您厭倦了角色的「見解」時,請使用以下指令停止 script:
script/stop self = tutorials.bodyfunctions.BodyFunctions
您可以在遊戲之外用 Python 建立自己的scripts;您給 script 的路徑實際上是 script 檔案的 Python 路徑。 Scripts 頁面說明瞭更多詳細資訊。
1.7. 為自己打造一棟房子¶
塑造遊戲世界的主要指令是dig。例如,如果你站在地獄邊境,你可以像這樣挖掘一條通往新房子位置的路線:
dig house = large red door;door;in,to the outside;out
上面的指令將建立一個名為「house」的新房間。它還會在你目前位置建立一個名為“大紅門”的出口,並在新房間中建立一個名為“到外面”的相應出口,通往地獄邊境。在上面,我們也為這些出口定義了一些別名,以便玩家不需要輸入完整的出口名稱。
如果您想使用常規羅盤方向(北、西、西南等),您也可以使用 dig 來實現。但是,Evennia 還具有 dig 的專用版本,可協助確定基本方向(以及上/下和進/出)。它被稱為tunnel:
tunnel sw = cliff
這將建立一個名為“懸崖”的新房間,有一個通往那裡的“西南”出口,以及一條從懸崖返回到您當前位置的“東北”路徑。
您可以使用 open 指令從您所在的位置建立新的出口:
open north;n = house
這將開啟通往先前建立的房間 house 的出口 north(具有別名 n)。
如果您有多個名為 house 的房間,您將獲得一份匹配列表,並且必須選擇要連結到的特定房間。
接下來,沿著北出口向北步行到您的“房子”。你也可以teleport到它:
north
或者:
teleport house
若要手動開啟返回 Limbo 的出口(如果您沒有使用 dig 指令自動執行此操作):
open door = limbo
(你也可以使用 Limbo 的 #dbref,當你站在 Limbo 中時,可以使用 examine here 找到它。)
1.8. 重新洗牌世界¶
假設您回到Limbo,讓我們將_大盒子_傳送到我們的house:
teleport box = house
very large box is leaving Limbo, heading for house.
Teleported very large box -> house.
你可以透過使用find指令來找出遊戲世界中的東西,例如我們的box:
find box
One Match(#1-#8):
very large box(#8) - src.objects.objects.Object
知道了盒子的#dbref(本例中為#8),你就可以抓住盒子並將其放回此處,而無需實際先去house:
teleport #8 = here
如前所述,here 是“您當前位置”的別名。盒子現在應該和你一起回到 Limbo 了。
我們已經厭倦了盒子。讓我們摧毀它:
destroy box
發出 `destroy`` 指令將要求您確認。 Once you confirm, the box will be gone.
透過向指令提供以逗號分隔的物件清單(或 #dbrefs 範圍,如果它們不在同一位置),您可以一次性destroy多個物件。
1.9. 新增幫助條目¶
與指令相關的 help 條目是您在 Python 程式碼中修改的內容 –當我們解釋如何新增指令時,我們將介紹這一點 –但您也可以新增非指令相關的說明條目。例如,解釋一下你的遊戲世界的歷史:
sethelp History = At the dawn of time ...
現在,您將在 help 清單中找到新的 History 條目,並且可以使用 help History 閱讀說明文字。
1.10. 增加一個世界¶
在簡要介紹了建立和使用遊戲內指令之後,您可能已經準備好看到更充實的範例了。幸運的是,Evennia 附帶了一個教學世界供您探索 –我們將在下一課中嘗試。