Обучалка по созданию сложного апдейта в FM20

Автор Ohrim, 22 ноября 2019, 20:13:57

« назад - далее »

Ohrim

Итак, поехали.
 
Обучалку я буду делать на примере создания апдейта Украины. В этом году правила апдейта Украины, наверное, одни из самых сложных, даже с учетом того, что я не буду делать Д5, поэтому он очень хорошо подойдёт для примера.
 
Я буду периодически писать "правила Джейсона Стейтема здорового апдейтодела", которые помогут сэкономить время и нервы.
 
Первое правило применимо не только к апдейтам, но и ко многим другим вещам в жизни - "Обязательно делайте бэкапы!". Думаю, подробно объяснять тут не нужно, просто заведите себе эту привычку. Указывайте версии, даты, какие-то особенности файла - как хотите. Главное, придерживаться какой-то системы, чтобы самому это было понятно.
 
Итак, что я имею на старте. Мне нужно:
 
1. Добавить в Украине две лиги ниже тех, что есть в игре по умолчанию.
 
2. Поправить правила обеих дефолтных лиг, чтобы привести их в соответствие с реальностью.
 
3. Реализовать расширение УПЛ в сезонах 2019/20 и 2020/21, а также Д3 и Д4 с сезона 2019/20 с соответствующими правками правил лиг. Увы, регламент на сезоны 20/21 и 21/22 мы не знаем, поэтому будем действовать по обстоятельствам (точнее, определённый план я уже составил, нужно только теперь его успешно реализовать).
 
На скриншотах я буду использовать редактор с интерфейсом на русском языке, чтобы не переключаться постоянно между языками при написании текста и потому что большая часть, полагаю, использует именно его в работе. Я работаю с англоязычным интерфейсом, потому что в нём нет ошибок и непоняток с переводом + всё-таки немного знание языка тренируется. Внимание - "Язык названий из БД" я использую только английский, чего и вам советую - во-первых, переведено на русский не всё; во-вторых, перевод устаревший (особенно это касается устаревших названий городов в Украине и иногда названий команд); в-третьих, таким образом уменьшается количество переключений языка, потому что набирать в редакторе вы всё будете на английском.
 
Итак, мы прочитали "Мануал по эдитору для чайников" (те вещи, которые были расписаны там, я постараюсь не повторять), а потом через "Библиотека - Инструменты" в Steam открыли Football Manager 2020 Editor (ну, или установили и открыли) и видим перед собой фиолетово-бирюзовое нечто.
 


   

Спойлер

 
Через "Настройки" в верхнем меню можно изменить "Язык" и "Язык названий из БД".
 
Я всегда начинаю с составления структуры лиг. И тут сразу выплывает ряд моих рекомендаций, которые могут упростить жизнь (правда, не всегда):
 
- Старайтесь по возможности держать изменения в разных файлах - структура в одном, изменения по клубам/стадионам/др. в другом, трансферы/правки СА/РА/скиллов в третьем, созданные игроки - в четвёртом. Такая структура поможет в использовании апдейта пользователями (не будет проблем с совместимостью с какими-нибудь другими трансферными апдейтами), а вам такая структура поможет обновлять только какой-то небольшой файл, а не рыться в одном общем, постоянно делая проверки правил после изменений в базе (о них позже).
 
Возникает логичный вопрос - что делать, если в базе нет нужного клуба и приходится создавать новый, чтобы перенести туда игроков? Для себя я нашёл вариант обычного переименования клубов. Я выбираю клубы из самых низших лиг, которые не будут фигурировать в играбельных лигах, не фигурируют в истории или рекордах соревнований и истории игроков. Для Украины я пришёл к варианту переименования клубов из Христианских лиг Киева и дублей клубов из Киева, которые выше Д6-Д7 никогда не залезали. Только обязательно нужно где-то хранить информацию, какой клуб на какой вы поменяли - это пригодится при переносе игроков. Еще один плюс такого подхода - облегчение установки логотипов, ведь такие клубы в паках графики обычно не присутствуют, а значит можно к своему апдейту просто приложить небольшой конфиг с файлами обновлённых логотипов. При создании же нового клуба ему присваивается новый id, который может пересекаться с id клуба, созданного в каком-нибудь другом апдейте и при использовании этих апдейтов совместно логотипы каких-то клубов будут работать некорректно, потому что ФМ сам изменит id одного из клубов.
 
С соревнованиями сложнее. Если в базе страны есть соревнования, которые можно безболезненно переименовать и использовать в другом месте, то вперёд (например, для апдейта до Д4 Украины не нужны кубки областей, в которых играют клубы из Д5 и ниже, и можно эти соревнования использовать для других целей, если нужно). Если же такой возможности нет, то без создания соревнований не обойтись.
 
- Ускоряет процесс создание сначала чистой структуры лиг, без каких-либо изменений в базе. Причиной этого является то, что изменения в правилах лиг (и в стандартных (далее - СП), и в расширенных (далее - РП)) не являются изменениями в базе игры и можно переключаться между апдейтами, в которых нет изменений базы, гораздо быстрее. Да, на быстрых компах загрузка базы занимает каких-то 15-20 секунд, но бывают ситуации, когда нужно это сделать прямо много раз (у нас такие ситуации скорее всего будут и тогда я акцентирую внимание на этом моменте).
 
- Если страна, для которой будет делаться апдейт, уже есть в игре, значит, есть шанс, что получится использовать некоторые уже прописанные для неё правила. Увы, далеко не всегда эти правила корректны, потому что часть их может быть зашита уже в самой игре и через редактор туда не получится добраться. Проще всего проверить доступные нам правила с помощью "Проверки турниров" (кнопка в верхней левой части окна редактора).
 
"Проверка турниров" - это божественный дар с небес функция для редактора от СИшников, которая раньше, вероятно, использовалась только разработчиками игры для проверки работы правил турниров. Она позволят протестировать все нужные лиги вдоль и поперёк не открывая сам ФМ и не симулируя там несколько сезонов. Эта вещь настолько ускорила создание и тестирование апдейтов, что я считаю введение этой функции одним из самых успешных решений в истории редактора. Ведь теперь я могу всего за 3 минуты просимулировать несколько сезонов апдейта до Д5 вместо нескольких часов. "Проверкой турниров" апдейтодел должен пользоваться часто и со вкусом.
 
Чтобы проверить, какие же нам правила подсунули СИшники, заходим в "Правила" -> "Добавить правило в нации", в появившемся окне выбираем "Добавить низший дивизион и кубок к существующей структуре", затем нажимаем на выпадающий список "Страна" и там в подпункте  "Текущие страны" выбираем Ukraine.
 


   

Спойлер

 
Нажимаем готово и видим, что у нас в левой нижней части окна появились "ПРАВИЛА СТРАНЫ - UKRAINE". Там хранится всё то, что записано в федолтный файл ФМа, относящийся к Украине. Многие вещи в СП (сокр. "стандартных правилах" - помним, да?) там редактировать нельзя, но нам это сейчас и не нужно. Для проверки нажимаем на "Правила" -> "Проверка правил" и видим, что всё хорошо. По крайней мере, пока ошибки не вылезли (а ведь бывало такое, что ошибки были уже на этом этапе). Тут стоит сохранить текущее состояние апдейта в отдельный файл вида "%страна% def rules", он нам еще может пригодиться.
 
Теперь нажимаем на "Проверка турниров" и в правой части окна напротив "Записей - 0" нажимаем кнопку "Добавить". В появившемся окне нажимаем на "Добавить условие" -> "Имя" и в появившемся поле вводим название интересующих нас турниров. При вводе экономьте время и пишите названия сокращённо, например вместо "Ukrainian Premier League" достаточно написать "ukr prem", чтобы появилась нужная подсказка.
 


   

Спойлер

 
Таким образом добавляем еще и "Ukrainian First League", "Ukrainian U21 Division 1" и "Ukrainian U19 Division 1" (кубки тоже можно добавить, но там зачастую правила не так нуждаются в проверке).
 
После этого нажимаем "Создать новый тест" и после создания соревнований вводим в "Перейти к дате" дату, до которой редактор просимулирует соревнования. Для примера возьмём начало следующего сезона (1.8.20), чтобы у нас были правила сразу на два первых сезона в игре.
 


   

Спойлер

 
Нажимаем "Запустить на дату", немного ждём и теперь можем проверить, что же у нас сгенерировалось. Для проверки нажимаем два раза на какой-нибудь турнир из списка, нажимаем на строку "Test" -> "Годы", выбираем нужный год (2019, например. Это год начала сезона, т.е. в нашем случае это тест сезона 2019/20), нажимаем на "Правила" и видим выпадающий список из стадий турнира (лига, плей-офф за вылет, плей-офф за выход в еврокубки). Для начала, нас интересуют правила стадии лиги (0 - (На турнирах) - ах, этот великолепный перевод).
 


   

Спойлер

 
Обычно я перед проверкой правил в редакторе просматриваю регламенты нужных мне соревнований, выделяю "ФМные особенности", т.е. моменты, которые мне нужно будет отразить в редакторе, и где-то отдельно выписываю (в Гугл-Таблицы, например). Т.о. я могу открыть свои записи и сравнить то, что выдал нам редактор, с реальностью. Сразу видно две ошибки - в реальности в этом сезоне в European Places Playoff играют команды, занявшие 5-8 места, а не 4-7, а плей-офф с командами первой лиги вообще убрали. Ну и просмотрев правила 2020-го года видно, что никакого увеличения команд не происходит. Это означает, что нам придётся править правила уже прописанных лиг, чего нельзя сделать без использования РП.
 
Осознав это, я сделал в СП играбельными Д3 и Д4, после чего перевёл апдейт в РП и спустя несколько часов выявления багов обнаружил, что не могу исправить прописанные правила так, чтобы структура работала.
 
Тут следует отдельно сказать о "милой" особенности РП. Расширенные правила дают гораздо больше возможностей, чем СП, но они гораздо более нестабильны - одна неправильно выставленная галочка или неправильно введённая цифра может вызвать крах апдейта и он просто не будет работать. Иногда даже добавление банального плей-офф между лигами в РП может привести к куче потерянного времени. Поэтому для себя я выработал следующее правило - "Прописывать всё, что можно, в СП, а потом переводить корректно работающий апдейт в РП".
 
Если я не могу нормально исправить существующие правила, то нужно создавать новые с нуля. Тут важно понимать, какие особенности нужно прописать вообще, и какие из них можно реализовать в СП.
 
С опытом вы будете понимать, что можно прописать в СП, а что нет, но для нашего апдейта я распишу это в качестве примера, тем более, нам эти данные потом пригодятся.
 
