Tycoon
Обзор
Tycoon — игровой режим зоопарка. Игроки убивают мобов, чтобы открывать категории исследований, подают катализатор и используют топливный предмет, чтобы исследовать животных, а затем размещают своих животных в зоопарке, чтобы получать пассивный доход. Животные получают уровни, могут быть повышены в престиже ради постоянных бонусов, отправлены в экспедиции по таймеру, разведены, слиты, проданы на рынке игроков или переданы по контрактам.
Всё управляется данными. Каждый вид — это Animal Definition, каждая система (категории исследований, испытания, персонал, украшения, контракты, разведение, магазины) — запись manifest, а правила экономики хранятся в одной записи Tycoon Economy Config. Интерфейс игрока — единое меню, Tycoon Control Panel, макеты которого строятся в веб-панели: код лишь подставляет живые данные и привязывает клики.
Дефицитный ресурс — не деньги, а место в зоопарке. Вместимость игрока растёт с уровнем его профессии зоопарка, каждый вид занимает некоторое число мест, а доход масштабируется с этой стоимостью. Размещённых животных видит только их владелец, поэтому все игроки могут делить один мир.
Это закрытое расширение сборки BTC TypeWriter (BTC Core, Paper или Folia), документированное для справки.
Возможности
- Дерево исследований — убийства мобов открывают Research Categories; каждому животному нужны полностью заряженный катализатор и топливный предмет для финального броска.
- Место в зоопарке и размещение — виды занимают места; животные размещаются на объявленных позициях Placement Group, по одному животному на позицию.
- Пассивный доход — размещённые животные со временем приносят доход, масштабируемый редкостью, уровнем, престижем, счастьем, персоналом и украшениями, с ограниченным догоняющим начислением в оффлайне.
- Счастье — от 0 до 100, умножает доход; единственный штраф — переполненность, а кормление и украшения его повышают.
- Уровни и престиж — кривая опыта и предел уровня в конфигурации экономики; Prestige сбрасывает животное до 1 уровня ради постоянного бонуса к доходу.
- Слияние и разведение — Fusion двух животных одного вида и Breeding по рецептам со временем инкубации.
- Экспедиции — отправляйте животное на миссию по таймеру и забирайте результат при возвращении.
- Карта приключений — временное измерение, клонируемое из шаблонного мира, исследуемое чанк за чанком со шкалой усталости, где животные используются как транспорт.
- Социальная экономика — ротируемый Delivery Shop, рынок игроков, контракты на животных, ежедневные и еженедельные испытания, персонал зоопарка, украшения и таблица лидеров.
Установка
- Установите TypeWriter со сборкой BTC (BTC Core на Paper или Folia).
- Установите обязательные расширения: Entity (модели животных и фальшивые сущности) и GUI (панель управления).
- Установите Vault с плагином экономики. Все стоимости и награды в деньгах используют Vault.
- Необязательные расширения: Vehicle с PacketEvents для транспорта, RPG Core для уровня профессии зоопарка, TemporaryDimension для карты приключений (ему нужен SlimeWorldManager из BTC Core) и MySql с Redis для межсерверной таблицы лидеров и рынка. Для плейсхолдеров нужен MiniPlaceholders.
- Положите JAR-файл Tycoon в
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 плюс spacePerZooLevel за каждый уровень профессии RPG Core, указанной в zooProfessionId (уровень равен 1, если поле пусто или RPG Core отсутствует). maxPlacedPerSpecies ограничивает, сколько особей одного вида стоит одновременно. При превышении overcrowding.thresholdPercent вместимости счастье падает. Счастье меняет доход между revenueMultiplierAtZero и revenueMultiplierAtMax.
В оффлайне игрок зарабатывает не более offlineCatchup.maxHours часов со ставкой offlineCatchup.rate от онлайн-ставки, вычисляемой один раз при переподключении.
Уровни, престиж, слияние и разведение
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 отслеживают challengeType за период DAILY или WEEKLY и выплачивают rewardMoney и rewardCommands. Animal Contracts запрашивают животных по виду или категории, минимальному уровню и количеству.
Меню
Tycoon Control Panel — это меню с представлениями. Страница определяет всё, что видит игрок:
layoutPoolсодержит корневойframe(или его называетmainLayoutId). Фреймы с переменным содержимым используют id макета@view.viewsобъявляет экраны. Представление задаёт свой макет для каждого фрейма либо по соглашению об именах<viewId>_<frameId>.defaultViewId— первое открываемое представление.- Слот вкладки несёт тег
view:<viewId>; активная вкладка подсвечивается общим стилем представления. - Предметы содержимого используют
buttonTypeвидаtycoon_button:TYPEилиtycoon_button:TYPE:argument. Расширение подставляет живые данные в теги предмета и привязывает клики. - Меню открывается на представлении с целью
<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 команд сбора и посещения по умолчанию пусто (право не требуется).
Плейсхолдеры
Теги MiniPlaceholders расширения tycoon, предоставляемые через 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> | Название редкости и её цвет в hex. |
<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> | Id животного в слоте n. |
<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 меню.
Клик по категории исследований или слоту экспедиции возвращает к обзору. Id представлений в researchViewId, expeditionViewId и bestiaryViewId конфигурации меню (по умолчанию tycoon_recherches, tycoon_expeditions, tycoon_bestiaire) должны совпадать с id ваших views. Иначе движок переходит к представлению по умолчанию.
Категория никогда не открывается. trackedMobTypes сравнивается с названием типа сущности в нижнем регистре; пустой список считает всех мобов. Категорию с requiredCategory можно открыть через действие Category Unlock, только когда эта категория уже открыта.
Животное нельзя разместить. Нужна свободная позиция в Placement Group, у которой maxSpaceCost не меньше spaceCost животного, достаточно свободного места в пределах вместимости и уровень зоопарка не ниже requiredZooLevel. Не переставляйте positions на работающем сервере: id слотов выводятся из их индекса.
Стоимости и награды в деньгах ничего не делают. Они идут через Vault. Установите Vault и плагин экономики.
Карта приключений или транспорт недоступны. Им нужны расширение TemporaryDimension (с SlimeWorldManager из BTC Core) и расширение Vehicle с PacketEvents. Без Redis таблица лидеров и рынок остаются локальными для сервера.
Слияние или разведение ничего не даёт. Для слияния нужны два животных из резерва с одинаковыми уровнем и престижем не ниже fusionMinLevel; размещённые животные игнорируются. Результат вылупления определяется только когда яйцо готово, после incubationHours: тогда применяются rarityUpgradeChance и cosmeticMutationChance действия Fusion.