Skip to content

API UO BookSetPageText zh tw

Codex edited this page Sep 23, 2026 · 1 revision

UO.BookSetPageText

ClassicUO / Basic IDE

Home · API · Books

取代已開啟且可編輯書籍的一頁內容。

完整語法

UO.BookSetPageText(Page:Any, Text:Any) -> Unit

參數

  • Page — 從1起算的頁碼,不是書籍ID。頁數由伺服器提供。
  • Text — 文字:Chr(10)換行,Chr(13)會被移除。每頁最多10行,每行53字元,不接受NUL。

傳回值

Unit:沒有回傳值。這是寫入要求,不是TRUE/FALSE或伺服器完成確認;伺服器可能拒絕編輯。

行為

  • 先透過遊戲操作開啟目標書籍。指令選用最後開啟的書,沒有ID參數;多本書時請確認目標。Get只讀取已收到的資料,不會要求缺少的頁面。
  • 管理員即使沒有圖形畫面,也會在工作階段中保存書籍。關閉並重新開啟遊戲視窗會保留書與草稿。關閉書本本身會將其移出已開啟書籍;斷線則清除伺服器書籍。
  • 只有可編輯書籍能寫入。無效頁碼與過長文字會遭拒絕。BookSetText會在傳送前檢查所有頁面,因此後面頁面的錯誤不會導致只寫入一部分。

內部函式:從呼叫到結果

伺服器傳送標頭、頁數與內文。SessionBooks檢查完整封包後保存並更新畫面。Basic經由bridge選擇最後的書,SessionBook讀取內文或檢查後傳送寫入封包。ModernBookGump顯示相同資料,並在分離圖形畫面時保存草稿。

1. GetOpenBook

先透過遊戲操作開啟目標書籍。指令選用最後開啟的書,沒有ID參數;多本書時請確認目標。Get只讀取已收到的資料,不會要求缺少的頁面。

管理員即使沒有圖形畫面,也會在工作階段中保存書籍。關閉並重新開啟遊戲視窗會保留書與草稿。關閉書本本身會將其移出已開啟書籍;斷線則清除伺服器書籍。

專案原始碼: src/ClassicUO.Client/Game/Managers/ClassicUOInjectionApiBridge.cs; 函式 GetOpenBook.

2. SessionBooks.ReceiveHeader/ReceivePages; SessionBook.Yoko*

只有可編輯書籍能寫入。無效頁碼與過長文字會遭拒絕。BookSetText會在傳送前檢查所有頁面,因此後面頁面的錯誤不會導致只寫入一部分。

Unit:沒有回傳值。這是寫入要求,不是TRUE/FALSE或伺服器完成確認;伺服器可能拒絕編輯。

專案原始碼: src/ClassicUO.Client/Game/Managers/SessionBooks.cs; 函式 SessionBooks.ReceiveHeader/ReceivePages; SessionBook.Yoko*.

完整提供輔助函式。其TRUE僅表示本機檢查及呼叫已執行,不代表伺服器已儲存。

範例

直接使用

# 直接使用
#
# 取代已開啟且可編輯書籍的一頁內容#
# Unit沒有回傳值這是寫入要求不是TRUE/FALSE或伺服器完成確認伺服器可能拒絕編輯SUB Main()
    # 範例假定目標書已開啟必要頁面已收到且寫入時可編輯123是頁碼請確認存在名稱與文字僅供示例UO.BookSetPageText(2, "Camp A")
END SUB

參數與執行說明:

  • 範例假定目標書已開啟、必要頁面已收到,且寫入時可編輯。1、2、3是頁碼,請確認存在。名稱與文字僅供示例。

實用情境

# 實用情境
#
# 取代已開啟且可編輯書籍的一頁內容#
# Unit沒有回傳值這是寫入要求不是TRUE/FALSE或伺服器完成確認伺服器可能拒絕編輯SUB Main()
    # 範例假定目標書已開啟必要頁面已收到且寫入時可編輯123是頁碼請確認存在名稱與文字僅供示例UO.BookSetPageText(1, "Supplies" + Chr(10) + "Bandages" + Chr(10) + "Food")
END SUB

參數與執行說明:

  • 範例假定目標書已開啟、必要頁面已收到,且寫入時可編輯。1、2、3是頁碼,請確認存在。名稱與文字僅供示例。

完整輔助函式

# 完整輔助函式
#
# 取代已開啟且可編輯書籍的一頁內容#
# Unit沒有回傳值這是寫入要求不是TRUE/FALSE或伺服器完成確認伺服器可能拒絕編輯SUB Main()
    # 範例假定目標書已開啟必要頁面已收到且寫入時可編輯123是頁碼請確認存在名稱與文字僅供示例# 完整提供輔助函式其TRUE僅表示本機檢查及呼叫已執行不代表伺服器已儲存VAR requested = AppendNote(1, "Return before night")
END SUB

FUNCTION AppendNote(page, line)
    IF Len(line) > 53 THEN
        RETURN FALSE
    END IF
    VAR previous = UO.BookGetPageText(page)
    IF previous = "" THEN
        UO.BookSetPageText(page, line)
        RETURN TRUE
    END IF
    VAR lineCount = 1
    FOR VAR index = 1 TO Len(previous)
        IF Mid(previous, index, 1) = Chr(10) THEN
            lineCount = lineCount + 1
        END IF
    NEXT
    IF lineCount >= 10 THEN
        RETURN FALSE
    END IF
    UO.BookSetPageText(page, previous + Chr(10) + line)
    RETURN TRUE
END FUNCTION

參數與執行說明:

  • 範例假定目標書已開啟、必要頁面已收到,且寫入時可編輯。1、2、3是頁碼,請確認存在。名稱與文字僅供示例。
  • 完整提供輔助函式。其TRUE僅表示本機檢查及呼叫已執行,不代表伺服器已儲存。

Русский · English · Українська · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

Clone this wiki locally