Итак, УПЛ 19/20:
 
- 12 команд в 2 круга, потом деление на две шестёрки и еще в 2 круга, напрямую вылетает одна команда (можно сделать в СП).
 
- плей-офф за выход в еврокубки между 5-8 командами (нельзя сделать в СП, сложно создать в РП, но можно скопировать из дефолтных правил).
 
УПЛ 20/21:
 
- Увеличение команд на 2 (нельзя сделать в СП, несложно сделать в РП).
 
- 14 команд, формат пока неизвестен, скорее всего вылетать опять будет одна команда напрямую (можно сделать в СП).
 
- неизвестно, будет ли плей-офф за выход в еврокубки.
 
УПЛ 21/22:
 
- Увеличение команд на 2 (нельзя сделать в СП, несложно сделать в РП).
 
- 16 команд в 2 круга, количество вылетающих и наличие плей-офф за вылет неизвестно (можно сделать в СП).
 
- неизвестно, будет ли плей-офф за выход в еврокубки.
 
Важно понимать, что-то удалять в РП всегда легче, чем что-то добавлять. Если мы сделаем в СП правила без плей-офф, то потом этот плей-офф будет тяжело добавлять в РП. Аналогично с делением на шестёрки - их сложнее реализовать в РП. Ну и стоит максимально использовать наработки СИ и при возможности копировать какие-то рабочие решения из сделанных ими лиг. Именно в таких случаях нам и понадобится многократно переключаться из одного апдейта в другой.
 
Берём всё самое сложное, что можно реализовать в СП, и получаем следующий вариант: 12 команд в 2 круга, потом деление на две шестёрки и еще в 2 круга, напрямую вылетает одна команда, еще одна играет в плей-офф с командой первой лиги. В РП мы можем делать изменения правил турнира в разные годы и путём некоторых корректировок, добавления скопированного и удаления лишнего мы построим правильную структуру изменений формата УПЛ.
 
Продолжение следует. Будет, когда накопится материал.
 
Предложения и пожелания приветствуются, но их выполнение не гарантируется)
 
Забегать по запросу вперёд по какому-либо вопросу не буду, иду по плану. Пишу то, что более-менее знаю. Если не знаю ответа на вопрос, то просто ничего не пишу (я не работал с еврокубками, международными турнирами клубов и сборных, поэтому знаний по ним у меня нет).

Ohrim

#1
 
 


По такому же принципу мы определяем то, что будем реализовывать в СП для Д2 - 16 команд в 2 круга, 1 команда вверх напрямую, 1 команда играет в плей-офф с командой УПЛ, 2 команды играют в плей-офф с командами Д3, 2 команды вылетают напрямую.
 


Для Д3 и Д4 мы будем прописывать правила с нуля, но там всё можно реализовать в СП, кроме фиксированного изменения количества команд. В Д4, кстати, состав лиг прошлогодний и нам нужно будет его поменять, но пока мы его не трогаем, чтобы не было изменений в базе. Для обычных лиг не критично, если количество команд в них будет меньше на 1-2, это без проблем правится в РП.
 


Нажимаем кнопку "Очистить" в "Проверка турниров" (иначе в редакторе будут показываться все изменения, которые произошли за время тестового прогона - команды могут быть в других лигах, с другой репутацией и т.д., что немного неудобно) и создаём в СП с нуля все нужные нам лиги и кубки, используя обучающие материалы из "Мануала для чайников".
 


Повторюсь, заполнять желательно все пункты в СП, которые можно заполнить - плей-офф, призовые, дни и время проведения игр, ТВ-трансляции, лимиты, зимние перерывы и т.д. Добавляем все дивизионы, которые будут играбельными в апдейте + 1 неиграбельный для корректного обмена командами по ходу сейва. Также добавляем кубки/суперкубки и молодёжные/юношеские чемпионаты.
 


У нас в лигах будут изменения количества команд, поэтому нужно заранее продумать, где и насколько изменится количество команд. В УПЛ количество команд по ходу игры увеличится с 12 до 16, но редактор в СП не даст нам прописать плавающее количество команд для лиги с подгруппами, потому что его смущает, что команд может быть нечётное количество. Так что, придётся пока оставить 12.
 


   

Спойлер


 
 


В Д2 всегда будет 16 команд, тут ничего не трогаем, невзирая на увеличение команд в УПЛ, потому что мы будем добирать недостающие команды из Д3 (который будет добирать недостающие команды из Д4, а тот, в свою очередь, будет добирать недостающие команды из неиграбельного Д5).
 


   

Спойлер


 
 


Д3 в текущем сезоне по 11 команд в группе, но это неудобно и мы увеличим в РП их количество со второго сезона до 12-ти, поэтому пропишем 12 в "максимальное количество команд". В поддивизионах, кстати, в СП стоит прописывать только какую-то уникальную для этой группы информацию (у нас такой нет), всё остальное стоит делать в родительском дивизионе - поддивизионы по умолчанию наследуют эту информацию.
 


   

Спойлер


 
 


В Д4 в базе у нас от 9 до 12 команд в группе, по факту - 10 или 12. Здесь мы также в РП будем увеличивать со второго сезона количество команд в группах до 12-ти, поэтому оставляем 12 в "максимальное количество команд". Все команды из Д4 в Д3 переходят через плей-офф за повышение, поэтому в "количество мест, дающих повышение" мы ставим 0.
 


   

Спойлер


 
 


Изменение количества команд также имеет отношение к созданию кубка в СП. Если в РП редактор может взять все команды из лиги без привязки к их количеству, то в СП нужно жестко указать, сколько команд нужно взять из конкретной лиги. Таким образом, нам придётся прописать в СП правильные правила кубка в первом сезоне, а правила в следующих сезонах будем править уже в РП.
 


   

Спойлер


 
 


После того, как всё внесено в СП, делаем проверку правил ("Правила" -> "Проверка правил") и, если всплывающее окно вывело нам "Текущие правила страны верны", мы готовы к переходу в РП (тут я рекомендую сделать какой-нибудь отдельный бэкап и зафиксировать момент, когда "всё было понятно и всё работало").
 


Продолжение следует.


Ohrim

#2
Итак, настал час Х - переводим апдейт в РП. Делается это через "Правила" -> "Преобразовать в расширенные правила". Соглашаемся с предупреждением о переходе в РП и видим перед собой следующее:
 


   

Спойлер

 
В первый раз всё может быть не очень понятно, но на самом деле интерфейс больше объемный, чем непонятный. Больше непонятного в том, как, что и где прописывать.
 
Сначала нужно проверить, корректно ли работает то, что мы прописали в СП, после перевода в РП. Для проверки сначала отдельно сохраняем файл с чистыми правилами в РП (иногда может пригодиться), потом нажимаем "Правила" -> "Проверка правил" -> "Все". После этого редактор просимулирует каждый турнир в апдейте в течение трёх сезонов и выдаст окно с ошибкой, в случае чего. У меня этого не произошло, значит, можно спокойно дальше работать. В верхнем левом углу, кстати, можно заметить надпись, подтверждающую успешную или не очень успешную проверку - %название апдейта% (проверено уровней дивизионов - х/х).
 
Нужно отметить, что для загрузки в игре лучше использовать апдейт, сохранённый после полной проверки правил. В ином случае при начале новой игры в стране, правила которой затрагивает апдейт, будет невозможно выбрать количество подгружаемых игровых дивизионов - всегда будет подгружаться максимальное количество, что не всегда удобно.
 
Теперь нам нужно воспользоваться плодами трудов СИшников, делавших дефолтную версию правил лиг, пусть она и с ошибками. Сделаем апдейт с дефолтными правилами лиг, переведёнными в РП. Ранее я сохранял файл "Ukraine def rules" и теперь он мне пригодится для дальнейшей работы (если не сохраняли, то на чистой базе (без апдейтов) заходим в "Правила" -> "Добавить правило в нации", в появившемся окне выбираем "Добавить низший дивизион и кубок к существующей структуре", затем нажимаем на выпадающий список "Страна" и там в подпункте  "Текущие страны" выбираем Ukraine). Я открываю этот файл, перевожу его в РП и сохраняю отдельно в "Ukraine def rules adv".
 


   

Спойлер

 
Нам очень поможет то, что в нашей базе нет изменений, ведь мы можем переключаться между "Ukraine def rules adv" и нашим апдейтом, не загружая заново базу каждый раз.
 
Наша задача на данный момент - найти в дефолтных правилах данные, которых нет в нашем апдейте и они нам нужны. Для упрощения поиска в левом нижнем углу окна редактора есть кнопка "Фильтр", нажав на которую можно выбрать пункт "Только активные поля", оставив в правой части окна только поля, в которых что-либо было прописано (логично, правда?). Главное, не забыть отключить её после переключения на наш апдейт.
 
Теперь нужно провести не очень увлекательную работу по выявлению нужных нам данных, заходя в каждый пункт каждого соревнования. Для начала можно ограничиться разделами Ukraine, Ukraine Premier League и Ukraine First League. Second League (Д3) неактивна и нам не пригодится, а кубками и молодёжными чемпионатами мы займёмся потом.
 
Каким же образом мы будем копировать нужные данные в наш апдейт? Есть два способа, причём второй появился только с ФМ20:
 
  •    Если нам нужно скопировать и вставить абсолютно все данные из какого-то пункта, то мы выделяем его в левом окне (например, Ukraine -> "Перерывы в середине сезона"), а затем нажимаем в самом верхнем меню "Редактирование" -> "Копировать". После этого загружаем апдейт, в который хотим вставить эти данные, в левом окне переходим на этот же пункт (например, Ukraine -> "Перерывы в середине сезона") и в верхнем меню нажимаем на "Редактирование" -> "Вставить". Вуаля, все данные пункта добавились в наш апдейт.
  •    Если же нам нужны не все данные из пункта, а только какая-то часть, то мы можем скопировать данные какой-то секции этого пункта, используя кнопку "Копировать" в начале этой секции. Затем находим такую же секцию в пункте нашего апдейта, активируем её с помощью галочки, если нужно, и нажимаем кнопку "Вставить". Правда, нужно учесть, что функция новая и иногда могут быть сбои. По крайней мере, я уже заметил что данные выпадающих списков месяцев копировать не получается.

Если же нужная секция пункта не обладает кнопками Копировать/Вставить, то я пользуюсь старыми-добрыми скриншотами и вношу данные вручную. Причём, складывать эти скриншоты лучше куда-то в отдельную папку, потому что иногда может быть нужно что-то в них посмотреть (я так делаю уже года 3 и каждый год бывает нужно что-то быстро в них посмотреть).
 
