Re: [閒聊] tmi-2 efun 與 simul_efun 簡單說明

作者: typers (Typer)   2014-07-08 17:23:17
: int strlen sizeof(string);
:
: 從上面可以發現 string 就跟「陣列」的概念是類似的,也就是
: 說如果一 string = "abcde", 它就類似({"a","b","c","d",e"})
: 這樣的陣列排在一起的結果。
:
: strlen 就是計算字串的長度。strwidth 也相當於 strlen 只是
: 一般都用 strlen。
在啟用 fluffos 的 USE_ICONV 選項後, strwidth 的行為將會與 strlen 不同
strlen("中文字") = 9 (UTF-8 的一個中文字佔 3 個 byte, 故長度為 9)
strwidth("中文字") = 3
USE_ICONV 選項開啟後, 所有 lib 的文件都必須以 UTF-8 作為文字編碼格式
既然是要弄新的 lib, 小弟建議開啟 USE_ICONV
: string *explode(string, string);
這個 efun 會因為 fluffos 的編譯選項, 而有不同的行為
請問 L 大是以 /adm/etc/options.h.example 來編譯 fluffos 嗎?
: void move_object(object | string);
把 this_object() 移動到所給的參數裏面
如 user 在 room 之間移動 或 物品在容器之間移動, 最終都是透過這個 efun
不過通常都不會直接使用 move_object()
而是會另外再包一層, 處理重量...之類的東西
: mixed *commands();
回傳 this_object() 透過 add_action() 取得的指令資訊列表
可供 user 查詢目前可使用那些特殊指令 (如某 room 或 item 才有的特殊指令)
: void set_living_name(string);
在小貓, npc 通常不使用此 efun
因為當名稱一樣時, find_living() 只找的到最後一個呼叫此 efun 的物件
除非特例, 不然不建議大量使用這個 efun
: livings 傳回的就是所有被 set_living_name 且被載入的生物
livings() 應該是回傳曾經呼叫過 enable_commands() 的物件
: int inherits(string, object default: F__THIS_OBJECT);
inherits(ROOM, this_object())
判斷 this_object() 是否有繼承 ROOM
: void replace_program(string);
以參數的程式區塊取代 this_object() 的程式區塊
可提高效能與節省記憶體, 但限制很多
以目前的環境來說, 應該不太需要使用這個 efun 了
: int set_encoding(string);
: string to_utf8(string, string);
: string utf8_to(string, string);
: int *str_to_arr(string);
: string arr_to_str(int *);
這幾個 efun 是需要開啟 USE_ICONV 選項之後才會有的
用途是處理文字編碼格式
例如
utf8_to("中文", "Big-5") 可以將文字從 UTF-8 轉換為 Big5
str_to_arr("中文") 會回傳 ({ 20013, 25991, 0 }), 可用來判斷是否為中文字
UTF-8 的中文範圍為 0x4E00 ~ 0x9FA5

Links booklink

Contact Us: admin [ a t ] ucptt.com