Tycoon
概述
Tycoon 是一个动物园游戏模式。玩家通过击杀怪物来解锁研究类别,投入催化剂并使用燃料物品来研究动物,然后把动物放进自己的动物园以获得被动收入。动物会升级,可以通过转生(prestige)获得永久加成,可以被派去执行限时远征,可以繁殖、融合,可以在玩家市场上交易,或者上交以完成合约。
一切都是数据驱动的。每个物种是一个 Animal Definition,每个系统(研究类别、挑战、员工、装饰、合约、繁殖、商店)都是一个 manifest 条目,经济规则则位于一个 Tycoon Economy Config 中。玩家界面是单一的菜单 Tycoon Control Panel,其布局在网页面板中构建:代码只负责填入实时数据并附加点击行为。
稀缺的资源是动物园空间,而不是金钱。玩家的容量会随其动物园职业等级增长,每个物种需要占用一定数量的空间,收入则随该占用量而增长。已放置的动物只对其主人显示,因此所有玩家可以共享同一个世界。
这是 TypeWriter 的 BTC 构建版(BTC Core,Paper 或 Folia)的私有扩展,此处的文档仅供参考。
功能
- 研究树 — 击杀怪物会解锁 Research Categories;每只动物都需要一个充满能量的催化剂,以及用于最终判定的燃料物品。
- 动物园空间和放置 — 物种占用空间;动物被放置在 Placement Group 中声明的位置上,每个位置一只动物。
- 被动收入 — 已放置的动物会随时间产生收入,并按稀有度、等级、转生、快乐度、员工和装饰进行缩放,离线补算设有上限。
- 快乐度 — 0 到 100,作为收入的乘数;唯一的惩罚来自过度拥挤,喂食和装饰会提高它。
- 等级和转生 — 经验曲线和等级上限在经济配置中设定;Prestige 会把动物重置为 1 级,以换取永久的收入加成。
- 融合和繁殖 — 对两只同物种动物进行 Fusion,以及基于配方、带有孵化时间的 Breeding。
- 远征 — 派出动物执行限时的挂机任务,并在返回时领取结果。
- 探险地图 — 由模板世界克隆而来的临时维度,逐区块探索,带有疲劳值,动物可作为坐骑骑乘。
- 社交经济 — 轮换的 Delivery Shop、玩家市场、动物合约、每日和每周挑战、动物园员工、装饰和排行榜。
安装
- 安装带有 BTC 构建版(Paper 或 Folia 上的 BTC Core)的 TypeWriter。
- 安装所需的扩展:Entity(动物模型和虚拟实体)和 GUI(控制面板)。
- 安装 Vault 以及一个经济插件。所有以金钱计的费用和奖励都使用 Vault。
- 可选扩展:用于坐骑的 Vehicle 搭配 PacketEvents,用于动物园职业等级的 RPG Core,用于探险地图的 TemporaryDimension(它需要 BTC Core 的 SlimeWorldManager),以及用于跨服务器排行榜和市场的 MySql 搭配 Redis。占位符需要 MiniPlaceholders。
- 将 Tycoon 的 JAR 放入
plugins/Typewriter/extensions/,然后重启服务器。
快速上手
添加第一只动物,并让玩家研究它:
- 在 TypeWriter 网页面板中,打开一个 static 页面,添加一个 Tycoon Data Artifact。如果你想要玩家市场,也请添加一个 Tycoon Market Artifact。请不要更改它们的
artifactId。 - 添加一个 Research Category。设置
displayName、requiredMobKills,还可以选择设置trackedMobTypes(为空表示所有怪物都计数)。 - 添加一个 Animal Definition。设置
entityDefinition(模型)、category(类别的 id)、rarity、spaceCost和baseRevenueRate。列出acceptedCatalystItems(一个itemId材质名称和一个powerValue)、catalystPowerRequired以及fuelItem。将新动物的 id 添加到该类别的animals中。 - 添加一个至少带有一个位置的 Tycoon Placement Group,让玩家有地方放置动物。
- 添加一个 Tycoon Economy Config。没有它时会使用内置的默认值。
- 构建界面:添加一个带有布局和视图的 Tycoon Control Panel,以及一个带有每个列表的物品模板的 Tycoon Menu Config。通过你自选的命令条目来打开该面板。
- 发布。玩家击杀怪物直到类别解锁,在研究界面中启动该动物的催化剂,向其投入催化剂物品,然后使用燃料物品(或者由你触发 Catalyst Activate)来尝试研究。
在 Tycoon Menu Config 中留空的列表模板会渲染为一个空槽位。代码不会凭空创造任何内容。
工作原理
研究
击杀怪物会计入每个追踪其类型的 Research Category。达到 requiredMobKills 时,该类别就会解锁,除非 requiredCategory 尚未解锁(Category Unlock 动作同样遵循这一点)。
动物的研究分为两个阶段。首先,玩家投入催化剂物品:用 acceptedCatalystItems 中列出的物品右键点击某个实体,会增加其 powerValue。当能量达到 catalystPowerRequired 时,使用 fuelItem 会进行研究判定。概率是 successChance 乘以该稀有度的捕获权重。成功时,玩家会获得该动物;如果已经拥有该物种,则获得 alternativeRewards。无论成败,催化剂都会被消耗。右键点击操作只会对已经启动催化剂的动物起反应(例如在控制面板的研究界面中启动)。Catalyst Activate 动作则无需燃料物品,就对已充满能量的催化剂进行研究判定。
| 稀有度 | 收入倍率 | 捕获权重 | 坐骑疲劳(秒) |
|---|---|---|---|
COMMON | 1.0 | 1.0 | 120 |
UNCOMMON | 1.5 | 0.6 | 180 |
RARE | 2.5 | 0.25 | 300 |
EPIC | 5.0 | 0.08 | 480 |
LEGENDARY | 10.0 | 0.02 | 900 |
动物园、空间和快乐度
容量等于 baseSpaceCapacity 加上 zooProfessionId 所指定的 RPG Core 职业的每一级对应的 spacePerZooLevel(当为空或没有 RPG Core 时,等级为 1)。maxPlacedPerSpecies 限制同一物种同时站立的个体数量。超过容量的 overcrowding.thresholdPercent 之后,快乐度会下降。快乐度会让收入在 revenueMultiplierAtZero 和 revenueMultiplierAtMax 之间变化。
离线时,玩家最多会按在线收入的 offlineCatchup.rate 比率获得 offlineCatchup.maxHours 小时的收入,并在其重新连接时一次性计算。
等级、转生、融合和繁殖
maxAnimalLevel 和 xpCurve 设定了等级。在最高等级时,Prestige 会把一个个体重置为 1 级,并为其收入增加 prestigeRevenueBonus,最多到 maxPrestige。
Fusion 会取同一物种、等级和转生次数相同(至少为 fusionMinLevel)的两只备用动物,将它们移除并开始孵化。Breeding 会把两个亲本物种(顺序不限)与一个带有 requiredParentLevel、incubationSeconds、cost 和 consumesParents 的配方相匹配。 蛋孵化时,该动作的 rarityUpgradeChance 可能使稀有度提升一级,cosmeticMutationChance 可能赋予突变皮肤。
员工、装饰和挑战
Staff 成员有一个 role(REVENUE_COLLECTOR、CARETAKER、EXPEDITION_GUIDE、RESEARCHER)、一个 hireCost 和每小时的 upkeepPerHour;无法支付薪水的成员会被解雇。Decorations 提供 happinessBonus 和 revenueBonus,并受 maxPerPlayer 限制。Challenges 在 DAILY 或 WEEKLY 周期内追踪某个 challengeType,并发放 rewardMoney 和 rewardCommands。Animal Contracts 会按物种或类别、最低等级和数量来索取动物。
菜单
Tycoon Control Panel 是带有多个视图的菜单。玩家所见的一切都由该页面定义:
layoutPool包含一个根frame(或由mainLayoutId指定它)。内容可变的框架使用布局 id@view。views声明各个界面。视图按框架给出其布局,或按命名约定<viewId>_<frameId>。defaultViewId是最先打开的视图。- 标签页槽位带有标签
view:<viewId>;当前标签页由共享的视图样式高亮显示。 - 内容物品使用
tycoon_button:TYPE或tycoon_button:TYPE:argument形式的buttonType。扩展会把实时数据填入物品的标签中,并附加点击行为。 - 菜单会以目标
<viewId>或<viewId>:<argument>(例如一个研究类别 id)在某个视图上打开。
按界面划分的按钮类型:
| 界面 | 按钮类型 |
|---|---|
| 动物园和图鉴 | ZOO_INFO, BESTIARY_ENTRY, BESTIARY_SPECIES_ENTRY, SPECIES_MANAGE_INFO, PLACEMENT_SLOT_ENTRY, SPECIES_LEVEL_ENTRY, BESTIARY_PANEL_ENTRY, PLACED_ENTRY |
| 研究 | RESEARCH_CATEGORY_ENTRY, RESEARCH_ANIMAL_ENTRY, RESEARCH_CATEGORY |
| 远征和坐骑 | EXPEDITION_ENTRY, EXPEDITION_START_ENTRY, MOUNT_ENTRY |
| 探险 | ADVENTURE_CHUNK_ENTRY, ADVENTURE_INFO |
| 经济 | SHOP_ENTRY, PRESTIGE_ENTRY, MARKET_ENTRY, MARKET_MINE_ENTRY, MARKET_SELL_ENTRY, ANIMAL_CONTRACT_ENTRY, STAFF_ENTRY, STAFF_INFO |
| 社交 | RANKING_SORT, RANKING_ENTRY, CHALLENGE_ENTRY |
| 繁殖和装饰 | BREEDING_PARENT_ENTRY, BREEDING_EGG_ENTRY, BREEDING_INFO, DECORATION_ENTRY, DECORATION_PLACED_ENTRY |
| 列表 | LIST_PAGER:<listId>[:<pageSize>](仅当列表无法在一个屏幕内显示时才会出现) |
基于顺序的条目(_ENTRY 类型)会按槽位的顺序,为每个带标签的槽位渲染一个元素。每个列表的物品模板及其标签(例如 {animal_name} 或 {remaining_time})来自 Tycoon Menu Config。同一个条目还会指定由研究类别(researchViewId)、远征槽位(expeditionViewId)和图鉴(bestiaryViewId)所打开的视图。
命令
命令是条目,因此它们的名称和权限都在面板中编辑。每个命令都是通过把条目放置在页面上来注册的。
| 命令 | 说明 |
|---|---|
/tycoonadmin give <player> <animal> | 给予一位在线玩家一只动物。需要 permission 中设置的权限(默认为 tycoon.admin)。 |
/tycoonadmin remove <player> <animal> | 移除某个物种中最不高级的一个个体。 |
/tycoonadmin setlevel <player> <animal> <level> | 设置某个物种每一个个体的等级,限制在 maxAnimalLevel 之内。 |
/tycoonadmin unlockcategory <player> <category> | 解锁一个研究类别。 |
/tycoonadmin info [player] | 显示一位玩家的动物园档案。 |
/tycoonadmin resetfatigue [player] | 重置探险疲劳。 |
/tycoonadmin spawnshop <shop> | 立即生成一个配送商店商人。 |
/tycoonadmin save | 将所有 Tycoon 数据写入磁盘。 |
/collecter | 领取累计的收入。除非设置了 permission,否则对所有人开放。 |
/visiter <player> | 传送到另一位玩家的位置,参观其动物园。除非设置了 permission,否则对所有人开放。 |
上面的名称是 Tycoon Admin Command、Tycoon Collect Command 和 Tycoon Visit Command 的默认值;更改 commandName 即可重命名它们。打开菜单的命令(例如 /zoo)不属于本扩展:请使用 Basic 扩展的命令条目来创建,由它触发 Control Panel。
权限
| 权限 | 授予 |
|---|---|
tycoon.admin | 整个 /tycoonadmin 命令树。这是管理命令的 permission 字段的默认值,可以在那里更改。 |
收集命令和参观命令的 permission 字段默认为空(无需权限)。
占位符
tycoon expansion 的 MiniPlaceholders 标签,通过 TypeWriter 提供。<id> 是动物定义的 id,<cat> 是研究类别的 id,<n> 是从 0 开始的远征槽位索引。它们全部读取查看者玩家的档案。
总计
| 占位符 | 返回值 |
|---|---|
<tycoon_total_animals> | 拥有的动物数量。 |
<tycoon_total_species> | 拥有的物种数量。 |
<tycoon_placed_animals> | 放置在动物园中的动物数量。 |
<tycoon_unplaced_animals> | 备用的动物数量。 |
<tycoon_total_revenue> | 累计获得的收入,保留 2 位小数。 |
<tycoon_total_revenue_raw> | 累计获得的收入,以整数表示。 |
<tycoon_categories_unlocked>, <tycoon_categories_total>, <tycoon_categories_locked> | 已解锁、被追踪以及仍被锁定的研究类别数。 |
<tycoon_milestones_count> | 已达成的收藏里程碑数。 |
<tycoon_prestige_total> | 所有动物的转生总次数。 |
<tycoon_expeditions_active> | 进行中的远征数。 |
<tycoon_expeditions_completed> | 始终为 0。 |
<tycoon_zoo_visitors> | 动物园的访客数。 |
<tycoon_active_mount_id> | 已选中的坐骑 id,或 none。 |
<tycoon_last_revenue_collect> | 上次领取的时间(HH:mm:ss)。 |
研究类别
| 占位符 | 返回值 |
|---|---|
<tycoon_category_unlocked:cat> | 已解锁时为 true。 |
<tycoon_category_mobs_killed:cat> | 已击杀的被追踪怪物数。 |
<tycoon_category_required_kills:cat> | 解锁所需的击杀数。 |
<tycoon_category_progress_percent:cat> | 以百分比表示的进度。 |
<tycoon_category_name:cat> | 显示名称。 |
动物
| 占位符 | 返回值 |
|---|---|
<tycoon_animal_level:id>, <tycoon_animal_xp:id>, <tycoon_animal_prestige:id> | 所拥有动物的等级、经验和转生次数。 |
<tycoon_animal_owned:id>, <tycoon_animal_placed:id> | true 或 false。 |
<tycoon_animal_count:id>, <tycoon_animal_placed_count:id> | 拥有的和已放置的个体数。 |
<tycoon_animal_rarity:id>, <tycoon_animal_rarity_color:id> | 稀有度名称及其十六进制颜色。 |
<tycoon_animal_custom_name:id> | 自定义名称。 |
<tycoon_animal_display_name:id> | 定义的显示名称。 |
<tycoon_animal_is_mountable:id>, <tycoon_animal_mount_speed:id>, <tycoon_animal_fatigue_capacity:id> | 定义的坐骑设置。 |
<tycoon_animal_max_level:id> | 经济配置中的 maxAnimalLevel。 |
<tycoon_animal_space_cost:id>, <tycoon_animal_revenue_rate:id>, <tycoon_animal_fusion_level:id> | spaceCost、baseRevenueRate、fusionMinLevel。 |
<tycoon_animal_catalyst_progress:id> | 以百分比表示的催化剂充能。 |
<tycoon_animal_catalyst_power:id>, <tycoon_animal_catalyst_items:id> | 催化剂能量,以及已投入的物品类型数量。 |
<tycoon_placed_happiness:id>, <tycoon_placed_biome:id>, <tycoon_placed_world:id>, <tycoon_placed_coords:id>, <tycoon_placed_chunk:id> | 已放置动物的详细信息。 |
<tycoon_prestige_bonus:id> | 该动物的转生加成。 |
远征
| 占位符 | 返回值 |
|---|---|
<tycoon_expedition_count> | 已使用的远征槽位数。 |
<tycoon_expedition_animal:n> | 槽位 n 的动物 id。 |
<tycoon_expedition_remaining_seconds:n>, <tycoon_expedition_remaining_minutes:n> | 距返回的剩余时间。 |
<tycoon_expedition_duration_hours:n> | 以小时计的总时长。 |
<tycoon_expedition_ready:n> | 可以领取时为 true。 |
条目
27 个条目,由扩展源码生成。
动作9
- Animal XP ActionGrant XP to a player's owned animal toward its next level
- Catalyst Activate ActionUse the fuel item to attempt animal research once the catalyst is fully powered
- Category Unlock ActionUnlock a research category when the mob kill threshold is met
- Customize Animal ActionCustomize an owned animal: rename, apply skins, equip accessories
- Expedition Start ActionSend an owned animal on a timed expedition to earn loot, XP, and rare resources
- Fusion ActionFuse two animals of the same species to create an egg with inherited stats and mutation chance
- Prestige ActionPrestige a max-level animal: resets to level 1 with a permanent revenue bonus and exclusive cosmetic
- Revenue Collect ActionCollect accumulated tycoon revenue for a player
- Tycoon MenuTycoon Control Panel (menu à vues)
命令3
- Tycoon Admin CommandCommande d'administration Tycoon
- Tycoon Collect CommandCommande de collecte des revenus
- Tycoon Visit CommandCommande de visite de zoo
构件2
- Tycoon Data ArtifactCentralized persistent storage for all Tycoon data (profiles, research, expeditions)
- Tycoon Market ArtifactPersistent storage for the player auction house (market listings)
清单13
- Adventure MapConfigures an adventure map: temporary dimension template, chunk grid, spawn zone, and mount selector
- Animal DefinitionDefines a tycoon animal with research tree, catalyst mechanics, fusion, and economy stats
- Delivery ShopConfigures a rotating delivery shop: NPC spawn schedule, item pool, and FOMO rotation mechanics
- Research CategoryResearch category in the tycoon tech tree; groups animals and requires mob kills to unlock
- Tycoon Animal ContractA delivery contract rewarding handed-over animals
- Tycoon Breeding RecipeCross two animal species into a hybrid offspring egg
- Tycoon ChallengeA rotating daily/weekly zoo challenge
- Tycoon DecorationA placeable zoo decoration granting happiness/revenue bonuses
- Tycoon Economy ConfigTycoon economic rules: space, overcrowding, happiness, prestige
- Tycoon Menu ConfigTycoon Control Panel Configuration
- Tycoon Placement GroupGroupe d'emplacements de zoo
- Tycoon Research RecipeResearch Recipe
- Tycoon StaffA hireable zoo staff member with a passive role effect
故障排查
菜单打开后是空的。 Tycoon Menu Config 的模板默认是空槽位,并且 layoutPool 必须包含由 mainLayoutId 和 views 指定的布局。请在日志中查看菜单 id。
点击研究类别或远征槽位后回到了总览。 菜单配置中 researchViewId、expeditionViewId 和 bestiaryViewId 里的视图 id(默认为 tycoon_recherches、tycoon_expeditions、tycoon_bestiaire)必须与你的 views 的 id 匹配。否则引擎会回退到默认视图。
某个类别始终无法解锁。 trackedMobTypes 会与小写的实体类型名称进行比较;空列表表示所有怪物都计数。带有 requiredCategory 的类别,只有在该类别被解锁之后,才能通过 Category Unlock 动作解锁。
动物无法放置。 它需要一个位于 Placement Group 中的空闲位置,该分组的 maxSpaceCost 至少要等于该动物的 spaceCost,容量内要有足够的空闲空间,并且动物园等级至少为 requiredZooLevel。请不要在运行中的服务器上重新排列 positions:槽位 id 是由它们的索引派生的。
以金钱计的费用和奖励没有任何作用。 它们通过 Vault 处理。请安装 Vault 和一个经济插件。
探险地图或坐骑不可用。 它们需要 TemporaryDimension 扩展(搭配 BTC Core 的 SlimeWorldManager),以及搭配 PacketEvents 的 Vehicle 扩展。没有 Redis 时,排行榜和市场只会停留在本服务器上。
融合或繁殖没有任何产出。 融合需要两只等级和转生相同、且至少达到 fusionMinLevel 的储备动物;已放置的动物会被忽略。孵化结果只在蛋准备好时(即 incubationHours 之后)抽取,此时 Fusion 动作的 rarityUpgradeChance 和 cosmeticMutationChance 才会生效。