Я не буду расписывать что означает каждый пункт в РП, это частично сделано в мануале по расширенному редактору (хоть он уже и устарел, но основная часть данных актуальна до сих пор), остановлюсь только на неочевидных и тех, которые нам нужно будет править. Ну и лишний раз скажу, что лучше пользоваться РП с английским интерфейсом - я вроде не новичок в РП, но русский перевод некоторых пунктов даже меня сбивает с толку, хотя я вроде знаю, что имеется ввиду.
 
Глобально основные записи (те строки, под "Список" в левом нижнем окне) в РП делятся на 7 видов:
 
  •    Страна - здесь хранятся глобальные настройки проведения соревнований в стране - иерархия лиг, мин/макс количество команд в лигах, наличие и тип чемпионатов дублеров/молодежи, начало/конец сезона, правила контрактов, лимиты в лигах, правила дисквалификаций и т.д.
  •    Турнир - здесь могут быть правила какого-либо дивизиона, кубка, суперкубка, чемпионата U-21, международного турнира (как клубов, так и сборных) и т.д. Типов турниров очень много, около 50-ти.
  •    Родительский турнир - здесь прописываются правила для турниров, у которых есть дочерние лиги. В нашей случае таким типом обладают Second League (Д3, в котором две группы) и Amateur League (Д4, в котором три группы).
  •    Несколько турниров - здесь можно присвоить одно правило сразу нескольким турнирам (например, если правила в группах полностью идентичны). По идее, обе наши группы в Д3 имеют одинаковые правила и могли бы иметь этот тип, но редактор при переводе правил из СП в РП решил иначе. Что ж, оставим как есть.
  •    Континент - здесь, вероятно, могут быть прописаны правила континентальных турниров. Я с ними не работал, поэтому никогда не пользовался этим пунктом.
  •    Сборные - аналогично, никогда не пользовался.
  •    Правила сетевого состязания - аналогично, никогда не пользовался.

Начнём с раздела Страна. Первый пункт в нём также называется Страна и содержит день обновления сезона, иерархию лиг, стандартное время начала матчей, данные и предсезонных тренировках, а также запрещённые для проведения матчей даты. Здесь мы скопируем только то, что касается предсезонных тренировок и товарищеских матчей.
 
Тут есть два момента, на которых я хотел бы задержаться. 
 
Первый момент - возможно, кто-то заметил, что в иерархии лиг Д1 идёт под записью 0, а Д2 - под записью 1. Это - важная особенность РП. Как и в языках программирования, в РП первый элемент массива/объекта  - это 0, а не 1. Поэтому, если нужно прописать призовые за занятое первое место, их нужно прописывать месту 0, а Д1 имеет индекс уровня лиги 0 (причём, это правило применимо только к РП. Если посмотреть в базе, то уровень соревнования Ukrainian Premier League будет равен 1). Тем, кто не сталкивался с программированием, нужно к этому привыкнуть и поначалу из-за этого могут быть ошибки. Но обратите внимание - это правило касается только массивов/объектов, а не вообще всех значений. Т.е. если в лиге 12 команд, не нужно в "максимальное количество команд" ставить 11 - конкретно это значение не является массивом.
 
Второй момент связан с проверкой правильности работы некоторых данных и с пониманием того, для вас было непонятно реализовано в дефолтных правилах. Сейчас мы добавляем даты предсезонных тренировок и можем сразу же проверить, что и как изменилось. С помощью "Проверки турниров" мы можем посмотреть различные события в каждой лиге - создание какой-либо стадии, дату проведения тура в целом или какого-то матча в частности и т.д. В пункте "Расписание" можно не только посмотреть все даты проведения туров и плей-офф, но и даты начала предсезонных тренировок и товарищеских матчей. Вы же не хотите, чтобы команды выходили из отпуска за пару дней до начала 1-го тура лиги? Создав новую "Проверку турниров" и добавив туда, например, Д1, увидим следующую картину (нас сейчас интересуют пункты Friendlies Start Day, Training Start Day и Friendlies End Day):
 


   

Спойлер

 
После внесения в апдейт изменений из пункта Страна дефолтных правил, получаем вот такое:
 


   

Спойлер

 
Это уже больше соответствует реальности. Поизменяв значение в пункте "Максимальное количество дней перед началом товарищеских матчей перед сезоном" можно добиться небольшого изменения дат начала/окончания товарищеских матчей.
 
Продолжение следует.

Ohrim

#3

Пункт "Требуемые команды". Здесь указывается минимальное и максимальное количество команд для каждой лиги. Копировать данные из дефолтных правил нам не нужно, уберём только строки с неиграбельными дивизионами (все Ukrainian Reg Div) и кубком аматоров. Позже мы подправим строку с максимальным количеством команд в УПЛ, когда добавим расширение лиги до 16 команд.
 
Спойлер

Пункт "Турниры". Здесь можно настроить наличие определённых турниров в игре в зависимости от версии игры (FM/FMT/FMH), количества подгружённых играбельных дивизионов и существования каких-то особых турниров. Например, нет смысла создавать кубки областей (Д5), если сам уровень Д5 неиграбельный. Здесь мы не будем ничего менять, у нас нет каких-либо особых условий.
 
Спойлер

 
Пункт "Правила для резервов" я пока пропущу, на молодёжных лигах мы потом остановимся отдельно.
 
Пункт "Правила матча". В этом пункте есть подпункты с отдельными "Правилами". Каждое правило хранит в себе информацию о регистрации и использовании игроков в турнире. Правило может работать в определённой лиге, на определённых уровнях лиг (высший - 0, см. подсказку редактора) и просто существовать, при этом используясь в разных турнирах и уровнях лиг - индекс правила всё равно присваивается каждому турниру отдельно, поэтому одно и то же правило может работать, например, для Д1, Д3 и какого-нибудь кубка. Отмечу, что индекс правилу присваивается автоматически, поэтому если удалить из списка какое-нибудь ненужное правило, то индекс всех правил, находившихся ниже, станет меньше на 1 и его придётся менять во всех турнирах, использующих находившиеся ниже правила.
 
При переводе правил в РП редактор автоматически создаёт правила для каждой лиги и в принципе нам не нужно полностью копировать их из дефолтных правил. Разве что, можно подсмотреть, какие еще пункты были там использованы. Посмотрев, добавляем в наши правила пункты "Право выбора состава - Молодёжь до 21" (аналог Списка Б) и "Флаг правил для выбора номеров для игроков - Разрешить любые номера игроков". Также я убираю пункт "Максимальный размер состава - 99 человек" из "Правил выбора состава" (он всё равно прописан в "Периодах для регистрации состава" чуть выше, и его оттуда не убрать). Даты регистрации оставим соответствующими трансферным окнам. Также включим во все правила некоторые пункты, которые мы не смогли добавить в СП, но которые присутствуют в регламентах лиг Украины: "Игроки младше минимального возраста не могут участвовать во взрослых матчах" (этот возраст прописывается в другом месте, мы до него еще дойдём; по умолчанию игра прописывает его = 14 годам), "Игроки с молодёжными контрактами могут участвовать в матчах"; в "Параметрах регистрации" включим пункты "Убрать игроков, уходящих в аренду из заявки", "Игроки на правах свободных агентов могут быть зарегистрированы в любое время" и "Игроки могут быть убраны из заявки для внесения новых игроков".
 

Вообще, "Правила матча" имеют довольно много разных настроек. Например, разные лимиты можно применять к конкретным командам или к командам, вылетевшим из определённых лиг, или для команд, играющих в определённых лигах (для кубков), для разных сезонов и т.д. Рекомендую просмотреть все пункты в "Правилах матча", чтобы иметь представление о том, что и как там можно прописать. Также рекомендую после изменения каждого "Правила матча" делать проверку лиги на предмет корректной работы правила, так гораздо проще выявить возможную ошибку. Кстати, если хотите проверить правила в лиге, где есть несколько групп, то нужно в "Проверку турниров" добавлять именно группу турнира, а не только родительский турнир.
 
Ну и ненужные мне правила я пока не буду удалять, чтобы не смещался индекс - это можно сделать ближе к концу (а можно и вообще не делать, наличие неиспользуемых правил ни на что не влияет).
 

Спойлер

 
В "Проверке турниров" можем посмотреть, как на данный момент выглядят наши правила лиг.
 
Спойлер


Следующий пункт - "Дисциплинарные правила". Тут прописываются дисквалификации за получение ЖК и КК. Работают по такому же принципу, как и правила матча - для каждого правила есть отдельная запись со своим индексом.
 
Глобально у нас три вида дисциплинарных правил (делим по дисквалификациям за количество ЖК):
 
      Дисквалификация за 4-8-12-16-... ЖК (Д1-Д4, U21, U19).
   
      Дисквалификация за 3-6-9-... ЖК (Кубок Аматоров).
   
      Дисквалификация за 2-4-6-... ЖК (Кубок Украины).
   
Нюанс заключается в дисквалификациях за тяжёлые КК. Дисквалификации за тяжёлые ЖК в Д1, Кубке и Суперкубке общие (но можно играть в молодёжных чемпионатах), в Д2-Д4, U21 и U19 отдельные. Значит, придётся увеличить количество дисциплинарных правил на 1 - с дисквалификациями на все национальные соревнования и только на текущее соревнование. В апдейте с дефолтными правилами их аж 14, но из них только 3 не пустые (там, кстати, даже нашлось отдельное правило для U21/U19). Скопируем их себе и немного поправим, потому что в них есть неточности. Например, дисквалификация за 4-8-12 ЖК распространяется только на текущее соревнование (пункт "В отдельном соревновании"). Добавим правило для 3-6-9 ЖК и вот, что мы получим:
 

Спойлер

Стоит отметить, что в наших лигах пока применяется только дисциплинарное Правило 0, потому что СП не умеет создавать больше одного дисциплинарного правила, а это значит, что позже нам нужно будет прописать лигам правильные дисциплинарные правила.
 
Продолжение следует.

BarsAziat

Цитата: Ohrim от 22 ноября 2019, 20:13:57Таким образом добавляем еще и "Ukrainian First League", "Ukrainian U21 Division 1" и "Ukrainian U19 Division 1" (кубки тоже можно добавить, но там зачастую правила не так нуждаются в проверке).
   


Я просто в "добавить условие" выбираю "страна", далее пишу страну (сокращаю  вместо Кыргызстана пишу просто kgz) и там выходят все соревнования этой страны и отметив нужные нажимаю "ок", и все нужные мне соревнования быстренько добавляются! 
 
 
Цитата: Ohrim от 22 ноября 2019, 20:13:57Забегать по запросу вперёд по какому-либо вопросу не буду, иду по плану. Пишу то, что более-менее знаю. Если не знаю ответа на вопрос, то просто ничего не пишу (я не работал с еврокубками, международными турнирами клубов и сборных, поэтому знаний по ним у меня нет).
   


