跳到主要内容

Profiles

每位玩家可拥有多个角色档案,各自拥有独立的背包、末影箱、经验和 TypeWriter 事实。

私有v0.2.0RPG 与成长
依赖TypeWriter0.9.0-beta-177 (BTC build)Basic (TypeWriter extension)GUI (TypeWriter extension)MySQL (TypeWriter extension)可选Party (TypeWriter extension)可选

专为 BornToCraft 服务器网络打造。此扩展仅作参考文档,不对外分发。

概览​

Profiles 让每位玩家在同一个账号上拥有多个相互独立的角色。切换档案会交换玩家的物品栏、末影箱、经验、生命值和饥饿值,同时也会交换其 TypeWriter 事实,因此任务进度、解锁内容和计数器对每个角色都是独立的。其他 BTC 扩展(例如 BTC Sky)会将各自的数据附加到当前激活的档案上。

档案通过你在网页面板中设计的菜单来创建和选择。服务器可以强制玩家在移动、建造、战斗或聊天之前先选择一个档案。当启用 MySQL 桥接时,数据存储在数据库中,这使得档案在网络的每台服务器上都可用;否则存储在文件中。

该系统与服务器的游戏模式(mysql.game-mode.current)绑定:玩家在每种游戏模式中都有各自独立的档案列表。

功能​

  • 独立的角色 — 每个档案都有自己的物品栏、盔甲、副手、末影箱、等级、经验、生命值、饥饿值和饱和度。
  • 独立的剧情状态 — TypeWriter 事实会在切换时保存,并为该档案恢复。
  • 档案菜单 — 每个档案占一个槽位的 GUI,带有用于激活、未激活、空闲和锁定槽位的模板。
  • 强制选择 — 在有档案处于激活状态之前,玩家无法移动、交互、破坏、放置、丢弃、战斗或聊天。
  • 单人与合作 — 档案以单人或合作(BTC Sky 共享岛屿)方式创建,没有合作的游戏模式会跳过该问题。
  • 限制 — 默认的最大数量,以及按权限设置的更高上限。
  • 切换保护 — 两次切换之间的冷却,以及其他扩展可以取消的事件。
  • 条目 — 用于打开菜单、创建、切换、重命名、删除和保存的动作,关于档案状态的事实,以及事件。
  • 跨服务器 — 档案及其数据通过 MySQL 桥接共享。
  • 占位符 — 名称、id、数量、上限,以及用于菜单和 HUD 的每个档案的详细信息。

安装​

  1. 安装负责绘制菜单的 GUI 扩展。Basic 扩展被声明为依赖项。
  2. 推荐:安装 MySQL 扩展并启用它(mysql.enabled: true)。没有它,档案会存储在文件中,并且不会在服务器之间共享。
  3. 将 Profiles 的 JAR 放入 plugins/Typewriter/extensions/ 并重启服务器。
  4. 编辑 plugins/Typewriter/mysql/config.yml 中的 profiles 部分,参见配置。即使你不使用数据库,Profiles 也会从 MySQL 扩展的配置文件中读取其设置。
  5. 创建快速上手中描述的菜单条目。

快速上手​

设置一个新玩家必须完成的档案选择:

  1. 在 TypeWriter 网页面板中,打开一个页面,添加一个 Profile Menu Config 条目。/profile 会打开找到的第一个,没有时则不执行任何操作。
  2. 设置 inventoryTitle、inventoryRows 和 guiType。在 layoutPool 中构建布局并设置 mainLayoutId。请参阅 GUI 指南。
  3. 在档案应当出现的位置,放置 buttonPrefix 为 profile_button:、buttonType 为 PROFILE_SLOT 的物品。每个标记显示一个档案,按从左到右、再从上到下的顺序读取。低于玩家上限但没有档案的槽位显示 createProfileTemplate,超出上限的槽位显示 maxProfilesTemplate。
  4. 设置 defaultMaxProfiles,并在需要时设置 permissionLimits。
  5. 创建用于创建档案的两个 GUI 页面,作为 Open GUI 条目,其 id 分别为 profile_create_chooser(单人或合作的选择),以及对于没有合作的游戏模式的 profile_create_solo。这些页面上的按钮会运行 profile create solo 或 profile create coop,对于仅限单人的模式则只运行 profile create。
  6. 在 plugins/Typewriter/mysql/config.yml 中,检查 profiles.force-profile-selection(默认 true)和 profiles.coop-supported。
  7. 发布,加入服务器,然后选择或创建一个档案。

