После разблокировки Megafarm вы перестаёте фармить одним дроном и запускаете флот. Это гайд про несколько дронов в The Farmer Was Replaced: что даёт анлок, как работает spawn_drone, и готовый паттерн, который можно вставить в скрипты тыквы, дерева или поликультуры.
Сначала разблокируйте Megafarm
Megafarm — анлок, который включает больше одного дрона. Апгрейды поднимают лимит дальше. Пока анлок не взят, spawn_drone недоступен, и любой скрипт культуры остаётся однопоточным.
Полезные функции после анлока:
spawn_drone(function, *args)— заспавнить дрона, который выполнитfunctionnum_drones()— сколько дронов живы сейчасmax_drones()— сколько разрешено одновременноwait_for(drone)— ждать завершения; вернёт return-значениеhas_finished(drone)— неблокирующая проверка
Как работает spawn_drone
Передавайте объект функции, а не вызов:
# Correct
spawn_drone(harvest_column)
# Wrong — this runs harvest_column immediately on the current drone
spawn_drone(harvest_column())
Новый дрон появляется на той же клетке, что и родитель, и сразу выполняет переданную функцию. Дополнительные аргументы после функции копируются в этот вызов. Когда функция возвращается, дрон исчезает. Дроны не сталкиваются друг с другом.
Если вы уже на лимите, spawn_drone ничего не делает и возвращает None. Безопасный паттерн:
if not spawn_drone(task):
task() # parent does the work itself
Отдельного «главного» дрона нет. Любой дрон может спавнить других, и каждый живой дрон считается в max_drones().
Код нескольких дронов: по одному столбцу
Частый паттерн Megafarm: родитель идёт на восток по ферме и спавнит по одному воркеру на столбец. Каждый воркер фармит север–юг (один проход или бесконечно).
def harvest_column():
size = get_world_size()
for i in range(size):
if can_harvest():
harvest()
move(North)
clear()
while True:
# Fill the farm with column workers
while num_drones() < max_drones():
if spawn_drone(harvest_column):
move(East)
else:
break
# Parent also works a column while the fleet runs
harvest_column()
move(East)
Замените тело harvest_column на plant / water / fertilize под нужную культуру. Для тыкв каждый дрон должен владеть фиксированным набором столбцов и держать свой список плохих клеток — дроны не делят глобальные как «обычный Python».
Синхронизация фаз через wait_for
Когда все дроны должны закончить посадку до любого сбора (слияние гигантской тыквы, сортировка кактуса и похожее), сохраняйте handles и ждите:
def plant_column():
size = get_world_size()
for i in range(size):
if get_ground_type() != Grounds.Soil:
till()
plant(Entities.Pumpkin)
move(North)
handles = []
size = get_world_size()
for x in range(size - 1):
h = spawn_drone(plant_column)
if h:
handles.append(h)
else:
plant_column()
move(East)
plant_column() # last column on the parent
for h in handles:
wait_for(h)
# Now the field is planted — patch / measure / harvest on the parent
Советы, которые экономят часы
- Двигайтесь между спавнами. Если спамить
spawn_droneбез движения, воркеры стопкуются на одной клетке. Ходите East (или делайте другую работу) между успешными спавнами. - Не делите один список плохих клеток тыквы между дронами. Дайте каждому свой сектор.
- Много мелких задач лучше одной огромной для лабиринтов и части лидерборд-культур: спавьте несколько дронов на маленьких лабиринтах вместо одного гигантского.
- Свяжите эту страницу с гайдами культур: код тыквы, код дерева, код поликультуры, код лабиринта.
FAQ
Почему spawn_drone возвращает None?
У вас уже max_drones() живых дронов, включая родителя.
Дроны делят переменные?
Считайте программу каждого дрона отдельной. Проектируйте через аргументы и return через wait_for, а не один глобальный список, в который пишут все.
Могут ли заспавненные дроны спавнить ещё?
Да. Каждый живой дрон считается в лимит.
Куда дальше?
Масштабируйте скрипты тыквы и поликультуры или откройте гайд, если ещё учите основы языка.
Связь с поликультурой и тыквой
На поликультуре несколько дронов ускоряют обход столбцов, а общий словарь запросов компаньонов можно держать аккуратно через аргументы или сектора. На тыкве важно не делить один список мёртвых клеток: у каждого дрона свой сектор и свой список. Megafarm не отменяет правила культуры — он только параллелит работу.
Если вы только открыли несколько дронов, начните с простого столбцового сбора сена или дерева, убедитесь что spawn_drone и лимит понятны, затем переносите паттерн в более сложные скрипты.