Там дремучий лес, Азию (редактировать ЛЧА, Кубок АФК или добавить туда Азиатский суперкубок с квалификацией из нее на КЧМ) сделать похожей на дефолт с небольшими изменениями практически нЕреальнО!  угробил многие ночи на это бесполезное дело... 
 
Даже если сделать Азию то она становиться статичной тобишь как ты создал 2 места для участия в ЛЧА из страны она так и остается на всегда... хоть 10 сезонов выигрывай все что возможно, и в финалах (ну или в полуфинале поскольку в Азии клубные контненталки разделяются на западные и восточные зоны) команды из твоей страны все эти 10 лет .... Если подскажете человека с которым по этому поводу можно проконсультироваться буду очень благодарен !  Мануал подробный, если только человек в первый раз не заходит в редактор! 

Ohrim

#5
 
В пункте "Регулярные товарищеские матчи" прописываются, как ни удивительно, регулярные товарищеские матчи. Я этот пункт трогать не буду - на мой взгляд, он не особо важен, да и точной информации о таких матчах у меня нет.
 
Пункт "Изменение соглашения" отвечает, например, за вступление в ЕС, Брэксит и т.д. У нас ничего такого в апдейте нет, поэтому тоже пропускаем.
 
Пункт "Предсезонные периоды (старая система)" мы тоже не будем трогать - есть же новая система.
 
В пункте "Сезоны (новая система)" у нас уже есть данные, любезно переведённые редактором из СП. В дефолтных правилах там стоят разные данные для Д1 и Д2-..., но я так делать сейчас не буду, потому что даты начала/окончания лиг в Д1-Д3 не сильно отличаются, а календарь я всё же предпочитаю более-менее синхронизировать, потому что так выплывает меньше ошибок. Правда, календарь Д4, наверное, придётся подвинуть по сравнению с реальностью, потому что там плей-офф довольно поздно заканчивается и из-за этого сезон может вовремя не закончиться. Но с этим мы еще поработаем, когда доберёмся до Д4.
 
Вообще, я стараюсь выносить в какое-то отдельное место реальные даты проведения туров в разных лигах и кубках, причём сразу заполняю данные по двум сезонам - сезону, который начинается в чётные годы, и сезону, который начинается в нечётные. Я не сразу пришёл к такому подходу и кому-то он может не подойти из-за своей тщательности, но я со временем убедился в его эффективности при выставлении точных дат проведения туров. Мой вариант обычно выглядит примерно так:
 

Спойлер


А пока для начала мы подвинем дату окончания товарищеских матчей ближе к началу чемпионатов, увеличив дату начала матчей сезона в пункте "Сезоны (новая система)" и "максимальное количество дней перед началом товарищеских матчей перед сезоном" в пункте "Страна". 
 
В годы проведения финальной части ЧМ или ЧЕ УЕФА рекомендует пораньше заканчивать национальные чемпионаты. В Украине в таком случае обычно смещали чемпионат на неделю раньше, но в этом году почему-то решили не только закончить на неделю раньше, но и начать на неделю позже. Ну, будем считать, что так и надо. РП дают нам возможность не только прописать даты начала/окончания сезона в конкретные годы, но прописать, с какой периодичностью они будут использоваться. Для тех дат, что у нас уже прописаны в "Сезонах" мы можем добавить в пункт "Год" год начала действия этих дат (2019 для сезона 2019/20) и указать в пункте "Интервал" интервал, через который будет происходит использование этих дат. Поставив в "Интервал" значение 2, мы укажем игре, что указанный диапазон дат нужно использовать каждый второй год, начиная с 2019-го (т.е. в сезонах 2019/20, 2021/22, 2023/25 и т.д.). Этот принцип, кстати, действует не только для дат сезона, но и для целых турниров, только прописывается это всё в настройках конкретного турнира.
 
Для чётных сезонов мы с помощью кнопки "Дублировать" продублируем нашу строку с диапазоном дат, изменим даты начала и окончания сезона, а также изменим год начала действия правила на 2020. Т.о. мы создали расписание действия наших правил: в сезоне 2019/20 будет действовать правило 1, в сезоне 2020/21 - правило 2, в сезоне 2021/22 - опять правило 1 и т.д.
 
Вот такой предварительный вариант этого пункта получился у меня:
 
Спойлер


Совершенно закономерно может возникнуть вопрос - почему стоит 2000 и 2001 годы? По какой-то причине в РП базовым годом сезона является 2000, а если сезон проводится по системе (осень-весна), то заканчивается он в 2001 году. Наверное, это можно поменять, ведь в пункте "Страна" есть поле "Базовый год", но я этого никогда не делал, потому что редактор при переводе правил из СП в РП сам везде проставляет 2000 и 2001 годы и проще привыкнуть использовать в РП эти годы, чем каждый раз их менять.
 
За что отвечает следующий пункт - "Перерывы в середине сезона" - думаю, понятно из названия. Принцип заполнения здесь почти такой же, как и в "Сезонах", но добавляется еще одно свойство - "Тип перерыва в середине сезона". В нём имеется два варианта - "Период перерыва в середине сезона" и "Большой период товарищеских игр в середине сезона", но можно и ничего не выставлять (как и сделано в дефолтных правилах Украины, откуда мы себе в апдейт скопируем данные). Пытаясь понять, что какой из вариантов означает, я просмотрел правила разных стран и, увы, не увидел какой-либо особой закономерности. Во многих странах ни один из двух вариантов не выбран, в некоторых стоит "Период перерыва в середине сезона", а вот "Большой период товарищеских игр в середине сезона" я пока не встречал (но я не все страны просматривал, только штук 20). Интересный вариант сделан в Польше - там выбран "Период перерыва" и выставлены "Дни подготовки в середине сезона". Мы попробуем поступить также, а уже в самой игре проверим, проводятся ли товарищеские матчи в этот период.
 
Глядя на свои записи с календарями турниров, я заметил, что в каждой лиге зимние перерывы разные, так и пропишем. Смещение по сезонам я делать не буду, просто возьму для перерывов самые поздние даты начала и самые ранние даты окончания, дав еще пару дней запаса для возможных переносов матчей. Если заняться перфекционизмом, то можно проанализировать даты выхода клубов разных лиг из отпуска, но глобально реализма апдейту это особо не добавит, поэтому примем по умолчанию, что клубы выходят из отпуска 15-го января (это примерно соответствует реальности в большинстве случаев). В итоге получилось как-то так:
 
Спойлер

Продолжение следует.

Ohrim

#6
 
Пункт "Окна для тренировочных сборов" нам не нужен, я пока вообще не встречал стран, где бы он был активен.

Пункт "Дата начала" позволяет при начале новой игры выбрать для старта не только начало сезона, но и, например, дату первой игры команды в каком-либо турнире. Эти данные я скопирую из дефолтных правил, пока не вижу смысла что-то менять.
 
Спойлер


Пункт "Время встреч" я не использовал, потому что их можно настроить и в отдельных турнирах (при переводе правил из СП в РП редактор так и делает).
 
Пункт "Служба в армии" для нашего апдейта также неактуален. Если мне не изменяет память, это один из новых пунктов, появившихся в редакторе ФМ20.
 
А вот пункт "Трансферы" для нас очень интересен, потому что здесь прописываются довольно важные вещи. Начнём по порядку.
 
В разделе "Трансферное окно" прописываются они, родимые. Можно поставить общие трансферные окна для всех уровней лиг, можно делать отдельные для каждого уровня, менять трансферные окна в зависимости от года, отправку новостей в игре в начале и конце трансферного окна и т.д. В поле "Тип" перечислено больше 20-ти видов трансферных окон - можете посмотреть, чтобы знать, что именно можно прописать. Нас интересует "Стандартный" тип, окна мы сделаем одинаковыми для всех лиг. В Д4 их вообще-то нет, есть только периоды, в течение которых можно зарегистрировать игроков на чемпионат, но в таких случаях я не рекомендую делать какие-либо играбельные лиги без трансферных окон - можно в любой момент оказаться без половины состава, а так нормально играть просто невозможно, ИРЛ такого нет.

Еще один нюанс - если хотите, чтобы не было смещения дат трансферного окна каждый год, выбирайте "-" возле даты вместо дня недели
 
Спойлер


Раздел "Правила трансферов". Здесь довольно много настроек - минимальный/максимальный возраст заключения молодёжных контрактов, настройки перевода игроков в дубли, особенности ограничения использования арендованных игроков, правила ограничения з/п и т.д. Расписывать каждую настройку я не буду - большинство настроек достаточно понятно называются или имеют вменяемую всплывающую подсказку. Отмечу, что полностью скопировать данные из дефолтных правил у нас не получится, т.к. в нашем апдейте они уже правильнее прописаны после перевода из СП в РП. Но часть настроек мы, пожалуй, возьмём себе. Из тех, что нас интересуют, это "Плата за подписание легионера" (правда, там неправильная стоимость стоит. Ну и в Украине это плата за первую регистрацию легионера в стране, а в игре, вероятно, эта сумма будет сниматься даже при подписании легионера из украинского клуба), "Правила для вторых клубов" и "Дата проверки возраста". На скриншотах ниже видно, что в итоге я прописал в пункте "Правила трансферов"
 
Спойлер


В разделе "Правила аренды" можно прописывать ограничения на количество арендованных игроков, сроки аренды и т.д. Я скопирую этот пункт из дефолтных правил - в нём прописаны только возможные сроки окончания аренды.
 
Спойлер


Разделы "Правила получения разрешения на работу" и "Драфт" нам сейчас не пригодятся, потому что в Украине они не используются.
 
А вот раздел "Контрактные правила" мы заполним, хоть он и пуст в дефолтных правилах. В этом разделе можно установить правила для длительности контрактов (как минимальной, так и максимальной), недельной з/п по молодёжному контракту и т.д. Мы пропишем ограничение на длительность контрактов для игроков до 16 и до 19 лет, но сделать полностью так, как в жизни у нас, увы, не получится. Согласно регламенту, это ограничение действует только на игроков с неполным контрактом, но в редакторе так опции нет, поэтому попробуем прописать ограничение на всех игроков.
 
Спойлер