从 NPC 和物品中使用 Switch Profile Action 或 Open Profile Menu Action。使用 Profile Switched Event 来响应由切换动作或手动输入的命令所进行的切换。

以档案作为内容门槛

在条件中使用 Profile Count Fact 和 Is Profile Active Fact 事实。例如,仅当 Can Create Profile Fact 为 1 时,才显示“创建档案”按钮。

工作原理​

切换时,扩展会检查冷却,然后触发一个可取消的切换前事件,以便游戏模式可以拒绝切换(例如在战争或小游戏期间)。然后它会捕获玩家当前的状态,将其写入存储库,清除玩家的 TypeWriter 事实和物品栏,并恢复目标档案的数据。当玩家退出时,也会保存当前激活档案的状态。

保存的内容取决于配置:物品栏和末影箱(save-inventory、save-ender-chest)以及 Minecraft 统计数据(save-statistics,由于体积较大,默认关闭)。等级、经验、生命值、饥饿值和 TypeWriter 事实始终会被保存。

由于事实会被交换,存储在事实中的任何内容都属于该档案。其他扩展的数据遵循它们在 MySQL 配置中各自的 profile-mode:per-profile 数据会为每个档案单独保存,shared 数据则由所有档案共用。

配置​

Profiles 没有自己的配置文件。它的设置位于由 MySQL 扩展创建的 plugins/Typewriter/mysql/config.yml 的 profiles 部分。

键随附文件中的默认值含义
profiles.enabledtrue开启档案系统。
profiles.max-profiles2当不存在 Profile Menu Config 条目时,每位玩家的最大档案数。条目的 defaultMaxProfiles 会取代它。
profiles.default-profile-namePrincipal自动创建的档案的名称。
profiles.save-statisticstrue按档案保存 Minecraft 统计数据。会占用大量存储空间。
profiles.save-inventorytrue按档案交换物品栏。
profiles.save-ender-chesttrue按档案交换末影箱。
profiles.require-permissionfalse创建档案需要 typewriter.profiles.create。
profiles.auto-create-defaulttrue在首次加入时创建默认档案。仅当 coop-supported 为 false 时有效。
profiles.force-profile-selectiontrue在有档案处于激活状态之前阻止玩家行动。
profiles.switch-cooldown-seconds60玩家两次切换之间的最短延迟。0 表示禁用。
profiles.coop-supportedtrue该游戏模式是否有合作档案。为 false 时,会跳过单人或合作的问题,所有档案均为单人。
profiles.creation-menu-entry-id空用于创建档案而打开的 GUI 页面的 id。为空时,支持合作则表示 profile_create_chooser,否则表示 profile_create_solo。

以上数值是随附文件中的值。当缺少某个键时,内置的后备值有所不同(max-profiles 为 5,save-statistics 为 true,auto-create-default 为 false),因此请在你的文件中保留这些键。

存储。 当 mysql.enabled: true 且 profiles.enabled: true 时,档案存储在表 typewriter_profiles 中。否则它们会作为资源存储在 profiles/<game mode>/<player uuid>.json 中。保存在旧的 Profile Storage Artifact 构件中的档案会在启动时自动复制到新的存储中。

菜单​

Profile Menu Config 条目描述菜单。点击某个档案会切换到它,Shift + 左键会删除它(除非关闭 deleteConfirmation,否则会先打开确认界面),点击空闲槽位会打开创建页面。创建档案时会在铁砧中询问名称。标题、名称和 lore 中可以使用 {profile_name}、{profile_id}、{created_date}、{last_used}、{level}、{exp}、{health}、{food}、{profile_count} 和 {max_profiles}。

带有 buttonPrefix profile_button: 的按钮物品支持 PROFILE_SLOT(一个档案),以及标记 INFO 和 CLOSE,它们分别运行 profile info 和 gui:close。

槽位可以运行 profile open、profile select <id>、profile create solo|coop 和 profile delete <id>,以点击的玩家身份执行。

语言

菜单、消息和冷却提示的默认文本为法语。请在菜单条目中更改它们。

命令​

所有命令都需要 profiles.use。别名:/profil、/profiles。

