跳到主要内容

Tycoon

动物园大亨:研究动物、赚取被动收入、繁殖、声望、探索和交易。

私有v0.1经济与制作
依赖TypeWriter0.9.0-beta-177 (BTC build)Entity extensionGUI extensionVaultVehicle extension可选PacketEvents可选RPG Core可选TemporaryDimension extension可选MySql extension可选MiniPlaceholders可选

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

概述​

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、玩家市场、动物合约、每日和每周挑战、动物园员工、装饰和排行榜。

安装​

  1. 安装带有 BTC 构建版(Paper 或 Folia 上的 BTC Core)的 TypeWriter。
  2. 安装所需的扩展:Entity(动物模型和虚拟实体)和 GUI(控制面板)。
  3. 安装 Vault 以及一个经济插件。所有以金钱计的费用和奖励都使用 Vault。
  4. 可选扩展:用于坐骑的 Vehicle 搭配 PacketEvents,用于动物园职业等级的 RPG Core,用于探险地图的 TemporaryDimension(它需要 BTC Core 的 SlimeWorldManager),以及用于跨服务器排行榜和市场的 MySql 搭配 Redis。占位符需要 MiniPlaceholders。
  5. 将 Tycoon 的 JAR 放入 plugins/Typewriter/extensions/,然后重启服务器。

快速上手​

添加第一只动物,并让玩家研究它:

  1. 在 TypeWriter 网页面板中,打开一个 static 页面,添加一个 Tycoon Data Artifact。如果你想要玩家市场,也请添加一个 Tycoon Market Artifact。请不要更改它们的 artifactId。
  2. 添加一个 Research Category。设置 displayName、requiredMobKills,还可以选择设置 trackedMobTypes(为空表示所有怪物都计数)。
  3. 添加一个 Animal Definition。设置 entityDefinition(模型)、category(类别的 id)、rarity、spaceCost 和 baseRevenueRate。列出 acceptedCatalystItems(一个 itemId 材质名称和一个 powerValue)、catalystPowerRequired 以及 fuelItem。将新动物的 id 添加到该类别的 animals 中。
  4. 添加一个至少带有一个位置的 Tycoon Placement Group,让玩家有地方放置动物。
  5. 添加一个 Tycoon Economy Config。没有它时会使用内置的默认值。
  6. 构建界面:添加一个带有布局和视图的 Tycoon Control Panel,以及一个带有每个列表的物品模板的 Tycoon Menu Config。通过你自选的命令条目来打开该面板。
  7. 发布。玩家击杀怪物直到类别解锁,在研究界面中启动该动物的催化剂,向其投入催化剂物品,然后使用燃料物品(或者由你触发 Catalyst Activate)来尝试研究。
备注

在 Tycoon Menu Config 中留空的列表模板会渲染为一个空槽位。代码不会凭空创造任何内容。

工作原理​

研究​

击杀怪物会计入每个追踪其类型的 Research Category。达到 requiredMobKills 时,该类别就会解锁,除非 requiredCategory 尚未解锁(Category Unlock 动作同样遵循这一点)。

动物的研究分为两个阶段。首先,玩家投入催化剂物品:用 acceptedCatalystItems 中列出的物品右键点击某个实体,会增加其 powerValue。当能量达到 catalystPowerRequired 时,使用 fuelItem 会进行研究判定。概率是 successChance 乘以该稀有度的捕获权重。成功时,玩家会获得该动物;如果已经拥有该物种,则获得 alternativeRewards。无论成败,催化剂都会被消耗。右键点击操作只会对已经启动催化剂的动物起反应(例如在控制面板的研究界面中启动)。Catalyst Activate 动作则无需燃料物品,就对已充满能量的催化剂进行研究判定。

稀有度收入倍率捕获权重坐骑疲劳(秒)
COMMON1.01.0120
UNCOMMON1.50.6180
RARE2.50.25300
EPIC5.00.08480
LEGENDARY10.00.02900

动物园、空间和快乐度​

容量等于 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
命令3
构件2
清单13

故障排查​

菜单打开后是空的。 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 才会生效。

相关扩展​

  • BTC Sky — 同一 BTC 构建版上的岛屿和研究。
  • Machine — 面向岛屿的数据驱动机器。