На этом мы закрыли пункт "Трансферы", да и раздел "Страна" в целом, потому что в пункте "Вспомогательные правила" для конкретного апдейта нет ничего нужного. Но на досуге можете посмотреть, что там есть - может кому-то что-то пригодится (для своих апдейтов я этим пунктом пока ни разу не пользовался). На очереди у нас работа над первым из турниров (и самым сложным) - УПЛ.
 
Продолжение следует.

Ohrim

 
 

 


В разделе турнира есть довольно много пунктов и подпунктов, я не буду рассматривать их все, потому что многие я ни разу не использовал и в апдейте Украины они не понадобятся.
 


Пункт "Общие". Здесь указывается тип турнира (как я уже писал, там больше 50-ти вариантов); уровень лиги; год начала/окончания действия; особые условия, при которых будет срабатывать это правило турнира (например, если количество команд в лиге от 12 до 16); месяцы старта/окончания турнира; индексы правила состава и дисциплинарного правила и т.д. Я не буду полностью копировать данные из дефолтных правил, возьму только недостающую информацию (действие правила, если количество вышедших в еврокубки команд от 4 до 6 и пару правил ТВ-дат).
 


   

Спойлер

 
Пункт "Стадии". Здесь прописывается основная часть правил турнира. Каждая стадия - это один подпункт с отдельным индексом (по стандарту первый - 0, но можно прописывать и свой порядок), стадии могут взаимодействовать между собой. В нашем случае УПЛ имеет 5 стадий:
 


0. Стадия лиги, которая после окончания делится на две группы. Именно по итогам этой стадии определяется чемпион, вылетевшая команда и участник плей-офф.
 
1. Стадия группы 1, которая активизируется после окончания стадии 0. Эта стадия является скрытой, первый тур в ней имеет номер 22 (т.е. фактически 23, т.к. первый - 0, не забываем), а все результаты из этой стадии заносятся в стадию 0 (т.о. мы в игре не увидим эту стадию отдельно). 
 


2. Стадия группы 2, в которой все основные настройки идентичны стадии 1.
 


3. Стадия плей-офф за вылет из УПЛ с участием команды Д2.
 


4. Стадия плей-офф за выход в еврокубки.
 
В нашем апдейте пока нет 4-й стадии, т.к. редактор в СП не может создать плей-офф за выход в еврокубки, и нам нужно скопировать эту стадию из дефолтных правил, когда мы обработаем 4 предыдущих.
 


Подпункт "Общие" пункта "Стадии". Здесь прописывается индекс стадии, её идентификатор (можно обращаться к стадии не только по индексу, но и по идентификатору), тип, название (например, групповой этап, плей-офф за повышение и т.д., выбираем из имеющихся в базе названий), количество команд, сортировка команд и разные настройки вроде сброса ЖК при старте этой стадии. Очень многие пункты я не использовал, поэтому расписать их не смогу. У нас ничего такого особенного прописано не будет, данные полностью совпали с дефолтными правилами.
 


   

Спойлер

 
Подпункт "Требования" для этой стадии нам не нужен, мы его будем использовать в других. С помощью этого пункта можно проконтролировать, чтобы стадия не началась раньше, чем нужно (т.е. не раньше окончания какой-то стадии этого или какого-нибудь другого турнира).
 


Подпункт "Реальные команды" мы использовать не будем - я вообще пока не встречал его использования. Но из его описания в редакторе его назначение вполне понятно - "Используется, чтобы начать турнир на данном этапе с участием команд из этого списка".
 


Подпункт "Другие турниры для добавления стадии" сейчас нам не нужен - он используется, например, для стадий плей-офф, т.к. в них квалифицируются команды из разных турниров.
 


Подпункт "Список команд" я тоже не использую.
 


Подпункт "Команды" определяет, какими командами будет наполнена стадия. Для лиги вариант самый простой - в базе к ней уже привязаны команды и мы просто берём все команды лиги. Для кубков, например, нужно прописывать, сколько команд из какой лиги и с каким посевом ты берёшь (до этого мы тоже со временем доберёмся). Ну а пока редактор всё прописал за нас, ничего менять не придётся.
 


   

Спойлер


 
 
Подпункт "Настройки лиги" содержит основные настройки стадии - количество кругов (если это лига), правила сортировки команд с одинаковыми очками, очки за победу/ничью/поражение, правила повышения/понижения/выхода в плей-офф и многое другое. Полностью заменять в нашем апдейте этот пункт дефолтными правилами мы не будем, возьмём только некоторые данные: приоритет последних туров, дополнительные матчи лиги (тут указываются настройки последующих матчей второго этапа, а редактор немного криво переводит их из СП в РП, хоть они и нормально работают), правила квалификации (как квалификацию во второй этап - хотя всё должно работать и без правила в этом разделе - так и квалификацию в плей-офф за выход в еврокубки) и "золотой матч" при равенстве очков у первого и второго места. 
 


Также я подправлю порядок встреч (в Украине он прямой - в первом туре второго круга встречаются те же команды, что и в первом туре первого круга. Бывает еще обратный, случайный, небольшой разброс, парный и т.д.); количество последних туров, матчи в которых играются одновременно, и правила "золотого матча" (забыли прописать доп. время в случае ничьей и правило замен).
 


Ну и я помню, что для плей-офф за выход в еврокубки в дефолтных правилах брались не совсем правильные команды. Этот момент мы исправим, когда в нашем апдейте уже будет нормально работать этот плей-офф.
 


   

Спойлер

 
Подпункт "Расписание лиги" мы пока пропустим, потому что его нужно править совместно с пунктом "Правила и время проведения матчей", до которого еще нужно добраться.
 


Подпункты "Информация об уровне рейтинга" и "Уровни рейтинга" я пропущу, потому что пока не особо представляю, как их использовать. В этих подпунктах по идее устанавливаются ожидания руководства в зависимости от рейтинга команды и прописываются значения этого рейтинга в зависимости от занятого места.
 


На этом мы пока закончили работу со стадией 0. Следующие две стадии будут немного попроще.
 


Продолжение следует.


Ohrim

 
 

 


Стадии 1 и 2 в редакторе отличаются друг от друга только названием и принципом, по которому в стадию отбираются команды. В стадию 1 мы берём команды с 0 по 5 включительно, в стадию 2 - с 6 по 11.
 


Данные нашего апдейта по этим стадиям практически не отличаются от дефолтных правил, мы только добавим названия стадий подпункт "Общее" и добавим в подпункт "Настройки лиги" правильный "Порядок встреч" и запрет на определение мест команд по итогам этих стадий (данные из этих стадий записываются в стадию 0, по итогам которой команды и будут получать финальные места в турнире).
 


Кроме того, в этих стадиях мы впервые используем подпункт "Требования", в котором редактор сам прописал нам, что стадия 1 и стадия 2 должны начинаться только после окончания стадии 0.
 


Ну и подпункт "Расписание лиги" мы тоже пока пропустим, как и для стадии 0.
 


   

Спойлер


Переходим к стадии 3 - плей-офф за вылет между командой Д1 и командой Д2.
 


В подпункте "Общие" мы видим, что эта стадия кубковая и здесь же нам нужно добавить небольшой нюанс регламента - обнуление дисквалификаций за перебор ЖК. Остальные данные совпадают с дефолтными правилами.
 


   

Спойлер


"Требования" к началу стадии немного изменились. Т.к. в стадии участвуют команды из двух лиг, то нам нужно, чтобы к началу этой стадии завершились сразу две стадии, одна из которых находится в другом турнире (поэтому мы для этой стадии отдельно указываем турнир. Могли бы явно прописать и для Д1, но по умолчанию редактор всё равно берёт стадию из текущего турнира, поэтому этого можно не делать). Здесь можем для перестраховки добавить условие, что должна закончиться не только стадия 0, но и стадия 2 (откуда берётся команда для плей-офф), как это сделано в дефолтных правилах. На скриншоте я специально показал два способа указания стадии - по номеру и по идентификатору.
 


   

Спойлер


А теперь мы впервые будем использовать подпункт "Другие турниры для добавления стадии", т.к., опять же, в этой стадии участвуют команды из двух турниров. Здесь ничего менять не будем.
 


   

Спойлер


Подпункт "Команды". Т.к. я делаю чуть упрощённый плей-офф "1х1", то и условия, по которым мы берём команды, несложные и редактор сделал их за нас. Если интересно, как сделан плей-офф "2х2", в котором 10-е место Д1 играет строго с 3-м местом Д2, а 11-е место Д1 - со 2-м местом Д2, то можете посмотреть в дефолтных правилах. Там ничего сверхординарного, но для опыта может быть полезно. Плей-офф "2х2" у нас будет между Д2 и Д3, но без жесткой привязки команд.
 


На втором скриншоте отдельно отмечу третью запись списка, в которой мы указываем игре, по какому принципу брать команду в плей-офф, если Д2 неиграбельна.
 


   

Спойлер


В подпункте "Значения по умолчанию для раунда" прописываются правила, значения которых не будут меняться в течение кубкового турнира, для того, чтобы их потом не прописывать в каждом раунде отдельно. Здесь редактор снова прописал всё за нас, ничего менять не будем.
 


   

Спойлер


Подпункты "Настройка раунда" и "Группировка команд из предыдущей стадии" нам не нужны, я только один раз использовал "Группировку", когда делал плей-офф с зафиксированной жеребьёвкой после групповой стадии (по типу ЧМ/ЧЕ).
 


Подпункт "Раунды" содержит в себе все кубковые стадии, один раунд - одна запись.
 


Каждая запись (в нашем случае только одна) делится на несколько пунктов, но сейчас мы используем только один. 
 


Пункт "Общие" содержит в себе основные настройки раунда - название раунда; количество принимающих в нём команд; количество команд, которые добавляются в этот раунд (фактически вступают в кубок с этого раунда); количество встреч/переигровок; правила стадионов/жеребьёвок/призовых и т.д. В дефолтных правилах прописано более-менее то же самое, что и у нас, только мы еще по их примеру явно укажем, что матчи этого раунда не являются квалификационными (не знаю, как это скажется на игре, но ведь СИшники плохого не посоветуют, правда?).
 


   

Спойлер


Пунктом "Даты" мы займёмся позже, а остальные пункты раунда я пропущу, потому что там прописываются какие-то совсем уж хитрые кубковые правила, с которыми я пока к счастью не сталкивался. Наверное, если прошерстить дефолтные правила разных стран или апдейты, то можно найти, где и как они используются, но я такой целью не задавался.
 


На этом подпункт "Раунды" закончился и мы переходим к подпункту "Меню особых условий". Это важный пункт для плей-офф, ведь именно здесь прописывается, что происходит с каждой командой после победы или поражения в каждом конкретном раунде (вылет, повышение, чемпионство, квалификация в еврокубки или какой-нибудь другой турнир, занятие определённого итогового места, ничего и т.д.). Редактор за нас уже всё прописал, я могу только немного объяснить его записи. 
 