命令说明
/profile打开档案菜单。
/profile menu打开档案菜单。
/profile select <id>切换到一个档案。
/profile create solo 或 coop创建并激活一个档案;名称在铁砧中询问。不带模式时,仅适用于没有合作的游戏模式。
/profile delete <id> [confirm]删除一个未激活的档案。若 deleteConfirmation 开启,则先打开确认界面,除非带上 confirm。
/profile admin list <player>列出某位在线玩家的档案(需要 profiles.admin)。
/profile admin create <player> <name>为某位玩家创建一个单人档案。
/profile admin delete <player> <id>删除某位玩家的一个档案。
/profile admin switch <player> <id>将某位玩家切换到一个档案。
/profile admin rename <player> <id> <name>重命名一个档案。
/profile headless list、select <id>、create <name>不使用菜单来管理你自己的档案(需要 profiles.headless)。
游戏内的命令拦截

菜单监听器会在命令树之前处理玩家输入的 /profile:它支持 select、create、delete 和打开菜单,并忽略其他命令。因此,/profile admin ... 和 /profile headless ... 在控制台中,或通过 /profil 和 /profiles 别名才能可靠地工作。

权限​

权限默认授予
profiles.use所有人/profile 命令。
profiles.admin管理员/profile admin。
profiles.headless无人/profile headless,用于没有屏幕的客户端,例如测试机器人。
profiles.switch.bypasscooldown无人无冷却切换。
typewriter.profiles.create无人当 profiles.require-permission 为 true 时创建档案。
permissionLimits 的权限由你选择提高档案上限。取最高的上限。

占位符​

用于 MiniMessage 文本的 MiniPlaceholders 标签。引用是列表中的位置(数字,从 0 开始)或档案 id。

占位符返回
<profile_active_id>、<profile_active_name>当前激活档案的 id 和名称。
<profile_active>有档案处于激活状态时为 1。带有引用时,<profile_active:0> 表示该档案是否为当前激活的档案。
<profile_count>档案数量。
<profile_max>该玩家的最大档案数。
<profile_can_create>当玩家可以再创建一个档案时为 1。
<profile_remaining>仍可使用的档案数量。
<profile_friend_count>好友数量,没有 Friend 扩展时为 0。
<profile_enabled>系统开启时为 1。
<profile_name:ref>、<profile_id:ref>某个档案的名称和 id。
<profile_created:ref>、<profile_last_used:ref>日期,格式为 dd/MM/yyyy HH:mm。
<profile_created_timestamp:ref>、<profile_last_used_timestamp:ref>纪元毫秒数。
<profile_level:ref>、<profile_exp:ref>等级,以及以百分比表示的经验进度。
<profile_health:ref>、<profile_food:ref>已保存的生命值和饥饿等级。

条目​

20 个条目,由扩展源码生成。

动作6
事件5
事实7
构件1
清单1

故障排查​

/profile 没有任何反应。 没有 Profile Menu Config 条目。请创建并发布一个。

新玩家被冻结且无法聊天。 profiles.force-profile-selection 为 true 且没有档案处于激活状态。玩家加入后会被送到创建页面;请确保 GUI 条目 profile_create_chooser(或 profile_create_solo,或你的 creation-menu-entry-id)存在。将该选项设为 false 可禁用锁定。

“Choisissez d'abord Solo ou Coop dans le menu des profils.” 玩家在被强制选择期间尝试了某个命令。在有档案处于激活状态之前,只允许使用 /profile ... 和创建页面的命令。

“Vous devez attendre N s avant de changer à nouveau de profil.” 切换冷却正在进行。请降低 profiles.switch-cooldown-seconds,或授予 profiles.switch.bypasscooldown。

首次加入时没有创建默认档案。 auto-create-default 仅在 coop-supported 为 false 时有效。启用合作时,玩家必须选择单人或合作,并且日志会显示 "No implicit profile was created; disable the setting."

不同服务器上的档案不一致。 必须在每台使用相同数据库和游戏模式的服务器上启用 MySQL 扩展(mysql.enabled: true)。没有它,档案存储在本地文件中。如果启用了 MySQL 但缺少数据源,日志会显示 "MySQL enabled for profiles but DataSource not found. Falling back to JSON."

切换后玩家丢失物品。 请检查 save-inventory 和 save-ender-chest。当它们为 false 时,物品栏既不会被交换也不会被清除,因此物品会在各档案之间共享。

切换被拒绝并带有一条消息。 另一个扩展通过切换前事件取消了它,例如在战斗或小游戏期间。该消息来自那个扩展。

相关扩展​

  • MySQL — 存储、游戏模式以及 Profiles 所读取的设置。
  • GUI — 档案菜单的布局和视图。
  • BTC Sky — 合作岛屿以及附加到档案上的岛屿数据。
  • Party 和 Friend — 跟随当前激活档案的社交功能。