表概述

page_text 表属于"物品系统"(Item System),存储游戏中所有可读物品的文本内容。物品模板通过 item_template 表中的 PageText 字段引用本表的 ID。当玩家将鼠标悬停在可读物品上时,光标会变成放大镜图标,右键点击即可打开页面窗口。

该表支持多页文档功能——通过 NextPageID 字段可以形成页面链,玩家可以翻页阅读长篇内容。

ID
int unsigned, 主键
页面文本的唯一标识符
Text
longtext, 非空
页面显示的实际文本内容
NextPageID
int unsigned
下一页的 ID(0 表示最后一页)

表结构

字段名数据类型默认值说明
IDint UNSIGNED0页面文本的唯一标识符,主键
Textlongtext非空页面显示的实际文本内容
NextPageIDint UNSIGNED0下一页的 ID,用于多页文档(0 = 最后一页)
VerifiedBuildintNULL验证的客户端版本号

主键: ID | 引擎: InnoDB | 字符集: utf8mb4 | 注释: Item System

重要字段详解

ID (页面 ID)

页面文本的唯一标识符。在 item_template 表的 PageText 字段中被引用。

Text (文本内容)

页面显示的实际文本内容。支持以下格式:

  • 换行符:使用 \n 换行
  • HTML 标签:支持有限的 HTML 标签如 <HTML>, <BODY>, <H1>, <P>, <BR>
  • 文本长度:longtext 类型,几乎无长度限制
  • UTF-8 编码:支持多语言文本
NextPageID (下一页)

指向下一页文本的 ID。通过这个字段,可以创建多页文档链:

  • 0 表示这是最后一页
  • 非 0 值指向下一页的 ID

多页文档示例:

  • 第1页:ID=100, NextPageID=101
  • 第2页:ID=101, NextPageID=102
  • 第3页:ID=102, NextPageID=0(最后一页)

注意: 确保 NextPageID 形成正确的链式结构,避免循环引用。

使用场景

实战案例

案例1:创建单页文档

INSERT INTO page_text (ID, Text, NextPageID, VerifiedBuild)
VALUES (1001, '这是一份简短的通知。\n\n请立即前往暴风城报到!', 0, 12340);

案例2:创建多页文档(书籍)

-- 第一页
INSERT INTO page_text (ID, Text, NextPageID, VerifiedBuild)
VALUES (2001, '第一章:起源\n\n在遥远的过去,艾泽拉斯世界刚刚诞生...', 2002, 12340);

-- 第二页
INSERT INTO page_text (ID, Text, NextPageID, VerifiedBuild)
VALUES (2002, '第二章:战争\n\n黑暗之门开启,兽人入侵了艾泽拉斯...', 2003, 12340);

-- 第三页(最后一页)
INSERT INTO page_text (ID, Text, NextPageID, VerifiedBuild)
VALUES (2003, '第三章:和平\n\n联盟与部落缔结了脆弱的和平...', 0, 12340);

案例3:创建带格式的文档

INSERT INTO page_text (ID, Text, NextPageID)
VALUES (3001, '<HTML><BODY><H1>重要通知</H1><P>所有冒险者请注意:</P><P>副本将于明日维护。</P></BODY></HTML>', 0);

案例4:在物品模板中引用页面文本

-- 创建一个可读的信件物品
UPDATE item_template
SET PageText = 1001, PageLanguage = 0, PageMaterial = 1
WHERE entry = 12345;

-- PageMaterial 材质类型:
-- 0 = 无材质, 1 = 羊皮纸, 2 = 石头, 3 = 大理石, 4 = 银色, 5 = 青铜

查询示例

查找包含特定关键词的页面文本
SELECT ID, SUBSTRING(Text, 1, 100) as TextPreview
FROM page_text
WHERE Text LIKE '%暴风城%'
ORDER BY ID;
查找多页文档的起始页
SELECT pt1.ID, pt1.NextPageID
FROM page_text pt1
WHERE pt1.NextPageID > 0
AND NOT EXISTS (
    SELECT 1 FROM page_text pt2 WHERE pt2.NextPageID = pt1.ID
);
统计文档总页数
WITH RECURSIVE page_chain AS (
    SELECT ID, NextPageID, 1 as page_num
    FROM page_text WHERE ID = 2001
    UNION ALL
    SELECT pt.ID, pt.NextPageID, pc.page_num + 1
    FROM page_text pt
    JOIN page_chain pc ON pt.ID = pc.NextPageID
)
SELECT MAX(page_num) as total_pages FROM page_chain;

常见问题

Q: 文本不显示怎么办?
  • item_template 中的 PageText 字段是否正确设置
  • page_text 表中是否存在对应的 ID
  • Text 字段是否为空
  • 物品类型是否支持阅读
Q: 支持哪些 HTML 标签?

客户端支持的 HTML 标签有限:

  • <HTML>, <BODY> - 基本结构
  • <H1>, <H2>, <H3> - 标题
  • <P> - 段落
  • <BR> - 换行
  • <IMG> - 图片(有限支持)
Q: 如何创建长篇文档?
  • 将内容分成多页,每页不超过 2000 字符
  • 使用 NextPageID 创建页面链
  • 在每页末尾提示"翻页继续"

相关表格