Для каждой из команд, участвующих в плей-офф, есть два исхода событий - победа или поражение. В зависимости от того, где до этого играла команда, это ведёт к разным последствиям:
 


    [li]
       Команда из Д1 -> победа -> остаётся в Д1 (ничего не происходит).
    [/li]
    [li]
       Команда из Д1 -> поражение -> вылетает в Д2.
    [/li]
    [li]
       Команда из Д2 -> победа -> повышается в Д1.
    [/li]
    [li]
       Команда из Д2 -> поражение -> остаётся в Д2 (ничего не происходит).
    [/li]
    [/list]


    Вот это всё умница-редактор за нас уже и прописал.
     


       

    Спойлер


    В следующем посте будем добавлять плей-офф за еврокубки и, возможно, коснёмся еще нескольких пунктов турнира.
     
    Продолжение следует.


Ohrim

 
 

 


Теперь нам нужно создать еще одну стадию (плей-офф за выход в еврокубки с индексом 4) и скопировать в неё все данные из дефолтных правил.
 


Создаётся новая стадия просто - нажимаем на пункт "Стадии" и в правом окне нажимаем "Добавить". К сожалению, одним махом скопировать все данные из дефолтных правил не получится, придётся копировать-вставлять каждый пункт отдельно. Правки в стадию будем вносить уже в нашем апдейте.
 


Увы, по ходу проверки работы плей-офф в дефолтных правилах я обнаружил ошибку, из-за которой он работал неправильно. Сходу я не нашёл, как её исправить, поэтому решил посмотреть, как делали такой плей-офф в других лигах. Бывает полезно в общих чертах представлять, в каких играбельных странах в ФМе какие правила, чтобы в случае чего быстро подсмотреть. Я нашёл такой же плей-офф в Нидерландах и внес все данные по нему в свой апдейт с небольшими правками.
 


   

Спойлер


Как видно, мне пришлось залезть в два пункта, которые мы еще не рассматривали - "Правила для других стадий" и "Вспомогательные правила". Я это делал впервые, поэтому не особо много смогу про них рассказать. 
 


В "Правила для других стадий" -> "Правила континентального кубка" мы указываем, в каком порядке и откуда берутся команды для распределения в континентальных соревнованиях. Там же мы указываем номер стадии, которая является плей-офф за выход в еврокубки, т.к. только одно название стадии "European Places Playoff" не будет выводить команду в еврокубки. Кстати, именно в этом месте в дефолтных правилах и была ошибка, из-за которой плей-офф работал неправильно.
 


В "Вспомогательные правила" -> "Команды в плей-офф чемпионата Европы" мы просто указываем, какие места должны браться в плей-офф при изменении количества команд, выходящих в еврокубки из-за изменения коэффициента УЕФА. Больше команд - для плей-офф берутся места ниже.
 


Теперь мы может протестировать работу плей-офф через "Проверку турниров", но в этот раз я покажу, как можно сделать эту проверку более настраиваемой. Особенность нашей проверки будет заключаться в том, что нам нужно симулировать ситуацию, при которой Кубок выигрывает команда, занявшая место, позволяющее играть в плей-офф за выход в ЕК. Победа в Кубке имеет бОльший приоритет, поэтому теоретически эта команда не должна играть в плей-офф, т.к. она уже вышла в еврокубки. Вместо этого в плей-офф должна попасть команда, занявшая первое место вне его. Звучит сложно, но на самом деле реализуется такой тест довольно просто. Если выбрать "Проверку Турниров", то в левом нижнем окне можно увидеть небольшое меню. По умолчанию мы находимся на строке "Настройки". Нужно перейти на строку "Принудительные результаты команд" и в правом окне мы увидим простой интерфейс моделирования разных ситуаций.
 


Есть только три столбца - Команда, Турнир и Результат. В столбце Команда указывается команда, над которой будем проводить манипуляции. Во столбце Турнир - турнир (естественно, команда должна в нём участвовать). В столбце Результат указывается один из трёх возможных вариантов симуляции результатов - В, Н и П. Соответственно, В - это команда выиграет все матчи в этом турнире, Н - сыграет все матчи вничью и П - проиграет все матчи. Важной особенностью является приоритетность строк - чем выше строка, тем больший приоритет она имеет. Например, у нас есть две строки:
 


  •    


          в первой команда "А" играет в турнире "Д1" с результатом "В".
       
    [/li]


  •    


          во второй команда "Б" также играет в турнире "Д1" с результатом "В".
       
    [/li]


В таком случае редактор, вероятно, будет обрабатывать строки по очереди - сначала все соперники команды "А" по турниру "Д1" получат поражения (в т.ч. и команда "Б"), а потом поражения получат все соперники команды "Б" (но не "А"). Таким образом можно формировать хоть полное распределение мест в лиге, определять финалистов кубка и т.д. Кстати, на плей-офф турнира эти результаты распространяются автоматически.
 


Для проверки работы нашего плей-офф я прописал одной из команд победу в Кубке, а также прописал формирование верхней части турнирной таблицы набором строк.
 


   

Спойлер


 
 
Я просимулировал турниры до октября 2020-го года (чтобы точно сформировался календарь на группы еврокубков). Как видно, в Д1 команды вверху таблицы расположились именно в том порядке, как я указал.
 


   

Спойлер


 
 
Т.к. одна из команд у нас уже попала в ЛЕ через кубок, то после смещения в плей-офф должны сыграть команды, занявшие 4-7 места (помним, что кубок имеет бОльший приоритет). Но кубок выиграла команда, которая заняла 6-е место и она теперь не должна играть в плей-офф. Вместо неё в плей-офф должна попасть команда, занявшая 8-е место. Проверив команды в плей-офф, видим, что туда попали те команды, которые и должны были - вместо Karpaty Lviv, выигравших Кубок, в плей-офф участвовал FM Mariupol, занявший 8-е место.
 


   

Спойлер


 
 
Теперь проверим, попал ли в ЛЕ победитель плей-офф. Для этого прямо в окне "Команды" дважды кликнем на PFC Olexandriya, затем перейдём на "Test" -> "Встречи" -> PFC Olexandriya -> 2020. В правом окне увидим, что клуб-победитель плей-офф в следующем сезоне действительно играл в ЛЕ, что означает - наш плей-офф работает правильно.
 


   

Спойлер


 
 
Основу Д1 мы, в принципе, сделали - пришла пора сделать проверку правил для него. "Правила" -> "Проверка правил" -> Ukrainian Premier League, немного ожидания и у меня проверка прошла успешно - по крайней мере, наш Д1 не содержит каких-то критичных багов, что уже неплохо.
 
Продолжение следует.


Ohrim

#10
 
 


Сегодняшний пост будет весьма объемным и с кучей скриншотов - по-другому у меня не получилось.
 


Если кто-то обратил внимание, в пунктах "Даты" подпункта "Раунды" в плей-офф у нас есть ошибка - наш апдейт не находит записи "Playoff 0" и "Playoff 2". Не находит он их потому, что мы еще не работали над календарём, а это тоже довольно важная часть апдейта.
 


Для начала посмотрим, что у нас есть в пункте "Правила и время проведения матча". Я буду рассматривать подпункты, которые касаются нашего апдейта.
 


Пункт "Общие" содержит ряд разнообразных настроек, в основном не особо важных. Нас здесь интересуют "Индекс стадии последнего дня сезона" (какой стадией заканчивается турнир), "Проверить даты на наличие встреч" (минимальное количество дней между матчами) и "Матчи должны проводиться в дни игр сборных" (тут по названию понятна суть). Некоторые данные я скопировал из дефолтных правил, а часть добавил сам.
 


   

Спойлер


 
 
Отдельно отмечу подпункт "Встречи лиги", хоть мы его и не будем использовать. Здесь может храниться календарь игр на разные годы, в т.ч. и результаты уже сыгранных матчей (для вариантов стартовать в январе в чемпионатах, играющих по системе "осень-весна"). Но интерфейс в РП не очень удобный и я бы рекомендовал реализовывать это в СП, который поддерживает функцию импорта из текстового файла.
 


Подпункт "Даты встреч" позволяет нам свести в одно место все даты, необходимые для турнира и потом использовать их в других пунктах этого турнира. Удобство заключается в том, что если нужно изменить какую-то дату, то её можно изменить в одном месте, не выискивая в каждом пункте. Даты можно называть с помощью номера, идентификатора, названия стадии, а еще можно всё это попарно совмещать. Например, для даты тура мы можем использовать номер, а для даты первого матча плей-офф можно использовать как "Playoff + First", так и "Playoff + 0" или "Playoff + Semi-Final".
 


Начальные данные для этого пункта я скопировал из дефолтных правил. Как видим, там и обнаружились недостающие "Playoff 0" и "Playoff 2", которые теперь определились.
 


   

Спойлер

 
Кроме дат плей-офф мы видим уже прописанные даты первого тура ("0" со стартом 28 июля 2000), дату окончания турнира ("leag end", 2 июня 2001), дату начала зимнего перерыва ("wint star", 18 декабря 2000) и дату окончания зимнего перерыва ("wint end", 3 марта 2001). 
 


"wint star" и "wint end" в дефолтных правилах используются для смещения зимнего перерыва во время ЧМ-2022. Кроме того, эти даты привязаны к "Перерывам в середине сезона".
 


   

Спойлер


 
 
Смещение зимнего перерыва выставляется во "Вспомогательные правила" -> "Перемещает даты рядом с финальной частью турнира", хотя это можно делать и через "Даты встреч" (как раньше и было). Как видно из скрина ниже, это правило перезаписывает даты для "wint star" и "wint end", если ЧМ проводится зимой. Также перезаписывалась дата первого тура, но я убрал эту запись, потому что чуть позже я сделаю это через "Даты встреч".
 


   

Спойлер


Обычно я стараюсь прописывать в подпункте "Даты встреч" даты проведения всех матчей турнира, как туров, так и плей-офф, а потом использую их в турнире. Это выглядит не особо увлекательным процессом и занимает немало времени, но со временем я пришёл именно к такому решению, потому что это позволяет свести к минимуму несанкционированные смещения туров лиги, накладки матчей и т.д. Но можно добиться более-менее приемлемого результата и без строгого прописывания всех дат туров. Это уже каждый решает для себя сам.
 


