Перейти к основному содержимому

Tycoon

Зоопарк-тайкун: исследуйте животных, получайте пассивный доход, разводите, повышайте престиж, исследуйте и торгуйте.

Приватныеv0.1Экономика и крафт
ТребуетсяTypeWriter0.9.0-beta-177 (BTC build)Entity extensionGUI extensionVaultVehicle extensionнеобязательноPacketEventsнеобязательноRPG CoreнеобязательноTemporaryDimension extensionнеобязательноMySql extensionнеобязательноMiniPlaceholdersнеобязательно

Создано для сети BornToCraft. Это расширение описано для справки и не распространяется.

Обзор​

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, рынок игроков, контракты на животных, ежедневные и еженедельные испытания, персонал зоопарка, украшения и таблица лидеров.

Установка​

  1. Установите TypeWriter со сборкой BTC (BTC Core на Paper или Folia).
  2. Установите обязательные расширения: Entity (модели животных и фальшивые сущности) и GUI (панель управления).
  3. Установите Vault с плагином экономики. Все стоимости и награды в деньгах используют Vault.
  4. Необязательные расширения: Vehicle с PacketEvents для транспорта, RPG Core для уровня профессии зоопарка, TemporaryDimension для карты приключений (ему нужен SlimeWorldManager из BTC Core) и MySql с Redis для межсерверной таблицы лидеров и рынка. Для плейсхолдеров нужен MiniPlaceholders.
  5. Положите JAR-файл Tycoon в 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 плюс 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
Команды3
Артефакты2
Манифесты13

Устранение неполадок​

Меню открывается пустым. Шаблоны 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.

Связанные расширения​

  • BTC Sky — острова и исследования в той же сборке BTC.
  • Machine — управляемые данными машины для островов.