Модуль:Матчи
Перейти к навигации
Перейти к поиску
Для документации этого модуля может быть создана страница Модуль:Матчи/doc
local p = {}
local matchData = require('Модуль:Матчи/Данные')
-- СЛОВАРЬ: Полное название -> Код
local nameToCode = {
["Абхазия"] = "АБХ", ["Американские Виргины"] = "АВИ", ["Австралийские Аборигены"] = "АВС",
["Азавад"] = "АЗА", ["Азорские Острова"] = "АЗО", ["Акри"] = "АКР", ["Аландские Острова"] = "АЛА",
["Аляска"] = "АЛЯ", ["Амбазония"] = "АМБ", ["Ангилья"] = "АНГ", ["Англси"] = "АНЛ",
["Антарктида"] = "АНР", ["Антигуа и Барбуда"] = "АНТ", ["Аомынь"] = "АОМ", ["Аруба"] = "АРУ",
["Америк. Самоа"] = "АСА",
["Американское Самоа"] = "АСА", ["Ассирия"] = "АСС", ["Атолл Джонстон"] = "АТО", ["Афганистан"] = "АФГ",
["Ачех"] = "АЧЕ", ["Багамы"] = "БАГ", ["Бакасси"] = "БАК", ["Бангладеш"] = "БАН",
["Барбадос"] = "БАР", ["Британские Виргины"] = "БВИ", ["Буганда"] = "БГН", ["Белиз"] = "БЕЛ",
["Бенин"] = "БЕН", ["Бермуды"] = "БЕР", ["Биафра"] = "БИА", ["Белуджистан"] = "БЛД",
["Бонайре"] = "БОН", ["Ботсвана"] = "БОТ", ["Барава"] = "БРВ", ["Бретань"] = "БРЕ",
["Бруней"] = "БРУ", ["Бугенвиль"] = "БУГ", ["Буркина-Фасо"] = "БУР", ["Бутан"] = "БУТ",
["Вазиристан"] = "ВАЗ", ["Валлония"] = "ВАЛ", ["Ватикан"] = "ВАТ", ["Венда"] = "ВЕН",
["Внешние Гебриды"] = "ВНЕ", ["Внутренняя Монголия"] = "ВНУ", ["Восточный Тимор"] = "ВОС",
["Гавайи"] = "ГАВ", ["Гагаузия"] = "ГАГ", ["Гайана"] = "ГАЙ", ["Галапагос"] = "ГАЛ",
["Гамбия"] = "ГАМ", ["Гваделупа"] = "ГВА", ["Гвинея-Бисау"] = "ГВБ", ["Гвиана"] = "ГВИ",
["Гернси"] = "ГЕР", ["Гибралтар"] = "ГИБ", ["Гонгконг"] = "ГОН", ["Государство Ва"] = "ГОС",
["Готланд"] = "ГОТ", ["Гоцо"] = "ГОЦ", ["Графство Ницца"] = "ГРА", ["Гренада"] = "ГРЕ",
["Гренландия"] = "ГРЛ", ["Гуам"] = "ГУА", ["Дарфур"] = "ДАР", ["Дельвидек"] = "ДЕЛ",
["Джерси"] = "ДЖЕ", ["Джибути"] = "ДЖИ", ["ДНР"] = "ДНР", ["Доминика"] = "ДОМ", ["Домин. Республика"] = "ДРЕ",
["Доминиканская Республика"] = "ДРЕ", ["Западная Армения"] = "ЗАА", ["Закарпатье"] = "ЗАК",
["Замбезия"] = "ЗАМ", ["Занзибар"] = "ЗАН", ["Западное Папуа"] = "ЗАП", ["Западная Сахара"] = "ЗАС",
["Западный Тоголенд"] = "ЗАТ", ["Земля Франца-Иосифа"] = "ЗФИ", ["Индия"] = "ИНД", ["Ичкерия"] = "ИЧК",
["Йемен"] = "ЙЕМ", ["Кабилия"] = "КАБ", ["Кайманы"] = "КАЙ", ["Камбоджа"] = "КАМ",
["Канары"] = "КАН", ["Каприви"] = "КАП", ["Каскадия"] = "КАС", ["Катанга"] = "КАТ",
["Кашмир"] = "КАШ", ["Кабинда"] = "КБН", ["Кения"] = "КЕН", ["Кергелен"] = "КЕР",
["Киргизия"] = "КИР", ["Китайский Тайпей"] = "КИТ", ["Кокос"] = "КОК", ["Коморы"] = "КОМ",
["Конк"] = "КОН", ["Кокосовые Острова"] = "КОО", ["Корейцы Японии"] = "КОР", ["Королевство обеих Сицилий"] = "КОС",
["Кирибати"] = "КРБ", ["Кермадек"] = "КРМ", ["Корнуолл"] = "КРН", ["Крым"] = "КРЫ",
["Курдистан"] = "КУР", ["Кюрасао"] = "КЮР", ["Ладония"] = "ЛАД", ["Лакота"] = "ЛАК",
["Лаос"] = "ЛАО", ["Лапландия"] = "ЛАП", ["Латгалия"] = "ЛАТ", ["Лесото"] = "ЛЕС",
["Ливан"] = "ЛИВ", ["ЛНР"] = "ЛНР", ["Логон"] = "ЛОГ", ["Маврикий"] = "МАВ",
["Мадагаскар"] = "МАД", ["Майотта"] = "МАЙ", ["Мальдивы"] = "МАЛ", ["Мальтийский Орден"] = "МАО",
["Мапуче"] = "МАП", ["Маршаллы"] = "МАР", ["Масаи"] = "МАС", ["Матабелеленд"] = "МАТ",
["Мавритания"] = "МВР", ["Мадейра"] = "МДР", ["Мелилья"] = "МЕЛ", ["Менорка"] = "МЕН",
["Мидуэй"] = "МИД", ["Микронезия"] = "МИК", ["Малайзия"] = "МЛЗ", ["Монако"] = "МНК",
["Монтсеррат"] = "МНТ", ["Мозамбик"] = "МОЗ", ["Молоссия"] = "МОЛ", ["Монголия"] = "МОН",
["Мореснет"] = "МОР", ["Марианы"] = "МРН", ["Мартиника"] = "МРТ", ["Мьянма"] = "МЬЯ",
["Нагорный Карабах"] = "НАГ", ["Науру"] = "НАУ", ["Нагаленд"] = "НГЛ", ["Непал"] = "НЕП",
["Новая Земля"] = "НЗЕ", ["Нигер"] = "НИГ", ["Никарагуа"] = "НИК", ["Ниуэ"] = "НИУ",
["Новая Каледония"] = "НОВ", ["Норфолк"] = "НОР", ["Ньюфаундленд"] = "НЬЮ", ["Острова Антиподов"] = "ОАН",
["Остров Вознесения"] = "ОВО", ["Огненная Земля"] = "ОГН", ["Остров Европа"] = "ОЕВ",
["Окситания"] = "ОКС", ["Острова Кука"] = "ОКУ", ["Олдерни"] = "ОЛД", ["Остров Мэн"] = "ОМЭ",
["Остров Пасхи"] = "ОПА", ["Остров Петра Первого"] = "ОПП", ["Остров Принца Эдуарда"] = "ОПЭ",
["Оркнейские Острова"] = "ОРК", ["Остров Рождества"] = "ОРО", ["Острова Силли"] = "ОСИ",
["Остров св. Елены"] = "ОСТ", ["Остров Уайт"] = "ОУА", ["Падания"] = "ПАД", ["Пакистан"] = "ПАК",
["Палау"] = "ПАЛ", ["Папуа-Новая Гвинея"] = "ПАП", ["Пенджаб"] = "ПЕН", ["Питкэрн"] = "ПИТ",
["Палестина"] = "ПЛС", ["Полинезийские Спорады"] = "ПОЛ", ["Приднестровье"] = "ПРИ", ["Прованс"] = "ПРО",
["Пуэрто-Рико"] = "ПУЭ", ["Раф-энд-Рэди"] = "РАФ", ["Рехобот"] = "РЕХ", ["Реция"] = "РЕЦ",
["Реюньон"] = "РЕЮ", ["Родос"] = "РОД", ["Сааремаа"] = "САА", ["Саба"] = "САБ",
["Самоа"] = "САМ", ["Сан-Марино"] = "САН", ["Сарк"] = "САР", ["Сен-Бартельми"] = "СБА",
["Свазиленд"] = "СВА", ["Сент-Винсент и Гренадины"] = "СВГ", ["Себорга"] = "СЕБ", ["Северный Кипр"] = "СЕВ",
["Сейшелы"] = "СЕЙ", ["Секейский Край"] = "СЕК", ["Сент-Люсия"] = "СЕН", ["Сеута"] = "СЕУ",
["Силенд"] = "СИЛ", ["Сингапур"] = "СИН", ["Сицилия"] = "СИЦ", ["Сент-Китс и Невис"] = "СКН",
["Сент-Мартен"] = "СМА", ["Сомалиленд"] = "СМЛ", ["Сан-Андрес"] = "СНА", ["Синд"] = "СНД",
["Соже"] = "СОЖ", ["Соломоны"] = "СОЛ", ["Сомали"] = "СОМ", ["Сен-Пьер и Микелон"] = "СПМ",
["Сардиния"] = "СРД", ["Сан-Томе и Принсипи"] = "СТП", ["Сулу"] = "СУЛ", ["Суринам"] = "СУР",
["Сент-Эстатиус"] = "СЭС", ["Таджикистан"] = "ТАД", ["Таити"] = "ТАИ", ["Тамил-Илам"] = "ТАМ",
["Танзания"] = "ТАН", ["Тасмания"] = "ТАС", ["Теркс и Кайкос"] = "ТЕР", ["Тибет"] = "ТИБ",
["Токелау"] = "ТОК", ["Тонга"] = "ТОН", ["Тристан-да-Кунья"] = "ТРИ", ["Триест"] = "ТРС",
["Туамоту"] = "ТУА", ["Тувалу"] = "ТУВ", ["Туркмения"] = "ТУР", ["Ужупис"] = "УЖУ",
["Уоллис и Футуна"] = "УОЛ", ["Уэйк"] = "УЭЙ", ["Федеральные владения Венесуэлы"] = "ФВВ", ["Фельвидек"] = "ФЕЛ",
["Фиджи"] = "ФИД", ["Филиппины"] = "ФИЛ", ["Фолкленд. Острова"] = "ФОЛ", ["Фрёйа"] = "ФРЁ",
["Французская Полинезия"] = "ФРА", ["Франкония"] = "ФРН", ["Хатт-Ривер"] = "ХАТ", ["Хёрд"] = "ХЁР",
["Хитра"] = "ХИТ", ["Хмонг"] = "ХМО", ["Христиания"] = "ХРИ", ["Хузестан"] = "ХУЗ",
["ЦАР"] = "ЦАР", ["Цыгане"] = "ЦЫГ", ["Чагос"] = "ЧАГ", ["Чад"] = "ЧАД",
["Чамерия"] = "ЧАМ", ["Чатем"] = "ЧАТ", ["Шан"] = "ШАН", ["Шетландские Острова"] = "ШЕТ",
["Шпицберген"] = "ШПИ", ["Шри-Ланка"] = "ШРИ", ["Экв. Гвинея"] = "ЭКВ", ["Эритрея"] = "ЭРИ",
["Эфиопия"] = "ЭФИ", ["Южная Георгия"] = "ЮГЕ", ["Южный Судан"] = "ЮЖН", ["Южный Йемен"] = "ЮЙМ",
["Южное Касаи"] = "ЮКА", ["Южный Камерун"] = "ЮКМ", ["Южное Конго"] = "ЮКО", ["Южная Осетия"] = "ЮОС",
["Южный Тироль"] = "ЮТИ", ["Ян-Майен"] = "ЯМА"
}
-- ОБРАТНЫЙ СЛОВАРЬ (Код -> Полное название) для ссылок и флагов
local codeToName = {
["АБХ"]="Абхазия", ["АВИ"]="Американские Виргины", ["АВС"]="Австрал. Аборигены", ["АЗА"]="Азавад",
["АЗО"]="Азорские Острова", ["АКР"]="Акри", ["АЛА"]="Аландские Острова", ["АЛЯ"]="Аляска",
["АМБ"]="Амбазония", ["АНГ"]="Ангилья", ["АНЛ"]="Англси", ["АНР"]="Антарктида",
["АНТ"]="Антигуа и Барбуда", ["АОМ"]="Аомынь", ["АРУ"]="Аруба", ["АСА"]="Америк. Самоа",
["АСС"]="Ассирия", ["АТО"]="Атолл Джонстон", ["АФГ"]="Афганистан", ["АЧЕ"]="Ачех",
["БАГ"]="Багамы", ["БАК"]="Бакасси", ["БАН"]="Бангладеш", ["БАР"]="Барбадос",
["БВИ"]="Британские Виргины", ["БГН"]="Буганда", ["БЕЛ"]="Белиз", ["БЕН"]="Бенин",
["БЕР"]="Бермуды", ["БИА"]="Биафра", ["БЛД"]="Белуджистан", ["БОН"]="Бонайре",
["БОТ"]="Ботсвана", ["БРВ"]="Барава", ["БРЕ"]="Бретань", ["БРУ"]="Бруней",
["БУГ"]="Бугенвиль", ["БУР"]="Буркина-Фасо", ["БУТ"]="Бутан", ["ВАЗ"]="Вазиристан",
["ВАЛ"]="Валлония", ["ВАТ"]="Ватикан", ["ВЕН"]="Венда", ["ВНЕ"]="Внешние Гебриды",
["ВНУ"]="Внутр. Монголия", ["ВОС"]="Восточный Тимор", ["ГАВ"]="Гавайи", ["ГАГ"]="Гагаузия",
["ГАЙ"]="Гайана", ["ГАЛ"]="Галапагос", ["ГАМ"]="Гамбия", ["ГВА"]="Гваделупа",
["ГВБ"]="Гвинея-Бисау", ["ГВИ"]="Гвиана", ["ГЕР"]="Гернси", ["ГИБ"]="Гибралтар",
["ГОН"]="Гонгконг", ["ГОС"]="Государство Ва", ["ГОТ"]="Готланд", ["ГОЦ"]="Гоцо",
["ГРА"]="Графство Ницца", ["ГРЕ"]="Гренада", ["ГРЛ"]="Гренландия", ["ГУА"]="Гуам",
["ДАР"]="Дарфур", ["ДЕЛ"]="Дельвидек", ["ДЖЕ"]="Джерси", ["ДЖИ"]="Джибути",
["ДНР"]="ДНР", ["ДОМ"]="Доминика", ["ДРЕ"]="Домин. Республика", ["ЗАА"]="Западная Армения",
["ЗАК"]="Закарпатье", ["ЗАМ"]="Замбезия", ["ЗАН"]="Занзибар", ["ЗАП"]="Западное Папуа",
["ЗАС"]="Западная Сахара", ["ЗАТ"]="Западный Тоголенд", ["ЗФИ"]="Земля Франца-Иосифа",
["ИНД"]="Индия", ["ИЧК"]="Ичкерия", ["ЙЕМ"]="Йемен", ["КАБ"]="Кабилия",
["КАЙ"]="Кайманы", ["КАМ"]="Камбоджа", ["КАН"]="Канары", ["КАП"]="Каприви",
["КАС"]="Каскадия", ["КАТ"]="Катанга", ["КАШ"]="Кашмир", ["КБН"]="Кабинда",
["КЕН"]="Кения", ["КЕР"]="Кергелен", ["КИР"]="Киргизия", ["КИТ"]="Китайский Тайпей",
["КОК"]="Кокос", ["КОМ"]="Коморы", ["КОН"]="Конк", ["КОО"]="Кокосовые Острова",
["КОР"]="Корейцы Японии", ["КОС"]="Кор. об. Сицилий", ["КРБ"]="Кирибати", ["КРМ"]="Кермадек",
["КРН"]="Корнуолл", ["КРЫ"]="Крым", ["КУР"]="Курдистан", ["КЮР"]="Кюрасао",
["ЛАД"]="Ладония", ["ЛАК"]="Лакота", ["ЛАО"]="Лаос", ["ЛАП"]="Лапландия",
["ЛАТ"]="Латгалия", ["ЛЕС"]="Лесото", ["ЛИВ"]="Ливан", ["ЛНР"]="ЛНР",
["ЛОГ"]="Логон", ["МАВ"]="Маврикий", ["МАД"]="Мадагаскар", ["МАЙ"]="Майотта",
["МАЛ"]="Мальдивы", ["МАО"]="Мальтийский Орден", ["МАП"]="Мапуче", ["МАР"]="Маршаллы",
["МАС"]="Масаи", ["МАТ"]="Матабелеленд", ["МВР"]="Мавритания", ["МДР"]="Мадейра",
["МЕЛ"]="Мелилья", ["МЕН"]="Менорка", ["МИД"]="Мидуэй", ["МИК"]="Микронезия",
["МЛЗ"]="Малайзия", ["МНК"]="Монако", ["МНТ"]="Монтсеррат", ["МОЗ"]="Мозамбик",
["МОЛ"]="Молоссия", ["МОН"]="Монголия", ["МОР"]="Мореснет", ["МРН"]="Марианы",
["МРТ"]="Мартиника", ["МЬЯ"]="Мьянма", ["НАГ"]="Нагорный Карабах", ["НАУ"]="Науру",
["НГЛ"]="Нагаленд", ["НЕП"]="Непал", ["НЗЕ"]="Новая Земля", ["НИГ"]="Нигер",
["НИК"]="Никарагуа", ["НИУ"]="Ниуэ", ["НОВ"]="Новая Каледония", ["НОР"]="Норфолк",
["НЬЮ"]="Ньюфаундленд", ["ОАН"]="Острова Антиподов", ["ОВО"]="Остров Вознесения",
["ОГН"]="Огненная Земля", ["ОЕВ"]="Остров Европа", ["ОКС"]="Окситания", ["ОКУ"]="Острова Кука",
["ОЛД"]="Олдерни", ["ОМЭ"]="Остров Мэн", ["ОПА"]="Остров Пасхи", ["ОПП"]="Остров Петра Первого",
["ОПЭ"]="Остров Принца Эдуарда", ["ОРК"]="Оркнейские Острова", ["ОРО"]="Остров Рождества",
["ОСИ"]="Острова Силли", ["ОСТ"]="Остров св. Елены", ["ОУА"]="Остров Уайт", ["ПАД"]="Падания",
["ПАК"]="Пакистан", ["ПАЛ"]="Палау", ["ПАП"]="Папуа-Новая Гвинея", ["ПЕН"]="Пенджаб",
["ПИТ"]="Питкэрн", ["ПЛС"]="Палестина", ["ПОЛ"]="Полинезийские Спорады", ["ПРИ"]="Приднестровье",
["ПРО"]="Прованс", ["ПУЭ"]="Пуэрто-Рико", ["РАФ"]="Раф-энд-Рэди", ["РЕХ"]="Рехобот",
["РЕЦ"]="Реция", ["РЕЮ"]="Реюньон", ["РОД"]="Родос", ["САА"]="Сааремаа",
["САБ"]="Саба", ["САМ"]="Самоа", ["САН"]="Сан-Марино", ["САР"]="Сарк",
["СБА"]="Сен-Бартельми", ["СВА"]="Свазиленд", ["СВГ"]="Сент-Винсент и Гренадины", ["СЕБ"]="Себорга",
["СЕВ"]="Северный Кипр", ["СЕЙ"]="Сейшелы", ["СЕК"]="Секейский Край", ["СЕН"]="Сент-Люсия",
["СЕУ"]="Сеута", ["СИЛ"]="Силенд", ["СИН"]="Сингапур", ["СИЦ"]="Сицилия",
["СКН"]="Сент-Китс и Невис", ["СМА"]="Сент-Мартен", ["СМЛ"]="Сомалиленд", ["СНА"]="Сан-Андрес",
["СНД"]="Синд", ["СОЖ"]="Соже", ["СОЛ"]="Соломоны", ["СОМ"]="Сомали",
["СПМ"]="Сен-Пьер и Микелон", ["СРД"]="Сардиния", ["СТП"]="Сан-Томе и Принсипи", ["СУЛ"]="Сулу",
["СУР"]="Суринам", ["СЭС"]="Сент-Эстатиус", ["ТАД"]="Таджикистан", ["ТАИ"]="Таити",
["ТАМ"]="Тамил-Илам", ["ТАН"]="Танзания", ["ТАС"]="Тасмания", ["ТЕР"]="Теркс и Кайкос",
["ТИБ"]="Тибет", ["ТОК"]="Токелау", ["ТОН"]="Тонга", ["ТРИ"]="Тристан-да-Кунья",
["ТРС"]="Триест", ["ТУА"]="Туамоту", ["ТУВ"]="Тувалу", ["ТУР"]="Туркмения",
["УЖУ"]="Ужупис", ["УОЛ"]="Уоллис и Футуна", ["УЭЙ"]="Уэйк", ["ФВВ"]="Фед. вл. Венесуэлы",
["ФЕЛ"]="Фельвидек", ["ФИД"]="Фиджи", ["ФИЛ"]="Филиппины", ["ФОЛ"]="Фолкленд. Острова",
["ФРЁ"]="Фрёйа", ["ФРА"]="Французская Полинезия", ["ФРН"]="Франкония", ["ХАТ"]="Хатт-Ривер",
["ХЕР"]="Хёрд", ["ХИТ"]="Хитра", ["ХМО"]="Хмонг", ["ХРИ"]="Христиания",
["ХУЗ"]="Хузестан", ["ЦАР"]="ЦАР", ["ЦЫГ"]="Цыгане", ["ЧАГ"]="Чагос",
["ЧАД"]="Чад", ["ЧАМ"]="Чамерия", ["ЧАТ"]="Чатем", ["ШАН"]="Шан",
["ШЕТ"]="Шетландские Острова", ["ШПИ"]="Шпицберген", ["ШРИ"]="Шри-Ланка", ["ЭКВ"]="Экв. Гвинея",
["ЭРИ"]="Эритрея", ["ЭФИ"]="Эфиопия", ["ЮГЕ"]="Южная Георгия", ["ЮЖН"]="Южный Судан",
["ЮЙМ"]="Южный Йемен", ["ЮКА"]="Южное Касаи", ["ЮКМ"]="Южный Камерун", ["ЮКО"]="Южное Конго",
["ЮОС"]="Южная Осетия", ["ЮТИ"]="Южный Тироль", ["ЯМА"]="Ян-Майен"
}
-- ФУНКЦИЯ: Сводная таблица за всю историю
function p.all_time_table(frame)
local stats = {}
-- 1. СБОР И АНАЛИЗ ДАННЫХ
for year, stages in pairs(matchData) do
for stageName, matches in pairs(stages) do
for _, match in ipairs(matches) do
-- Создаем профиль команды, если её еще нет
if not stats[match.t1] then stats[match.t1] = {code=match.t1, P=0, W=0, Wet=0, D=0, Let=0, L=0, GF=0, GA=0} end
if not stats[match.t2] then stats[match.t2] = {code=match.t2, P=0, W=0, Wet=0, D=0, Let=0, L=0, GF=0, GA=0} end
local t1 = stats[match.t1]
local t2 = stats[match.t2]
-- Записываем матч и голы (пенальти в разницу мячей не идут)
t1.P = t1.P + 1; t2.P = t2.P + 1
t1.GF = t1.GF + match.s1; t1.GA = t1.GA + match.s2
t2.GF = t2.GF + match.s2; t2.GA = t2.GA + match.s1
-- Логика распределения побед/поражений/очков
if match.p1 and match.p2 then
-- Были пенальти
if match.p1 > match.p2 then t1.Wet = t1.Wet + 1; t2.Let = t2.Let + 1
else t2.Wet = t2.Wet + 1; t1.Let = t1.Let + 1 end
elseif match.et then
-- Был экстра-тайм
if match.s1 > match.s2 then t1.Wet = t1.Wet + 1; t2.Let = t2.Let + 1
else t2.Wet = t2.Wet + 1; t1.Let = t1.Let + 1 end
else
-- Основное время
if match.s1 > match.s2 then t1.W = t1.W + 1; t2.L = t2.L + 1
elseif match.s2 > match.s1 then t2.W = t2.W + 1; t1.L = t1.L + 1
else t1.D = t1.D + 1; t2.D = t2.D + 1 end
end
end
end
end
-- 2. ПОДСЧЕТ ОЧКОВ И ПОДГОТОВКА К СОРТИРОВКЕ
local arr = {}
for code, t in pairs(stats) do
-- Формула: В*3 + ВО*2 + Н*1 + ПО*1
t.Pts = (t.W * 3) + (t.Wet * 2) + (t.D * 1) + (t.Let * 1)
t.name = codeToName[code] or code
table.insert(arr, t)
end
-- 3. АЛГОРИТМ СОРТИРОВКИ (Иерархия правил ЧТМ)
table.sort(arr, function(a, b)
if a.Pts ~= b.Pts then return a.Pts > b.Pts end -- 1. Очки
local aGD, bGD = a.GF - a.GA, b.GF - b.GA
if aGD ~= bGD then return aGD > bGD end -- 2. Разница мячей
if a.GF ~= b.GF then return a.GF > b.GF end -- 3. Забитые голы
local aTW, bTW = a.W + a.Wet, b.W + b.Wet
if aTW ~= bTW then return aTW > bTW end -- 4. Все победы (В + ВО)
if a.W ~= b.W then return a.W > b.W end -- 5. Чистые победы (В)
return a.name < b.name -- 6. По алфавиту
end)
-- 4. ОТРИСОВКА ТАБЛИЦЫ
local result = {}
-- Шапка таблицы
table.insert(result, frame:preprocess('{{Т|ПШТ=да|С=да}}'))
table.insert(result, '|-')
table.insert(result, '! scope="col" style="background-color:#ebf3fe;"|')
table.insert(result, '! scope="col" style="background-color:#ebf3fe;"|')
table.insert(result, '! scope="col" style="background-color:#ebf3fe;"|')
table.insert(result, '! scope="col" style="background-color:#ebf3fe;"|<abbr title="игры">И</abbr>')
table.insert(result, '! scope="col" style="background-color:#ebf3fe;"|<abbr title="выигрыши (3 очка)">В</abbr>')
table.insert(result, '! scope="col" style="background-color:#ebf3fe;"|<abbr title="выигрыши в дополнительное время или по пенальти (2 очка)">ВО</abbr>')
table.insert(result, '! scope="col" style="background-color:#ebf3fe;"|<abbr title="ничьи (1 очко)">Н</abbr>')
table.insert(result, '! scope="col" style="background-color:#ebf3fe;"|<abbr title="поражения в дополнительное время или по пенальти (1 очко)">ПО</abbr>')
table.insert(result, '! scope="col" style="background-color:#ebf3fe;"|<abbr title="поражения (0 очков)">П</abbr>')
table.insert(result, '! scope="col" style="background-color:#ebf3fe;"|<abbr title="забитые и пропущенные мячи">М</abbr>')
table.insert(result, '! scope="col" style="background-color:#ebf3fe;"|<abbr title="очки">О</abbr>')
-- Строки команд
for i, t in ipairs(arr) do
table.insert(result, '|-')
-- Место
table.insert(result, '| style="white-space:nowrap;text-align:center;" | ' .. i)
-- Флаг
table.insert(result, '| style="white-space:nowrap;text-align:center;" | [[Файл:' .. t.name .. '.jpg|30x60px]]')
-- Название
table.insert(result, '| style="white-space:nowrap;text-align:center;" | [[' .. t.name .. ']]')
-- Статистика (И, В, ВО, Н, ПО, П)
table.insert(result, '| style="white-space:nowrap;text-align:center;" | ' .. t.P)
table.insert(result, '| style="white-space:nowrap;text-align:center;" | ' .. t.W)
table.insert(result, '| style="white-space:nowrap;text-align:center;" | ' .. t.Wet)
table.insert(result, '| style="white-space:nowrap;text-align:center;" | ' .. t.D)
table.insert(result, '| style="white-space:nowrap;text-align:center;" | ' .. t.Let)
table.insert(result, '| style="white-space:nowrap;text-align:center;" | ' .. t.L)
-- Мячи
table.insert(result, '| style="white-space:nowrap;text-align:center;" | ' .. t.GF .. '-' .. t.GA)
-- Очки
table.insert(result, '| style="white-space:nowrap;text-align:center;" | ' .. t.Pts)
end
table.insert(result, '|}')
return table.concat(result, "\n")
end
-- ФУНКЦИЯ: Поиск крупнейшей победы/поражения
function p.biggest_result(frame)
local input = frame.args[1] or frame:getParent().args[1]
local resultType = frame.args[2] or frame:getParent().args[2]
if not input or input == "" or not resultType or resultType == "" then return "—" end
local teamCode = nameToCode[input] or input
local max_diff = -1
local record_matches = {}
local team_has_played = false -- <<-- 1. ДОБАВЛЕН ФЛАГ
-- Вспомогательная функция для красивого сокращения стадий
local function formatStage(stageName)
if string.find(stageName, "Группа") then return "гр."
elseif stageName == "3 место" then return "3-е место"
else return stageName end
end
-- 1. ПРОХОДИМ ПО ВСЕЙ БАЗЕ ДАННЫХ
for year, stages in pairs(matchData) do
for stageName, matches in pairs(stages) do
for _, match in ipairs(matches) do
local current_diff = 0
local is_relevant = false
if match.t1 == teamCode then
current_diff = match.s1 - match.s2
is_relevant = true
elseif match.t2 == teamCode then
current_diff = match.s2 - match.s1
is_relevant = true
end
if is_relevant then
team_has_played = true -- <<-- 2. УСТАНАВЛИВАЕМ ФЛАГ, ЕСЛИ КОМАНДА СЫГРАЛА ХОТЯ БЫ ОДИН МАТЧ
-- Проверяем, подходит ли матч под наш запрос (победа или поражение)
local type_match = false
if (resultType == "Победа" and current_diff > 0) or (resultType == "Поражение" and current_diff < 0) then
type_match = true
end
if type_match then
local abs_diff = math.abs(current_diff)
if abs_diff > max_diff then
-- Нашли новый рекорд!
max_diff = abs_diff
record_matches = { {year=year, stage=stageName, data=match} }
elseif abs_diff == max_diff then
-- Такой же рекорд, добавляем в список
table.insert(record_matches, {year=year, stage=stageName, data=match})
end
end
end
end
end
end
-- <<-- 3. ИЗМЕНЕН БЛОК ПРОВЕРКИ
if #record_matches == 0 then
if team_has_played then
return "—" -- Команда играла, но подходящих результатов (побед/поражений) не найдено
else
return "" -- Команда вообще не играла в финальных турнирах
end
end
-- 2. СОРТИРУЕМ РЕЗУЛЬТАТЫ ХРОНОЛОГИЧЕСКИ
table.sort(record_matches, function(a, b)
if a.year ~= b.year then return a.year < b.year end
return a.data.number < b.data.number
end)
-- 3. ФОРМАТИРУЕМ ВЫВОД
local output = {}
for _, item in ipairs(record_matches) do
local opponent_code, score_str
if item.data.t1 == teamCode then
opponent_code = item.data.t2
score_str = item.data.s1 .. ":" .. item.data.s2
else
opponent_code = item.data.t1
score_str = item.data.s2 .. ":" .. item.data.s1
end
local opponent_name = codeToName[opponent_code] or opponent_code
local year_short = string.sub(tostring(item.year), 3, 4)
local stage_short = formatStage(item.stage)
table.insert(output, string.format("[[%s]] — %s (%s, %s)", opponent_name, score_str, year_short, stage_short))
end
return table.concat(output, "<br>")
end
return p