В "Датах встреч", как и для "Сезоны (новая система)", можно прописывать год начала действия записи и промежуток лет, через которые эта запись снова будет действовать. Т.о. мы можем полностью прописать даты проведения туров как в чётные годы, так и в нечётные. Это стоит делать, чтобы поздние туры турнира не накладывались на подготовку к ЧМ или ЧЕ. Так что, я использую свои записи с датами проведения матчей и сделаю список туров для чётных и нечётных лет.
 


   

Спойлер

 
Но недостаточно просто создать записи в "Датах встреч", у нас большая их часть пока ни к чему не привязана. Вот теперь мы добрались до подпункта "Расписание лиги". Каждая стадия имеет своё расписание. В каждой стадии может быть разное количество записей, но нам вполне достаточно одной.
 


В пункте "Общие" мы указываем даты действия этого расписания. Можно как жёстко прописать число (как это сделал сам редактор при переводе правил из СП в РП), так и использовать запись из "Дат встреч". Чтобы сменить способ обозначения даты, нам нужно снять галочки с "Дата начала" и "Дата завершения" и поставить их на "Дата начала (из списка встреч)" и "Дата окончания (из списка встреч)". Потом в "Дата начала (из списка встреч)" выберем из выпадающего списка запись с индексом 0 (помним, про то, что первый элемент в списке имеет индекс 0), а в "Дата окончания (из списка встреч)" - с индексом 21 (в первом этапе у нас 22 тура).
 


   

Спойлер


Пункт "Игровые дни" содержит базовые дни и базовое время проведения матчей. По большей части этот пункт используется, когда календарь не прописывается жестко в "Датах встреч", а генерируется самой игрой. У нас здесь стоит запись, перешедшая из СП, можем пока её оставить, добавив ещё среду.
 


   

Спойлер


Пункт "Даты". А вот теперь мы добрались до места, где сможем привязать наши записи из "Даты встреч" к турам турнира. Ставим галочку на "Вкл", добавляем запись и в столбце "Дата встречи" выбираем из выпадающего списка все наши 22 тура по очереди, от 0 до 21 включительно. И да, редактор начинает тормозить при добавлении некоторого количества записей.
 


   

Спойлер


В пункте "Перерывы" мы можем отдельно прописать перерывы в расписании стадии турнира. Не будем ничего выдумывать и просто используем уже имеющиеся "wint star" и "wint end".
 


   

Спойлер


 
 
В пункте "Даты смещения" можно указать смещение матчей относительно базового дня. У нас базовым днём в основном является суббота, и мы могли бы указать, что один матч смещается на пятницу (т.е. на один день назад, поэтому индекс "-1"), а три - на воскресенье (т.е. на один день вперёд, поэтому индекс "1"). Ну и отдельно прописать время, в которое начнётся смещённый матч. Но я так делать не буду, потому что дни я буду смещать в "ТВ-датах", а в "Датах смещения" смещу только время матчей. С первым туром всё оказалось сложнее и его матчи пришлось смещать, потому что рядом с ним попадает ЛЕ и Суперкубок, поэтому ИРЛ он тоже проводился по этой кривой схеме.
 


   

Спойлер


 
 
 Пункт "ТВ-даты" отвечает за принцип отбора матчей для проведения ТВ-трансляций. Там же указывается тип ТВ-трансляций. Почти все данные я заполнил еще в СП, сейчас только немного подкорректировал. Ну и добавил корявый первый тур (с индексом 0).
 


   

Спойлер


 
 
Пункт "Особые ТВ-даты" касаются трансляций в особые дни, например, Рождество. Для нашего апдейта он не нужен.
 


По примерно такому же принципу заполним подпункты "Расписание лиги" для стадий 1 и 2. Только для этих стадий используем даты встреч с индексом 22-31, ну и пункт "Перерывы" не будем использовать. Я не буду мудрить с проведением матчей разных стадий в один день и просто определю, что матчи стадии 1 будут проводиться в воскресенье, а стадии 2 - в пятницу и субботу.
 


Заполнив все нужные пункты для стадии 1, я могу просто скопировать в стадию 2 "Общие", "Даты", ведь данные в них будут одинаковы для обеих стадий.
 


   

Спойлер


Для стадий 3 и 4 мне нужно только заполнить пункт "Даты" в подпункте "Раунды". Я буду использовать одинаковые даты для этих стадий - "Playoff 0" и "Playoff 1" ("Playoff 2" нам не пригодится).
 


   

Спойлер


Теперь нужно сделать "Проверку турниров" и посмотреть, как работает наш календарь УПЛ. Если зайти в соревнование и перейти на "Test" -> "Годы" -> "2019" -> "Встречи", то можем увидеть, когда и какой матч будет проводиться. В принципе, вышло более-менее то, что нужно. Есть небольшие нюансы, ведь некоторые матчи некоторых туров не на 100% проходят в нужные дни, но смещения получились минимальными и я в таких случаях просто оставляю, как есть, потому иначе ошибку можно долго и нужно искать и так и не найти - РП всё же очень привередливая штука. Ну и календарь 2020-го года пока выглядит очень криво, но мы его еще будем править, когда приступим к изменению формата УПЛ.
 


   

Спойлер


Продолжение следует.
 


 
 
Ниже влез предыдущий скриншот и убрать его почему-то не получается - не обращайте внимания.
 


   

Спойлер

 
 

Ohrim

 
 

 


Теперь займёмся раздачей призовых и денег за трансляции.
 


Если призовые не были прописаны в СП, то можно добавить их прямо в РП. Для этого в стадии 0 (всё же она у нас является основной) перейдём в "Настройки лиги" и там найдём раздел "Призовые деньги". В этом разделе можно прописать призовые за конкретные места, добавляя записи с суммой и местом (первое место имеет индекс 0). Получится что-то подобное:
 


   

Спойлер


 
 
Теперь добавим деньги за ТВ-трансляции. Есть разные варианты - распределение денег на старте сезона, выплаты за каждый матч и т.д. В дефолтных правилах присутствуют только выплаты Динамо и Шахтеру на старте сезона. Мы добавим выплаты и остальным командам, а также поставим галочку на "Сделки на права от телетрансляций, заключённые клубами в частном порядке, перекрывают турнирные права на телетрансляции".
 


   

Спойлер


 
 
В принципе, из того, что нам осталось сделать в предварительной версии Д1, остались только правила стадионов и VAR. Первый пункт так и называется - "Правила стадионов". Нас интересует только подпункт "Требования к стадиону". Мы добавим правило в 5000 сидячих мест из дефолтных правил, а также добавим обязательное наличие травяного покрытия и обогрева.
 


   

Спойлер


 
 
VAR добавляется в "Правила и время проведения матчей" -> "Правила видеоповторов для матча". Делаю это впервые, поэтому мог что-то не учесть, но получилось как-то так.
 


   

Спойлер


 
 
Теперь приступаем к работе над турниром Д2. Он гораздо проще, тем более, что основные моменты были прописаны мной в СП и теперь только осталось немного "причесать" правила.
 


Для Д2 и Д3 я не буду прописывать каждый тур и не буду реализовывать смещение старта турнира на неделю в чётные и нечётные сезоны - для низших лиг пересечение с матчами сборных не критично, тем более у нас будут прописаны переносы матчей при вызове большого количества игроков в сборные. Так что, я добавлю в "Даты встреч" только даты первого и последнего тура, начала и окончания зимнего перерыва, а также даты матчей плей-офф.
 


   

Спойлер


 
 
В пункте "Игроки" установим минимальное количество игроков, вызванных в сборные, для переноса матча (в УПЛ такого правила нет, потому что команды всё равно не играют во время матчей сборных).
 


   

Спойлер


 
 
Больше ничего принципиально нового по сравнению с Д1 я не использовал, поэтому не вижу смысла тратить время на то, чтобы сделать и залить сюда кучу скринов.
 


С группами Д3, в общем-то, такая же ситуация, как и с Д2, но теперь я вообще не использовал ничего нового, кроме добавления матча за чемпионство между победителями групп. Правда, я что-то сделал не так и этот матч не отображается в истории соревнования, но решение этой ошибки я пока не нашёл, поэтому оставил как есть, она не настолько значительна. Но если кто-то подскажет способ решить эту проблему - буду благодарен.
 


   

Спойлер


Теперь самое время перейти к Д4 (но там тоже ничего такого не будет) и кубкам.
 


Продолжение следует.


Ohrim

 
 

 


Забыл об одном нюансе в Д3 - региональных дивизионах. Их же мы применим и в Д4. Если вкратце, то если команды распределяются в группы турнира по географическому принципу, то можно прописать командам региональные дивизионы и добавить соответствующее правило для турнира. Распределение можно сделать и без использования региональных дивизионов, прописав правила распределение команд по расположению относительно каких-то ключевых городов (например, в группу 1 попадают команды, которые расположены западнее города Х и севернее города Y). Правда, для этого способа у всех команд страны обязательно должны быть прописаны города в базе, и у этих городов обязательно должны быть прописаны координаты. Поэтому я предпочитаю использовать региональные дивизионы. Для того, чтобы указать, что турнир должен распределять команды по дочерним соревнованиям с помощью региональных дивизионов, нам нужно поставить соответствующую галочку в "Правила детских турниров/Регионов (кривой перевод, правильнее было бы "дочерних турниров")" -> "Общие".
 


   

Спойлер


 
 
Для того, чтобы региональные дивизионы корректно работали, нужно будет их прописать всем командам, но этим мы займёмся уже после того, как полностью сделаем всю структуру лиг.
 


Ничего принципиально нового для Д4 я не делал, за меня почти всё сделал редактор при переводе из СП в РП, а я только подкорректировал некоторые моменты. Единственный новый пункт, который я затронул - это пункт "Дисциплина". Здесь можно прописать штрафные санкции клубу за получение определённого количества ЖК и/или КК в матче. В Д1-Д3 такой нормы нет, а вот в Д4 она присутствует.
 


   

Спойлер


 
 
Конечно, не забываем периодически делать проверку правил через "Правила" -> "Проверка правил", чтобы вовремя поймать и обезвредить возможные баги.
 


В Суперкубке и Кубке я оставил всё, что было прописано еще в СП, только прописал правильные индексы дисциплинарных правил и правил встречи, а также прописал разные даты проведения Суперкубка в чётные и нечётные годы.
 


   

Спойлер


