查看“︁工程参考/配置文件/Public/SceneAttr.txt”︁的源代码
来自天龙知识库
←
工程参考/配置文件/Public/SceneAttr.txt
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
{{DISPLAYTITLE:<span style="font-size:24px;line-height:1.4;overflow-wrap:anywhere;">工程参考/配置文件/Public/SceneAttr.txt</span>}} __NOTOC__ <div class="config-file-reference" style="max-width:1200px;margin:0 auto;line-height:1.8;color:#29343a;font-family:Arial,'Microsoft YaHei',sans-serif;letter-spacing:0;overflow-wrap:anywhere;"> [[首页|首页]] · [[工程参考/配置文件索引|配置文件索引]] · [[工程参考/配置文件修改约定|修改约定]] SceneAttr.txt 是每个场景一行的基础属性表:第 1 列是场景编号,第 2 列是场景名,第 3 到 7 列是逻辑类型、安全级别、默认落点坐标与挂机终结者开关,第 8 到 23 列是该场景可随机出没的 16 个怪物模板 ID。样本 528 条数据记录、23 列。服务端与客户端都读它,但两侧取用的列不同(见下)。 [[#文件位置与生效|位置与生效]] · [[#文件格式|文件格式]] · [[#字段详解|字段详解]] · [[#常用修改实例|修改实例]] == 文件位置与生效 == {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="width:24%;text-align:left;background:#edf3f2;padding:8px;" | 项目 ! scope="col" style="width:76%;text-align:left;background:#edf3f2;padding:8px;" | 说明 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 运行文件 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">../Public/Config/SceneAttr.txt</code>,相对于服务端工作目录;客户端从资源目录读取同名文件。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 读取程序 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | Server 游戏进程:TableInit::InitSceneAttrTable 用 ../Public/Config/SceneAttr.txt 加载;客户端 GMDataBase.cpp 把 DBC_SCENE_ATTR(id 181)注册到同名文件 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 生效方法 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 正常保存并停服后,重启读取此文件的 Server;客户端需要随资源更新并重启客户端。当前检索未发现单独重载本文件的可用入口。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 样本格式 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">GB18030-compatible</code>,<code style="white-space:normal;overflow-wrap:anywhere;">CRLF</code>。保留原编码;源码读取器不会自动把中文转为 UTF-8。 |} 服务端 InitSceneAttrTable 把第 1 列当数组下标,先断言列数不少于 23,再读第 3 到 7 列(Search_Posistion(i,2) 到 (i,6))填入 m_nSceneLogicType、m_nSafetyLevel、m_nDefaultX、m_nDefaultZ、m_bCanCreateRascalKiller;第 8 到 23 列循环读 j+7(j 从 0 到 15),值不等于 -1 的才压入 m_anMonsterDataIDs,上限 MAX_SCENE_ATTR_MONSTER_COUNT=16。 第 2 列名称服务端不读:加载时显式把 m_pszName 置为 NULL,只有客户端 _DBC_SCENE_ATTR.szName 会用。因此改场景名只影响客户端显示,不影响服务端逻辑。 第 1 列重复或越界(必须是 0 到 MAX_SCENE-1)会打印 “Load SceneAttr.txt ... Failed!”、触发断言并 CleanUp 整表,等于整个场景属性表加载失败。 == 文件格式 == 首行是类型行:<code style="white-space:normal;overflow-wrap:anywhere;">INT STRING INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT</code>;第二行是列名行,程序跳过其内容;从第三行开始读取数据。各列用真实 Tab 分隔,保留首列、空列及行尾,不用空格代替。数据行行首 # 表示注释,分号不是此表的注释规则。首列为空的行被跳过;不足的尾列补为空值,多余列不参与本页字段读取。空整数和非数字经 atoi 可能成为 0,空字符串仍为空,不把解析成功当作业务合法。第一列须唯一,重复会触发读取器错误。 == 字段详解 == 列号从 1 开始,源码列下标从 0 开始。 {| class="wikitable" style="width:100%;table-layout:fixed;border-collapse:collapse;font-size:13px;" ! scope="col" style="width:34%;text-align:left;background:#edf3f2;padding:8px;" | 字段与类型 ! scope="col" style="width:42%;text-align:left;background:#edf3f2;padding:8px;" | 含义与修改要点 ! scope="col" style="width:24%;text-align:left;background:#edf3f2;padding:8px;" | 缺项或特殊值 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 1 列</code><br>INT:ID | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 场景编号(主键)。服务端 InitSceneAttrTable 把它当成 g_SceneAttrTbl 的数组下标(Search_Posistion(i,0)),必须落在 0 到 MAX_SCENE-1 且不能重复;客户端 DBC_SCENE_ATTR 也按它查询。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 下标越界或重复会 CleanUp 整表并中止加载。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 2 列</code><br>STRING:Name$1$ | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 场景显示名。客户端 _DBC_SCENE_ATTR.szName 使用;服务端读入后把 m_pszName 置为 NULL,不读这一列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 服务端为空指针,改名只影响客户端显示。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 3 列</code><br>INT:类型 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 场景逻辑类型,服务端存为 m_nSceneLogicType(Search_Posistion(i,2))。用于区分普通场景、副本等逻辑分类。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空为 0。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 4 列</code><br>INT:安全级别 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 场景安全级别,服务端存为 m_nSafetyLevel。决定该场景内的 PK/惩罚规则强度。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空为 0。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 5 列</code><br>INT:可以站立的位置X | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 进入或异常时把角色落到的默认 X 坐标,服务端存为 m_nDefaultX。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空为 0。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 6 列</code><br>INT:可以站立的位置Z | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 默认落点 Z 坐标,服务端存为 m_nDefaultZ。本表只有 X 与 Z,没有 Y 坐标列。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空为 0。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 7 列</code><br>INT:是否可以产生挂机终结者 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景是否允许生成挂机终结者,非零为允许,服务端存为 m_bCanCreateRascalKiller。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 空为 0(不允许)。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 8 列</code><br>INT:场景怪物0 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 1 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 9 列</code><br>INT:场景怪物1 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 2 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 10 列</code><br>INT:场景怪物2 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 3 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 11 列</code><br>INT:场景怪物3 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 4 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 12 列</code><br>INT:场景怪物4 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 5 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 13 列</code><br>INT:场景怪物5 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 6 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 14 列</code><br>INT:场景怪物6 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 7 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 15 列</code><br>INT:场景怪物7 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 8 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 16 列</code><br>INT:场景怪物8 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 9 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 17 列</code><br>INT:场景怪物9 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 10 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 18 列</code><br>INT:场景怪物10 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 11 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 19 列</code><br>INT:场景怪物11 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 12 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 20 列</code><br>INT:场景怪物12 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 13 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 21 列</code><br>INT:场景怪物13 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 14 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 22 列</code><br>INT:场景怪物14 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 15 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |- | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | <code style="white-space:normal;overflow-wrap:anywhere;">第 23 列</code><br>INT:场景怪物15 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | 该场景可随机出没的第 16 个怪物模板 ID。服务端循环读第 8 到 23 列(j 从 0 到 15,Search_Posistion(i, j+7)),值不等于 -1 才压入 m_anMonsterDataIDs。 | style="padding:8px;vertical-align:top;overflow-wrap:anywhere;" | -1 表示该槽位为空,不计入数量;最多 16 个。 |} == 常用修改实例 == 示例为局部教学片段,先备份原运行文件,再修改对应行并保留其余配置。教学值不是程序默认值。 以下代码块保留真实 Tab;本地示例文件保留原样本编码、中文表头与 CRLF。网页文字使用浏览器编码显示,不表示运行文件应改存 UTF-8。 === 把 0 号场景(洛阳)的安全级别从 1 改成 2 === 修改前: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">INT STRING INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT ID Name$1$ 类型 安全级别 可以站立的位置X 可以站立的位置Z 是否可以产生挂机终结者 场景怪物0 场景怪物1 场景怪物2 场景怪物3 场景怪物4 场景怪物5 场景怪物6 场景怪物7 场景怪物8 场景怪物9 场景怪物10 场景怪物11 场景怪物12 场景怪物13 场景怪物14 场景怪物15 0 洛阳 5 1 160 278 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1</pre> 修改后: <pre style="white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.7;padding:12px;background:#f5f7f8;border:1px solid #dbe3e6;">INT STRING INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT INT ID Name$1$ 类型 安全级别 可以站立的位置X 可以站立的位置Z 是否可以产生挂机终结者 场景怪物0 场景怪物1 场景怪物2 场景怪物3 场景怪物4 场景怪物5 场景怪物6 场景怪物7 场景怪物8 场景怪物9 场景怪物10 场景怪物11 场景怪物12 场景怪物13 场景怪物14 场景怪物15 0 洛阳 5 2 160 278 0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1</pre> 按第一列定位 0 号场景。样本第 4 列安全级别为 1,改为 2。只改第 4 列,保留 23 列。本片段含类型行、列名行与该行,不能覆盖整表。 安全级别影响该场景内的 PK 与惩罚判定,改完需要重启服务端才会生效;客户端侧不受影响。 == 验证与排查 == 服务端启动日志里 InitSceneAttrTable 会打印 “Load SceneAttrTbl.txt ... OK!”(失败时是 “Load SceneAttr.txt ... Failed! row=… ID=…”)。改完第 4 列后重启,进入该场景实测 PK 惩罚是否按新的安全级别生效。注意第 1 列必须唯一且小于 MAX_SCENE,否则整表加载失败。失败时恢复备份并重启。 === 第 1 列是数组下标,不是普通主键 === 场景编号必须落在 0 到 MAX_SCENE-1 且不重复;重复或越界会让 CleanUp 整表,等于全部场景属性丢失。 === 场景名只有客户端用 === 服务端加载时把 m_pszName 写成 NULL,第 2 列只被客户端 _DBC_SCENE_ATTR.szName 消费。改名字不会影响服务端任何逻辑,但两端资源要同步,否则会出现提示与实际不一致。 === 怪物槽位用 -1 表示空 === 第 8 到 23 列填 -1 的槽位不会计入 m_nMonsterDataIDCount;填 0 会被当成编号 0 的怪物照常入库,想留空必须写 -1。 == 关联与依据 == [[工程参考/配置文件/Public/LogicSceneAttr.txt|Public/LogicSceneAttr.txt]] · [[工程参考/配置文件/Public/MonsterAttrExTable.txt|Public/MonsterAttrExTable.txt]] [[工程参考/配置文件索引|其他配置及整理状态]] · [[工程参考/服务端外网设置|服务端外网设置]] · [[Lua接口/服务端函数索引|Lua 接口索引]] * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Main/GameTable.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Server/Server/GameServer/Server/Main/GameTable.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Common/TDDBC_Struct.h</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Game/DBC/GMDataBase.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">Client/Client/Game/Interface/GMInterface_Script_Tooltip.cpp</code>:实际加载、解析、字段使用或示例关联依据 * <code style="white-space:normal;overflow-wrap:anywhere;">resources/Public/Config/SceneAttr.txt</code>:实际加载、解析、字段使用或示例关联依据 本页核对 TableInit::InitSceneAttrTable 的加载路径与列索引(第 3 到 7 列、第 8 到 23 列循环)、GameTable.h 的 MAX_SCENE_ATTR_COUNT 与 MAX_SCENE_ATTR_MONSTER_COUNT=16、_SCENE_ATTR 结构,以及客户端 TDDBC_Struct.h 的 _DBC_SCENE_ATTR 与 DBC_SCENE_ATTR 注册项;未启动服务端与游戏,安全级别的实际效果需要实测。 </div> [[Category:工程参考]]
返回
工程参考/配置文件/Public/SceneAttr.txt
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
创建账号
登录
导航
首页
最近更改
随机页面
MediaWiki帮助
特殊页面
搜索
工具
链入页面
相关更改
页面信息