Tycoon
Tycoon 扩展提供完整的 Zoo Tycoon 游戏模式。玩家通过击杀怪物解锁类别,在研究树中不断推进;用资源喂养催化剂,并用燃料物品触发研究尝试。已拥有的动物放置到动物园后会产生被动收入,可在临时冒险维度中作为坐骑骑乘,可培育成混种蛋,可转生以获得永久加成,还可派往限时探险。一个单一的 Control Panel 菜单——100% 数据驱动,没有任何硬编码的视觉元素——在 16 个标签页中容纳了所有系统。
功能
- Control Panel — 一个 4│1│4 布局(侧边栏标签 │ 滚动导航 │ 内容)的单一 FrameLayout 菜单,克隆自 BTCSky 模式。16 个标签页(info、bestiary、zoo、research、expeditions、mounts、shop、adventure、prestige、ranking、challenges、breeding、staff、market、contracts、decorations)共用同一窗口;内容按标签页解析,子视图(
tab:context,例如research:reptiles)沿用父标签页的高亮状态。每一处视觉效果、标题和按钮都来自 Typewriter Pages —— 代码只负责填充实时数据标签并绑定交互。 - 研究树 — 按类别划分的科技树,通过击杀怪物解锁。每种动物都需要一个催化剂(用可配置的资源物品喂养)和一个燃料物品来进行最终的激活判定。
- 被动经济 — 已放置的动物园动物会随时间产生收入。生物群系亲和度、栖息地方块、员工、装饰品和快乐值都会影响收入。重新连接时会进行离线收益结算。
- 冒险地图 — 探索一个按需从模板世界克隆出的临时维度(通过 BTC-CORE / Advanced Slime Paper)。传送到已配置的区块以发现它们;疲劳值(可被坐骑延长)会在探索过程中消耗,归零时会强制传送回起点。世界在无人时会自动卸载。
- 坐骑 — 通过 PacketEvents 拦截 STEER_VEHICLE 数据包,使用 ZQSD 控制骑乘已拥有的动物。疲劳值会随时间消耗,在冒险维度之外会恢复。
- 融合 — 由动作触发的同种融合:将玩家同一物种中等级最高的两只动物合并为一颗孵化中的蛋,并有可配置的稀有度提升与外观突变几率。
- 繁殖 — 在「繁殖」标签页中进行的配方驱动跨物种繁殖。选择两只符合条件的父母动物(浏览期间按玩家持久保存),启动与已配置配方匹配的孵化,孵化完成后领取后代。
- 转生 — 将满级动物重置为 1 级,以获得永久性收入加成。加成会随转生次数叠加。
- 配送商店 — 拥有真实排期(固定间隔如
30m/2h/1d、每日固定时间HH:MM,或作为后备的冷却时间)和加权物品池的轮换 NPC 商人。FOMO 机制——库存每次轮换都会变化。 - 探险 — 从「探险」标签页派遣符合条件的动物执行限时挂机任务(空位 → 在
expeditions:start子视图中选择动物)。雇佣探险向导可缩短时长。返回时会带回资源、经验、催化剂物品或稀有奖励动物。 - 动物等级与经验 — 每只动物都有各自的等级、经验曲线和最高等级。可通过骑乘、探险以及在动物园中放置的时长获得经验。
- 个性化 — 重命名动物、应用外观变体(基于引用的 EntityDefinitions)、装备配饰(帽子、项圈、鞍具)。
- 快乐值系统 — 动物拥有影响收入的 0–100 快乐值。匹配的生物群系、栖息地方块、喂食、员工和装饰品都能提升快乐值;过度拥挤则会降低快乐值。
- 每日/每周挑战 — 在各自独立的每日/每周周期中轮换的挑战(捕获一只动物、放置一只动物、击杀怪物、赚取收入、转生、研究一种动物)。在「挑战」标签页领取金钱和命令奖励。
- 动物园员工 — 雇佣拥有被动角色效果的员工:收入收集员(收入倍率)、饲养员(快乐值下限)、探险向导(加快探险速度)、研究员(加快研究速度)。会定期收取维护费;欠费则自动解雇。
- 跨服排行榜 — 按总收入、拥有动物数、总转生次数或已放置动物数排名(在「排行榜」标签页循环切换排序方式)。当存在
TypeWriter-MySqlExtension时,通过 Redis pub/sub 在全网同步;否则回退为仅显示本服玩家。 - 玩家市场 — 上架已拥有的动物出售,并向其他玩家(包括跨服)购买。Redis pub/sub 协议(list/unlist/buy/confirm/deny)确保挂单所属服务器对交易拥有权威控制,在拒绝或断线时向买家退款。没有 Redis 时会回退为仅限本服的市场。
- 动物交付合同 — 交出符合物种/类别、最低等级和数量要求的动物,以换取金钱 + 命令奖励。合同可以是一次性的,也可以是可重复的。
- 装饰与围栏 — 在「装饰」标签页放置真实方块作为动物园装饰,每种装饰都会带来快乐值和/或收入加成,并按玩家设有上限。移除装饰可回收该槽位。
架构
条目
- 定义 — Animal Definition:物种配置(稀有度、催化剂物品、燃料、经济、融合、坐骑属性、模型变体)。
- 清单 — Research Category:带有击杀怪物要求的科技树文件夹。Research Recipe:催化剂/燃料研究配方。Adventure Map:维度模板、区块网格、默认疲劳值。Delivery Shop:轮换商人排期与物品池。Breeding Recipe:父母物种组合 → 后代。Challenge:每日/每周目标与奖励。Staff:可雇佣角色、费用与维护成本。Animal Contract:交付要求与奖励。Decoration:可放置方块、费用与加成。Control Panel Configuration:每个标签页的动态列表槽位模板。
- 动作 — Control Panel:打开 4│1│4 菜单。Catalyst Activate:使用燃料物品尝试研究。Category Unlock:达到击杀阈值后解锁类别。Revenue Collect:收取累积的动物园收入。Animal XP:为已拥有的动物赋予经验。Fusion:同种融合为一颗孵化中的蛋。Prestige:重置满级动物以获得永久加成。Expedition Start:派遣动物执行限时任务。Customize Animal:重命名、更换外观并装备配饰。
- 产物 — Player Data:按玩家保存的动物园档案(动物、收入、研究、员工、挑战、装饰)。Market Listings:当前有效的玩家市场挂单。
快速开始
此扩展完全由数据驱动——没有 Pages 内容就不会渲染任何东西:
- 1. 构建 Control Panel 页面 — 创建一个带有
FrameLayout类型layoutPool的tycoon_menu条目:一个sidebarframe(标签页、tycoon_tab:<id>按钮)、一个navframe(滚动),以及每个标签页一个使用tycoon_button:按钮实现动态内容的<tabId>_content布局。 - 2. 配置动态模板 — 在
tycoon_menu_config中为页面使用的每个列表(图鉴条目、研究动物、排行榜行、市场挂单……)填写SlotItemConfig模板。任何留空的模板都会渲染为空槽位。 - 3. 定义内容 — 先从
animal_definition、research_category和adventure_map开始搭建核心循环,然后根据需要启用的额外系统添加tycoon_breeding_recipe、tycoon_challenge、tycoon_staff、tycoon_decoration、tycoon_animal_contract和delivery_shop。
命令
玩家
| 命令 | 说明 | Permission |
|---|---|---|
/zoo | 在 Info 标签页打开 Control Panel | 无 |
/zoo visit <player> | 传送到另一位玩家的动物园 | 无 |
/adventure | 在冒险标签页打开 Control Panel | 无 |
/mounts | 在坐骑标签页打开 Control Panel | 无 |
/collect | 手动收取累积收入 | 无 |
Admin
除 GUI 自身的内部动作外,所有 /tycoon 子命令都需要 tycoon.admin 权限。
| 命令 | 说明 | Permission |
|---|---|---|
/tycoon give <player> <animalId> | 给予玩家一只动物 | tycoon.admin |
/tycoon remove <player> <animalId> | 移除一只动物 | tycoon.admin |
/tycoon setlevel <player> <animalId> <level> | 设置动物等级 | tycoon.admin |
/tycoon info [player] | 显示玩家的 tycoon 档案 | tycoon.admin |
/tycoon reload | 强制保存所有档案 | tycoon.admin |
/tycoon spawnshop <shopId> | 强制生成一个配送商店 | tycoon.admin |
/tycoon resetfatigue [player] | 重置冒险疲劳值 | tycoon.admin |
/tycoon unlockcategory <player> <catId> | 解锁一个研究类别 | tycoon.admin |
每次点击 Control Panel 中的按钮也会通过 /tycoon <action> ...(例如 cp、list_scroll、market_buy、breed_start)路由——这些命令由菜单本身生成,任何玩家在自己的会话中都可以使用,并非用于手动调用。
占位符
前缀:%typewriter_tycoon_*%
全局统计
| 占位符 | 说明 |
|---|---|
%typewriter_tycoon_total_animals% | 拥有的动物总数 |
%typewriter_tycoon_placed_animals% | 当前已放置在动物园中的数量 |
%typewriter_tycoon_unplaced_animals% | 已拥有但未放置的数量 |
%typewriter_tycoon_total_revenue% | 历史总收入(已格式化) |
%typewriter_tycoon_total_revenue_raw% | 历史总收入(原始数值) |
%typewriter_tycoon_categories_unlocked% | 已解锁的研究类别 |
%typewriter_tycoon_categories_total% | 研究类别总数 |
%typewriter_tycoon_categories_locked% | 已锁定的研究类别 |
%typewriter_tycoon_milestones_count% | 已完成的收藏里程碑 |
%typewriter_tycoon_prestige_bonuses_count% | 当前生效的转生加成 |
%typewriter_tycoon_expeditions_active% | 进行中的探险 |
%typewriter_tycoon_expeditions_completed% | 已完成的探险(目前始终为 0) |
%typewriter_tycoon_zoo_visitors% | 动物园访客总数 |
%typewriter_tycoon_active_mount_id% | 当前选中的坐骑 ID |
%typewriter_tycoon_last_revenue_collect% | 上次收取收入的时间戳 |
按类别
| 占位符 | 说明 |
|---|---|
%typewriter_tycoon_category_<id>_unlocked% | 该类别是否已解锁 |
%typewriter_tycoon_category_<id>_mobs_killed% | 朝解锁进度已击杀的怪物数 |
%typewriter_tycoon_category_<id>_required_kills% | 解锁所需击杀数 |
%typewriter_tycoon_category_<id>_progress_percent% | 解锁进度百分比 |
%typewriter_tycoon_category_<id>_name% | 类别显示名称 |
按动物
| 占位符 | 说明 |
|---|---|
%typewriter_tycoon_animal_<id>_level% | 动物等级 |
%typewriter_tycoon_animal_<id>_owned% | 是否拥有该动物(true/false) |
%typewriter_tycoon_animal_<id>_prestige% | 转生次数 |
%typewriter_tycoon_animal_<id>_xp% | 当前经验值 |
%typewriter_tycoon_animal_<id>_rarity% | 稀有度名称 |
%typewriter_tycoon_animal_<id>_rarity_color% | 稀有度十六进制颜色 |
%typewriter_tycoon_animal_<id>_placed% | 是否已放置在动物园(true/false) |
%typewriter_tycoon_animal_<id>_custom_name% | 自定义名称 |
%typewriter_tycoon_animal_<id>_is_mountable% | 是否可骑乘(true/false) |
%typewriter_tycoon_animal_<id>_mount_speed% | 坐骑速度倍率 |
%typewriter_tycoon_animal_<id>_fatigue_capacity% | 疲劳值上限(秒) |
%typewriter_tycoon_animal_<id>_max_level% | 最高等级 |
%typewriter_tycoon_animal_<id>_revenue_rate% | 基础收入速率 |
%typewriter_tycoon_animal_<id>_fusion_level% | 融合所需最低等级 |
%typewriter_tycoon_animal_<id>_display_name% | 显示名称 |
%typewriter_tycoon_animal_<id>_catalyst_progress% | 催化剂填充百分比 |
%typewriter_tycoon_animal_<id>_catalyst_power% | 催化剂当前能量 |
%typewriter_tycoon_animal_<id>_catalyst_items% | 已捐赠物品种类数 |
已放置动物信息
| 占位符 | 说明 |
|---|---|
%typewriter_tycoon_placed_<id>_happiness% | 快乐值 |
%typewriter_tycoon_placed_<id>_biome% | 当前生物群系 |
%typewriter_tycoon_placed_<id>_world% | 世界名称 |
%typewriter_tycoon_placed_<id>_coords% | 坐标(x, y, z) |
%typewriter_tycoon_placed_<id>_chunk% | 区块(x, z) |
转生与探险
| 占位符 | 说明 |
|---|---|
%typewriter_tycoon_prestige_<id>% | 转生加成百分比 |
%typewriter_tycoon_expedition_count% | 探险总次数 |
%typewriter_tycoon_expedition_<n>_animal% | 探险槽位 N 中的动物 ID |
%typewriter_tycoon_expedition_<n>_remaining_seconds% | 距返回的剩余秒数 |
%typewriter_tycoon_expedition_<n>_remaining_minutes% | 距返回的剩余分钟数 |
%typewriter_tycoon_expedition_<n>_duration_hours% | 总时长(小时) |
%typewriter_tycoon_expedition_<n>_ready% | 是否可领取(true/false) |
权限
| Permission | 说明 |
|---|---|
tycoon.admin | 管理 tycoon 系统(所有 /tycoon 管理员子命令)。 |
依赖
| Extension | 是否必需 | 用途 |
|---|---|---|
| EntityExtension | 必需 | 用于动物模型的实体定义 |
| Typewriter-GUIExtension | 必需 | Control Panel 渲染(FrameLayout,数据驱动按钮) |
| TypeWriter-VehicleExtension | 可选 | 坐骑系统(可选,基于 PacketEvents) |
| TypeWriter-RPGCOREExtension | 可选 | 按职业等级限制捕获数量 |
| TypeWriter-TemporaryDimensionExtension | 可选 | 冒险地图维度克隆(SlimeWorldManager) |
| TypeWriter-ShopsExtension | 可选 | 经济抽象层(Vault/Points/Placeholder) |
| TypeWriter-MySqlExtension | 可选 | 用于跨服排行榜和玩家市场的 Redis pub/sub |