В аматорском кубке пришлось сделать чуть больше изменений. Мне нужно было, чтобы в кубок сначала добавлялись команды из групп Д5, а потом - из групп Д4, но при тесте выяснилось, что редактор берёт команды наоборот. Чтобы решить эту проблему, мне нужно было прописать в пункте "Общие" стадии кубка правило, по которому команды в эту стадию будут браться согласно посеву и по убыванию (т.е. сначала берутся команды с самым высоким значением посева, а потом с самым низким). Казалось бы, это не очень логично, ведь чем выше посев, тем должно быть лучше, но в нашем случае будет как раз наоборот. Со временем я пришёл в варианту привязки посева к уровню дивизиона или места команды в лиге, где 0 - это самый высокий уровень. Мне так оказалось проще и понятнее. Т.о. для нашего аматорского кубка команды из высшего дивизиона турнира (Д4) будут иметь самый низкий посев (0), а команды из самого низшего (Д5) - самый низкий посев (1).
 


   

Спойлер


Плавающее количество команд в аматорском кубке я прописал просто на всякий случай, чтобы уменьшить количество возможных багов. А вообще обязательно прописываю плавающее количество команд в кубках, если в нём не играют дубли, а в лигах, из которых берутся команды - играют. Никогда не знаешь, сколько и в какой лиге может быть дублей через 15-20 сезонов, поэтому лучше этот вариант предусмотреть заранее.
 
Продолжение следует.


Ohrim

 
 

 


Что ж, почти все соревнования приведены к более-менее правильному виду. Остались чемпионаты U21 и U19, но ими мы займёмся позже. Теперь нужно реализовать изменение количества команд и смену формата турниров в разные годы.
 


Напомню, что нам нужно реализовать. Нужно заранее продумать, сколько команд куда должны вылетать/повышаться, чтобы на следующий сезон турниры приняли интересующий нас вид.
 


Можно сделать что-то вроде такого:
 


   

Спойлер
Вы не можете просматривать это вложение.

 
Порядок действий у нас будет примерно таким (но это не обязательно. Например, можно произвольно поменять местами пункты 3, 4 и 5):
 

  •    


          Дублируем турниры, в которых будет изменяться количество команд (в нашем случае это все лиги и главный кубок). Чтобы не запутаться, каждому турниру лучше поставить год в "Описание".
       
    [/li]


  •    


          Для этих турниров прописываем годы действия (где-то "Год начала", где-то "Год окончания").
       
    [/li]


  •    


          Прописываем нужное количество вылетающих/повышающихся команд в разные годы.
       
    [/li]


  •    


          Если нужно, меняем формат проведения турнира.
       
    [/li]


  •    


          Прописываем добавление/уменьшение числа команд в турнирах.
       
    [/li]


  •    


          Проверяем, как вся эта махина работает.
       
    [/li]



Пойдём подряд. Турниры дублируются очень просто: нажимаем на "Список", в правом окне выделяем нужное соревнование и нажимаем "Дублировать". После этого добавляем турнирам "Описание", чтобы мы как-то могли их различать.
 


   

Спойлер


 
 
Т.к. у меня изменения коснутся сразу трёх сезонов, то придётся делать по три записи каждого такого турнира. Сначала я сделаю изменение на один сезон, проверю, а потом сделаю изменение на второй сезон - так будет проще найти возможные баги. Список наших турниров будет пока таким (но, возможно, его удастся немного оптимизировать):
 


   

Спойлер


 
 
Пропишем каждому турниру, который претерпит изменения, годы действия. Для этого зайдём в пункт "Общие" каждого турнира и поставим нужные значения в "Год начала" и "Год окончания". Принцип здесь простой - прописанный год, это год начала сезона (например, 2019 для сезона 2019/20). Если "Год начала" или "Год окончания" не заполнены, то это значит, что действие этого правила турнира не имеет ограничения по началу или окончанию.
 


Наша схема будет выглядеть следующим образом:
 


  •    


          Сезон 2019/20: "Год начала" не заполняем, "Год окончания" = 2019.
       
    [/li]


  •    


          Сезон 2020/21: "Год начала" = 2020, "Год окончания" = 2020.
       
    [/li]


  •    


          Сезон 2021 и далее: "Год начала" = 2021, "Год окончания" не заполняем.
       
    [/li]


Чтобы не заваливать скриншотами, я покажу пример только на одном дивизионе.
 


   

Спойлер


Теперь правим количество вылетающих/повышающихся команд в соответствии с нашей таблицей.
 


   

Спойлер


Тут мы столкнулись с ситуацией, когда из Д4 в Д3 команды повышаются через плей-офф и его нужно переделывать. Если в первоначальном варианте повышались 2 команды из 9-ти (3 команды из 3-х групп), то теперь нужно, чтобы в сезоне 2019/20 повышались сразу 6 команд, а этого не сделать с помощью плей-офф из 9-ти команд. Есть как минимум два варианта решения проблемы: повышать напрямую по 2 команды из каждой группы или немного изменить плей-офф, добавив туда еще по одной команде из группы (по 4 команды из 3-х групп, 6 победителей повышаются). Я выбрал второй вариант, потому что ИРЛ в Д4 всегда используется плей-офф, вне зависимости от количества повышающихся команд.
 


   

Спойлер


 
 
Ну и плей-офф я переделал так, что в сезоне 2019/20 он состоит только из одного раунда - Final (предыдущие два я просто удалил).
 


   

Спойлер


Теперь нужно изменить формат Д1, ведь в сезоне 2020/21 будут играть 14 команд в два круга. При этом отмечу, что плей-офф за вылет удалять я пока не буду, потому что предполагаю его использовать в правилах Д1 для сезона 2021/22 и более поздних.
 
Итак, для начала я удалю две уже ненужные стадии - 1 и 2. Затем в стадии 0 изменю количество команд на 14 (пункт "Общие"). В пункте "Настройки лиги" сниму галочки с пунктов "Разделитель лиги при раннем финише" и "Дополнительные матчи лиги", а также удалю первые две записи из пункта "Правила квалификации". В "Призовые" можем добавить еще две записи для команд, занявших 13 и 14 места.
 


   

Спойлер


Количество туров у нас также уменьшится, поэтому придётся подкорректировать "Даты встреч". Я убрал все записи для 2019-го года (текущая запись турнира всё равно будет актуальна только для сезона 2020/21), а также 6 уже лишних туров.
 


   

Спойлер


Чтобы изменившиеся "Даты встреч" у нас корректно работали, нужно немного подправить и "Расписание лиги", изменив "Дату окончания" в "Общие" и добавив 4 записи в "Даты".
 


Также я немного подправлю "Даты смещения" и "ТВ-даты", ведь количество матчей в туре теперь 7, а не 6. Для этого я просто изменю столбец "Кол-во матчей" в одной из записей на "2".
 


   

Спойлер


Для 25 и 26 туров, которые играются в один день, я пытался прописать особые условия, чтобы для них заработали ТВ-трансляции, но пока не сработало. Оставлю на потом.
 


Нужно еще изменить индексы стадий 3 и 4, чтобы они шли подряд после стадии 0, это ведёт к тому, что придётся залезть в некоторое количество других пунктов, но иначе всё может работать не совсем так, как запланировано (увы, редактор в РП очень привередливый). Также в условиях начала плей-офф за выход в еврокубки нужно убрать требование окончания стадии 1, а в условиях начала плей-офф за выживание нужно убрать требование окончания стадии 2 - у нас их теперь нет. Если не убрать эти строки, плей-офф просто не начнутся.
 
Теперь пропишем добавление команд во все дивизионы. Делается это через пункт "Продвижение/Вылет" турнира, ну и прописать его нужно в сезоне, предшествующем расширению. Тут я получил хороший пинок по яйцам от редактора, которому мои расчёты по количеству добавляемых команд были до одного места. Уже не в первый раз СИшники каким-то магическим образом ломают что-то важное в редакторе (в этом ФМе это уже второй серьёзный баг). Спустя несколько часов, потраченных на попытки найти причину бага, я обнаружил @SIAZ TV, за что ему огромное спасибо.
 


 
 


   

Спойлер

 
Практически такой же набор манипуляций мы проделаем со всеми лигами и для сезона 2021/22. Понятное дело, что для Д1 теперь нужно будет прописать 16 команд, изменив календарь (я взял календарь на 32 тура из сезона 2019/20 и просто убрал оттуда два тура). Ну и я догадался, что можно сократить одну из записей Д2, а также по одной из записей Д3, т.к. они будут одинаковыми для сезонов 2019/20 и 2020/21. Поэтому я просто прописал в "Год окончания" 2020 в первой записи, а вторую изменил под сезон 2021/22.
 


Плей-офф в Д4 снова пришлось переделать, ведь в сезоне 2020/21 у нас из Д4 в Д3 переходят 4 команды. Тут решается просто - сокращается одна стадия, последняя.
 


Т.к. плей-офф между Д1 и Д2 я предполагал использовать только начиная с сезона 2021/22, то я уберу его из сезонов 2019/20 и 2020/21. Тут нужно быть внимательным и не только удалить стадию с плей-офф, но и удалить упоминания о ней из "Настроек лиги" в Д1, а также из "Стадии из других групп" Д2.
 
После всех изменений я в очередной раз прогнал правила с помощью "Правила" -> "Проверка правил" и, о чудо, проверка прошла успешно.
 
Со структурой взрослых лиг вроде разобрались, теперь нужно немного адаптировать главный Кубок. В текущем виде кубок рассчитан только на количество основных команд, играющих в Д1-Д3 в сезоне 2019/20. Начиная с сезона 2020/21 их количество увеличивается, поэтому Кубок нужно немного подправить. Также нужно учитывать, что в Кубке могут играть только первые команды, дубли запрещены. В РП Кубок поддерживает нефиксированное количество команд, т.о. нам достаточно прописать для Кубка максимально возможное количество команд в лигах, а по факту в первом раунде будет проводиться меньше матчей, если в каких-то лигах будут играть дубли.
 


Для правильной работы Кубка с сезона 2020/21 нужно немного подправить количество команд, участвующих в ранних раундах. Для облегчения понимания я сделал такие таблицы (в сезоне 2019/20 в Кубке участвует 48 команд, а не 52, потому что в Д3 играют 4 дубля), по которым и переделал потом раунды.
 


   

Спойлер
Вы не можете просматривать это вложение.

 
Также я добавил в "Даты встреч" Кубка записи для чётных и нечётных лет, небольшие призовые и ТВ-даты (скрины выкладывать не буду, там ничего особо нового нет).
 
Теперь можно приступать к работе над чемпионатами U21 и U19.
 


Продолжение следует.


Steff.

#14
прошу прощения за оффтоп
 
возможно буду неправ, но я думаю что это самый сложный апдейт, когда либо сделанный за всю историю ФМ. хочется увидеть его на комьюнити, вместе с обсуждениями.
 
и, возможно, мануал с переводом на инглиш. можно попробовать замутить.

🡱 🡳