Moduł:Rekordy sezon
Wygląd
Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Rekordy sezon/opis
local p = {}
-- =========================================================
-- Moduł:Rekordy_sezon
--
-- Jeden moduł dla różnych dyscyplin.
--
-- Wywołanie:
--
-- {{#invoke:Rekordy_sezon|main
-- |sezon=2026/2027
-- |druzyna=Lech Poznań
-- |dyscyplina=piłka nożna
-- }}
--
-- lub:
--
-- {{#invoke:Rekordy_sezon|main
-- |sezon=2026/2027
-- |druzyna=Enea Basket Poznań
-- |dyscyplina=koszykówka
-- }}
--
-- =========================================================
-- =========================================================
-- FUNKCJE WSPÓLNE
-- =========================================================
local function liczba(value)
if value == nil or value == "" then
return 0
end
value = tostring(value)
value = mw.ustring.gsub(
value,
"%s+",
""
)
return tonumber(value) or 0
end
local function escapeSQL(value)
value = tostring(value or "")
return mw.ustring.gsub(
value,
"'",
"''"
)
end
-- =========================================================
-- ROZPOZNANIE MIEJSCA MECZU
-- =========================================================
local function miejsceMeczu(row, druzyna)
local d1 =
tostring(row.druzyna1 or "")
local d2 =
tostring(row.druzyna2 or "")
if d1 == druzyna then
return "dom"
end
if d2 == druzyna then
return "wyjazd"
end
return nil
end
-- =========================================================
-- WYNIK MECZU
--
-- Zwraca wynik faktyczny:
-- g1 = gole/punkty gospodarza
-- g2 = gole/punkty gościa
-- =========================================================
local function wynikMeczu(row)
local g1 =
tonumber(row.gole1 or "")
local g2 =
tonumber(row.gole2 or "")
if g1 ~= nil and g2 ~= nil then
return g1, g2
end
local wynik =
tostring(row.wynik or "")
local a, b =
mw.ustring.match(
wynik,
"(%d+)%s*:%s*(%d+)"
)
if a and b then
return
tonumber(a),
tonumber(b)
end
return nil, nil
end
-- =========================================================
-- WYNIK Z PERSPEKTYWY DRUŻYNY
--
-- TO JEST KLUCZOWA FUNKCJA DLA NAJCZĘSTSZYCH WYNIKÓW.
--
-- Lech - Cracovia 4:1
-- => Lech: 4:1
--
-- Cracovia - Lech 1:4
-- => Lech: 4:1
--
-- Dzięki temu nie mieszamy kolejności gospodarze/goście.
-- =========================================================
local function wynikZPerspektywy(row, druzyna)
local g1, g2 =
wynikMeczu(row)
if g1 == nil or g2 == nil then
return nil, nil
end
local miejsce =
miejsceMeczu(
row,
druzyna
)
if miejsce == "dom" then
return g1, g2
elseif miejsce == "wyjazd" then
return g2, g1
end
return nil, nil
end
-- =========================================================
-- NAZWA MECZU
-- =========================================================
local function nazwaMeczu(row)
local d1 =
tostring(row.druzyna1 or "")
local d2 =
tostring(row.druzyna2 or "")
local strona =
tostring(row.strona_meczu or "")
local tekst =
d1 ..
" – " ..
d2
if strona ~= "" then
return
"[[" ..
strona ..
"|" ..
tekst ..
"]]"
end
return tekst
end
-- =========================================================
-- FORMAT DATY
-- =========================================================
local function dataTekst(data)
return tostring(
data or ""
)
end
-- =========================================================
-- FUNKCJA DODAWANIA REKORDU
-- =========================================================
local function dodajRekord(
tabela,
miejsce,
wartosc,
item
)
if wartosc == nil then
return
end
local lista =
tabela[miejsce]
if #lista == 0 then
table.insert(
lista,
item
)
return
end
local obecna =
lista[1].wartosc
if wartosc > obecna then
tabela[miejsce] = {
item
}
elseif wartosc == obecna then
table.insert(
lista,
item
)
end
end
-- =========================================================
-- FORMAT REKORDÓW MECZOWYCH
-- =========================================================
local function tekstMeczow(lista)
if not lista or #lista == 0 then
return "—"
end
local wynik = {}
for _, item in ipairs(lista) do
local roznica =
item.roznica or 0
local roznicaTekst
if roznica >= 0 then
roznicaTekst =
"+" ..
tostring(roznica)
else
roznicaTekst =
tostring(roznica)
end
table.insert(
wynik,
item.tekst ..
" (" ..
item.wynik ..
", " ..
roznicaTekst ..
")"
)
end
return table.concat(
wynik,
"<br>"
)
end
-- =========================================================
-- FORMAT REKORDÓW ZAWODNIKÓW
-- =========================================================
local function tekstZawodnikow(
lista,
typ
)
if not lista or #lista == 0 then
return "—"
end
local wynik = {}
for _, item in ipairs(lista) do
local zawodnikLink =
"[[" ..
tostring(item.zawodnik or "") ..
"]]"
local wartosc = ""
if typ == "punkty" then
wartosc =
tostring(item.punkty) ..
" pkt"
elseif typ == "minuty" then
wartosc =
tostring(
item.minuty_format or ""
)
if wartosc == "" then
wartosc =
tostring(
item.minuty or 0
)
end
wartosc =
wartosc ..
" min"
elseif typ == "asysty" then
wartosc =
tostring(item.asysty) ..
" as."
elseif typ == "zbiorki" then
wartosc =
tostring(item.zbiorki) ..
" zb."
elseif typ == "eval" then
wartosc =
tostring(item.eval) ..
" EVAL"
elseif typ == "plusminus" then
local pm =
item.plusminus or 0
if pm >= 0 then
wartosc =
"+" ..
tostring(pm)
else
wartosc =
tostring(pm)
end
wartosc =
wartosc ..
" +/-"
end
table.insert(
wynik,
zawodnikLink ..
" — " ..
wartosc ..
"<br>" ..
tostring(item.tekst or "") ..
" (" ..
tostring(item.wynik or "") ..
")"
)
end
return table.concat(
wynik,
"<br>"
)
end
-- =========================================================
-- KOSZYKÓWKA
-- =========================================================
local function koszykowka(
frame,
sezon,
druzyna
)
local sezonSQL =
escapeSQL(sezon)
local druzynaSQL =
escapeSQL(druzyna)
-- =====================================================
-- MECZE
-- =====================================================
local fieldsMecze =
table.concat({
"Mecze.id=mecz",
"Mecze.data=data",
"Mecze.sezon=sezon",
"Mecze.rozgrywki=rozgrywki",
"Mecze.druzyna1=druzyna1",
"Mecze.druzyna2=druzyna2",
"Mecze.gole1=gole1",
"Mecze.gole2=gole2",
"Mecze.wynik=wynik",
"Mecze.strona_meczu=strona_meczu"
}, ",")
local mecze =
mw.ext.cargo.query(
"Mecze",
fieldsMecze,
{
where =
"(" ..
"Mecze.druzyna1='" ..
druzynaSQL ..
"'" ..
" OR " ..
"Mecze.druzyna2='" ..
druzynaSQL ..
"'" ..
")" ..
" AND Mecze.sezon='" ..
sezonSQL ..
"'",
orderBy =
"Mecze.data ASC",
limit = 5000
}
)
if not mecze or #mecze == 0 then
return
"''Brak wprowadzonych meczów dla tej drużyny w podanym sezonie.''"
end
-- =====================================================
-- REKORDY MECZOWE
-- =====================================================
local najwyzszeZwyciestwo = {
dom = {},
wyjazd = {}
}
local najwyzszaPorazka = {
dom = {},
wyjazd = {}
}
-- =====================================================
-- PRZETWARZANIE MECZÓW
-- =====================================================
for _, row in ipairs(mecze) do
local miejsce =
miejsceMeczu(
row,
druzyna
)
local zdobyte,
stracone =
wynikZPerspektywy(
row,
druzyna
)
if miejsce
and zdobyte ~= nil
and stracone ~= nil then
local roznica =
zdobyte - stracone
local item = {
mecz =
row.mecz or "",
data =
row.data or "",
miejsce =
miejsce,
zdobyte =
zdobyte,
stracone =
stracone,
roznica =
roznica,
tekst =
nazwaMeczu(row),
wynik =
tostring(gole1 or zdobyte) ..
":" ..
tostring(gole2 or stracone)
}
-- ZWYCIĘSTWO
if roznica > 0 then
dodajRekord(
najwyzszeZwyciestwo,
miejsce,
roznica,
item
)
end
-- PORAŻKA
if roznica < 0 then
item.wartosc =
math.abs(roznica)
item.przegrana =
math.abs(roznica)
local lista =
najwyzszaPorazka[miejsce]
if #lista == 0 then
table.insert(
lista,
item
)
else
local obecna =
lista[1].przegrana
if item.przegrana > obecna then
najwyzszaPorazka[miejsce] = {
item
}
elseif item.przegrana == obecna then
table.insert(
lista,
item
)
end
end
end
end
end
-- =====================================================
-- STATYSTYKI ZAWODNIKÓW
-- =====================================================
local fieldsZawodnicy =
table.concat({
"UdzialZawodnika.zawodnik=zawodnik",
"UdzialZawodnika.druzyna=druzyna_zawodnika",
"UdzialZawodnika.gol=gol",
"UdzialZawodnika.minuty=minuty",
"UdzialZawodnika.minuty_format=minuty_format",
"UdzialZawodnika.asysta=asysta",
"UdzialZawodnika.zbiorka=zbiorka",
"UdzialZawodnika.eval=eval",
"UdzialZawodnika.plusminus=plusminus",
"Mecze.id=mecz",
"Mecze.data=data",
"Mecze.druzyna1=druzyna1",
"Mecze.druzyna2=druzyna2",
"Mecze.gole1=gole1",
"Mecze.gole2=gole2",
"Mecze.wynik=wynik",
"Mecze.strona_meczu=strona_meczu"
}, ",")
local zawodnicy =
mw.ext.cargo.query(
"UdzialZawodnika,Mecze",
fieldsZawodnicy,
{
join =
"UdzialZawodnika.mecz=Mecze.id",
where =
"UdzialZawodnika.druzyna='" ..
druzynaSQL ..
"'" ..
" AND Mecze.sezon='" ..
sezonSQL ..
"'" ..
" AND UdzialZawodnika.minuty > 0",
orderBy =
"Mecze.data ASC",
limit = 10000
}
)
local rekordy = {
punkty = {
dom = {},
wyjazd = {}
},
minuty = {
dom = {},
wyjazd = {}
},
asysty = {
dom = {},
wyjazd = {}
},
zbiorki = {
dom = {},
wyjazd = {}
},
eval = {
dom = {},
wyjazd = {}
},
plusminus = {
dom = {},
wyjazd = {}
}
}
if zawodnicy then
for _, row in ipairs(zawodnicy) do
local miejsce =
miejsceMeczu(
row,
druzyna
)
if miejsce then
local item = {
zawodnik =
row.zawodnik or "",
mecz =
row.mecz or "",
data =
row.data or "",
miejsce =
miejsce,
tekst =
nazwaMeczu(row),
wynik =
row.wynik or "",
minuty_format =
row.minuty_format or "",
punkty =
liczba(row.gol),
minuty =
liczba(row.minuty),
asysty =
liczba(row.asysta),
zbiorki =
liczba(row.zbiorka),
eval =
liczba(row.eval),
plusminus =
liczba(row.plusminus)
}
dodajRekord(
rekordy.punkty,
miejsce,
item.punkty,
item
)
dodajRekord(
rekordy.minuty,
miejsce,
item.minuty,
item
)
dodajRekord(
rekordy.asysty,
miejsce,
item.asysty,
item
)
dodajRekord(
rekordy.zbiorki,
miejsce,
item.zbiorki,
item
)
dodajRekord(
rekordy.eval,
miejsce,
item.eval,
item
)
dodajRekord(
rekordy.plusminus,
miejsce,
item.plusminus,
item
)
end
end
end
-- =====================================================
-- SERIE
-- =====================================================
local serie = {
wszystkie = {
wygrane = 0,
przegrane = 0
},
dom = {
wygrane = 0,
przegrane = 0
},
wyjazd = {
wygrane = 0,
przegrane = 0
}
}
local aktualna = {
wszystkie = {
W = 0,
P = 0
},
dom = {
W = 0,
P = 0
},
wyjazd = {
W = 0,
P = 0
}
}
for _, row in ipairs(mecze) do
local miejsce =
miejsceMeczu(
row,
druzyna
)
local zdobyte,
stracone =
wynikZPerspektywy(
row,
druzyna
)
if miejsce
and zdobyte ~= nil
and stracone ~= nil then
local wynik
if zdobyte > stracone then
wynik = "W"
elseif zdobyte < stracone then
wynik = "P"
else
wynik = "R"
end
-- OGÓŁEM
if wynik == "W" then
aktualna.wszystkie.W =
aktualna.wszystkie.W + 1
aktualna.wszystkie.P = 0
serie.wszystkie.wygrane =
math.max(
serie.wszystkie.wygrane,
aktualna.wszystkie.W
)
elseif wynik == "P" then
aktualna.wszystkie.P =
aktualna.wszystkie.P + 1
aktualna.wszystkie.W = 0
serie.wszystkie.przegrane =
math.max(
serie.wszystkie.przegrane,
aktualna.wszystkie.P
)
else
aktualna.wszystkie.W = 0
aktualna.wszystkie.P = 0
end
-- DOM
if miejsce == "dom" then
if wynik == "W" then
aktualna.dom.W =
aktualna.dom.W + 1
aktualna.dom.P = 0
serie.dom.wygrane =
math.max(
serie.dom.wygrane,
aktualna.dom.W
)
elseif wynik == "P" then
aktualna.dom.P =
aktualna.dom.P + 1
aktualna.dom.W = 0
serie.dom.przegrane =
math.max(
serie.dom.przegrane,
aktualna.dom.P
)
else
aktualna.dom.W = 0
aktualna.dom.P = 0
end
end
-- WYJAZD
if miejsce == "wyjazd" then
if wynik == "W" then
aktualna.wyjazd.W =
aktualna.wyjazd.W + 1
aktualna.wyjazd.P = 0
serie.wyjazd.wygrane =
math.max(
serie.wyjazd.wygrane,
aktualna.wyjazd.W
)
elseif wynik == "P" then
aktualna.wyjazd.P =
aktualna.wyjazd.P + 1
aktualna.wyjazd.W = 0
serie.wyjazd.przegrane =
math.max(
serie.wyjazd.przegrane,
aktualna.wyjazd.P
)
else
aktualna.wyjazd.W = 0
aktualna.wyjazd.P = 0
end
end
end
end
-- =====================================================
-- WYNIK
-- =====================================================
local wynik = {}
table.insert(
wynik,
"=== Rekordy sezonu ==="
)
table.insert(
wynik,
""
)
-- MECZOWE
table.insert(
wynik,
"==== Rekordy meczowe ===="
)
table.insert(
wynik,
""
)
table.insert(
wynik,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
wynik,
"! Rekord !! 🏠 Dom !! ✈️ Wyjazd"
)
table.insert(wynik, "|-")
table.insert(
wynik,
"! 🏆 Najwyższe zwycięstwo"
)
table.insert(
wynik,
"| " ..
tekstMeczow(
najwyzszeZwyciestwo.dom
)
)
table.insert(
wynik,
"| " ..
tekstMeczow(
najwyzszeZwyciestwo.wyjazd
)
)
table.insert(wynik, "|-")
table.insert(
wynik,
"! ❌ Najwyższa porażka"
)
table.insert(
wynik,
"| " ..
tekstMeczow(
najwyzszaPorazka.dom
)
)
table.insert(
wynik,
"| " ..
tekstMeczow(
najwyzszaPorazka.wyjazd
)
)
table.insert(
wynik,
"|}"
)
-- INDYWIDUALNE
table.insert(
wynik,
""
)
table.insert(
wynik,
"==== Rekordy indywidualne ===="
)
table.insert(
wynik,
""
)
table.insert(
wynik,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
wynik,
"! Rekord !! 🏠 Dom !! ✈️ Wyjazd"
)
local rekordyLista = {
{
nazwa = "🏀 Najwięcej punktów",
tabela = rekordy.punkty,
typ = "punkty"
},
{
nazwa = "⏱️ Najwięcej minut",
tabela = rekordy.minuty,
typ = "minuty"
},
{
nazwa = "🎯 Najwięcej asyst",
tabela = rekordy.asysty,
typ = "asysty"
},
{
nazwa = "🏀 Najwięcej zbiórek",
tabela = rekordy.zbiorki,
typ = "zbiorki"
},
{
nazwa = "⭐ Najwyższy EVAL",
tabela = rekordy.eval,
typ = "eval"
},
{
nazwa = "➕ Najwyższy +/-",
tabela = rekordy.plusminus,
typ = "plusminus"
}
}
for _, rekord in ipairs(rekordyLista) do
table.insert(
wynik,
"|-"
)
table.insert(
wynik,
"! " ..
rekord.nazwa
)
table.insert(
wynik,
"| " ..
tekstZawodnikow(
rekord.tabela.dom,
rekord.typ
)
)
table.insert(
wynik,
"| " ..
tekstZawodnikow(
rekord.tabela.wyjazd,
rekord.typ
)
)
end
table.insert(
wynik,
"|}"
)
-- SERIE
table.insert(
wynik,
""
)
table.insert(
wynik,
"==== Serie ===="
)
table.insert(
wynik,
""
)
table.insert(
wynik,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
wynik,
"! Seria !! Wszystkie mecze !! 🏠 Dom !! ✈️ Wyjazd"
)
table.insert(
wynik,
"|-"
)
table.insert(
wynik,
"! 🔥 Najdłuższa seria zwycięstw"
)
table.insert(
wynik,
"| " ..
tostring(
serie.wszystkie.wygrane
)
)
table.insert(
wynik,
"| " ..
tostring(
serie.dom.wygrane
)
)
table.insert(
wynik,
"| " ..
tostring(
serie.wyjazd.wygrane
)
)
table.insert(
wynik,
"|-"
)
table.insert(
wynik,
"! 📉 Najdłuższa seria porażek"
)
table.insert(
wynik,
"| " ..
tostring(
serie.wszystkie.przegrane
)
)
table.insert(
wynik,
"| " ..
tostring(
serie.dom.przegrane
)
)
table.insert(
wynik,
"| " ..
tostring(
serie.wyjazd.przegrane
)
)
table.insert(
wynik,
"|}"
)
return table.concat(
wynik,
"\n"
)
end
-- =========================================================
-- PIŁKA NOŻNA
-- =========================================================
local function pilkaNozna(
frame,
sezon,
druzyna
)
local sezonSQL =
escapeSQL(sezon)
local druzynaSQL =
escapeSQL(druzyna)
-- =====================================================
-- MECZE
-- =====================================================
local fieldsMecze =
table.concat({
"Mecze.id=mecz",
"Mecze.data=data",
"Mecze.sezon=sezon",
"Mecze.rozgrywki=rozgrywki",
"Mecze.etap=etap",
"Mecze.kolejka=kolejka",
"Mecze.druzyna1=druzyna1",
"Mecze.druzyna2=druzyna2",
"Mecze.gole1=gole1",
"Mecze.gole2=gole2",
"Mecze.wynik=wynik",
"Mecze.strona_meczu=strona_meczu"
}, ",")
local mecze =
mw.ext.cargo.query(
"Mecze",
fieldsMecze,
{
where =
"(" ..
"Mecze.druzyna1='" ..
druzynaSQL ..
"'" ..
" OR " ..
"Mecze.druzyna2='" ..
druzynaSQL ..
"'" ..
")" ..
" AND Mecze.sezon='" ..
sezonSQL ..
"'",
orderBy =
"Mecze.data ASC",
limit = 5000
}
)
if not mecze or #mecze == 0 then
return
"''Brak wprowadzonych meczów dla tej drużyny w podanym sezonie.''"
end
-- =====================================================
-- STRUKTURA REKORDÓW
-- =====================================================
local najwyzszeZwyciestwo = {
dom = {},
wyjazd = {}
}
local najwyzszaPorazka = {
dom = {},
wyjazd = {}
}
local najczestszeWyniki = {}
local wynikiRozgrywek = {}
local serieBezPorazki = {
wszystkie = 0,
dom = 0,
wyjazd = 0
}
local aktualnaBezPorazki = {
wszystkie = 0,
dom = 0,
wyjazd = 0
}
local serie = {
wszystkie = {
wygrane = 0,
remisy = 0,
bezWygranej = 0,
porazki = 0
},
dom = {
wygrane = 0,
remisy = 0,
bezWygranej = 0,
porazki = 0
},
wyjazd = {
wygrane = 0,
remisy = 0,
bezWygranej = 0,
porazki = 0
}
}
-- =====================================================
-- PRZETWARZANIE MECZÓW
-- =====================================================
for _, row in ipairs(mecze) do
local miejsce =
miejsceMeczu(
row,
druzyna
)
local zdobyte,
stracone =
wynikZPerspektywy(
row,
druzyna
)
if miejsce
and zdobyte ~= nil
and stracone ~= nil then
local roznica =
zdobyte - stracone
-- =============================================
-- WYNIK Z PERSPEKTYWY DRUŻYNY
--
-- NAJWAŻNIEJSZA POPRAWKA
-- =============================================
local wynikPerspektywa =
tostring(scobyte or zdobyte) ..
":" ..
tostring(stracone)
-- =============================================
-- NAJCZĘSTSZE WYNIKI
--
-- NIE KORZYSTAMY Z row.wynik!
--
-- Dzięki temu:
--
-- Lech 4:1 Cracovia -> 4:1
-- Cracovia 1:4 Lech -> 4:1
--
-- Oba mecze są więc poprawnie liczone
-- jako 4:1 dla Lecha.
-- =============================================
najczestszeWyniki[
wynikPerspektywa
] =
(najczestszeWyniki[
wynikPerspektywa
] or 0) + 1
-- =============================================
-- ROZGRYWKI
-- =============================================
local rozgrywki =
tostring(
row.rozgrywki or ""
)
if rozgrywki == "" then
rozgrywki = "Pozostałe"
end
if not wynikiRozgrywek[rozgrywki] then
wynikiRozgrywek[rozgrywki] = {
wszystkie = {
mecze = 0,
wygrane = 0,
remisy = 0,
porazki = 0,
bezWygranej = 0
},
dom = {
mecze = 0,
wygrane = 0,
remisy = 0,
porazki = 0,
bezWygranej = 0
},
wyjazd = {
mecze = 0,
wygrane = 0,
remisy = 0,
porazki = 0,
bezWygranej = 0
}
}
end
local dane =
wynikiRozgrywek[rozgrywki]
dane.wszystkie.mecze =
dane.wszystkie.mecze + 1
dane[miejsce].mecze =
dane[miejsce].mecze + 1
-- =============================================
-- REZULTAT
-- =============================================
local rezultat
if zdobyte > stracone then
rezultat = "W"
elseif zdobyte < stracone then
rezultat = "P"
else
rezultat = "R"
end
if rezultat == "W" then
dane.wszystkie.wygrane =
dane.wszystkie.wygrane + 1
dane[miejsce].wygrane =
dane[miejsce].wygrane + 1
elseif rezultat == "R" then
dane.wszystkie.remisy =
dane.wszystkie.remisy + 1
dane[miejsce].remisy =
dane[miejsce].remisy + 1
else
dane.wszystkie.porazki =
dane.wszystkie.porazki + 1
dane[miejsce].porazki =
dane[miejsce].porazki + 1
end
if rezultat ~= "W" then
dane.wszystkie.bezWygranej =
dane.wszystkie.bezWygranej + 1
dane[miejsce].bezWygranej =
dane[miejsce].bezWygranej + 1
end
-- =============================================
-- REKORD NAJWYŻSZEGO ZWYCIĘSTWA
-- =============================================
if rezultat == "W" then
local item = {
mecz =
row.mecz or "",
data =
row.data or "",
miejsce =
miejsce,
zdobyte =
zdobyte,
stracone =
stracone,
roznica =
roznica,
wartosc =
roznica,
tekst =
nazwaMeczu(row),
wynik =
wynikPerspektywa
}
dodajRekord(
najwyzszeZwyciestwo,
miejsce,
roznica,
item
)
end
-- =============================================
-- REKORD NAJWYŻSZEJ PORAŻKI
-- =============================================
if rezultat == "P" then
local przegrana =
math.abs(roznica)
local item = {
mecz =
row.mecz or "",
data =
row.data or "",
miejsce =
miejsce,
zdobyte =
zdobyte,
stracone =
stracone,
roznica =
roznica,
wartosc =
przegrana,
przegrana =
przegrana,
tekst =
nazwaMeczu(row),
wynik =
wynikPerspektywa
}
dodajRekord(
najwyzszaPorazka,
miejsce,
przegrana,
item
)
end
-- =============================================
-- SERIA BEZ PORAŻKI
-- W + R
-- =============================================
if rezultat == "W"
or rezultat == "R" then
aktualnaBezPorazki.wszystkie =
aktualnaBezPorazki.wszystkie + 1
serieBezPorazki.wszystkie =
math.max(
serieBezPorazki.wszystkie,
aktualnaBezPorazki.wszystkie
)
aktualnaBezPorazki[miejsce] =
aktualnaBezPorazki[miejsce] + 1
serieBezPorazki[miejsce] =
math.max(
serieBezPorazki[miejsce],
aktualnaBezPorazki[miejsce]
)
else
aktualnaBezPorazki.wszystkie = 0
aktualnaBezPorazki[miejsce] = 0
end
-- =============================================
-- SERIE WYGRANYCH / BEZ WYGRANEJ / PORAŻEK
-- =============================================
local obszary = {
"wszystkie",
miejsce
}
for _, obszar in ipairs(obszary) do
if rezultat == "W" then
serie[obszar].wygrane =
serie[obszar].wygrane + 1
serie[obszar].remisy =
0
serie[obszar].porazki =
0
serie[obszar].bezWygranej =
0
elseif rezultat == "R" then
serie[obszar].remisy =
serie[obszar].remisy + 1
serie[obszar].wygrane =
0
serie[obszar].porazki =
0
serie[obszar].bezWygranej =
serie[obszar].bezWygranej + 1
else
serie[obszar].porazki =
serie[obszar].porazki + 1
serie[obszar].wygrane =
0
serie[obszar].remisy =
0
serie[obszar].bezWygranej =
serie[obszar].bezWygranej + 1
end
end
end
end
-- =====================================================
-- NAJCZĘSTSZY WYNIK
-- =====================================================
local listaWynikow = {}
for wynik, licznik in pairs(
najczestszeWyniki
) do
table.insert(
listaWynikow,
{
wynik = wynik,
liczba = licznik
}
)
end
table.sort(
listaWynikow,
function(a, b)
if a.liczba ~= b.liczba then
return
a.liczba >
b.liczba
end
return
a.wynik <
b.wynik
end
)
-- =====================================================
-- GENEROWANIE WYNIKU
-- =====================================================
local wynik = {}
table.insert(
wynik,
"=== Rekordy sezonu ==="
)
table.insert(
wynik,
""
)
-- =====================================================
-- REKORDY MECZOWE
-- =====================================================
table.insert(
wynik,
"==== Rekordy meczowe ===="
)
table.insert(
wynik,
""
)
table.insert(
wynik,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
wynik,
"! Rekord !! 🏠 Dom !! ✈️ Wyjazd"
)
table.insert(
wynik,
"|-"
)
table.insert(
wynik,
"! 🏆 Najwyższe zwycięstwo"
)
table.insert(
wynik,
"| " ..
tekstMeczow(
najwyzszeZwyciestwo.dom
)
)
table.insert(
wynik,
"| " ..
tekstMeczow(
najwyzszeZwyciestwo.wyjazd
)
)
table.insert(
wynik,
"|-"
)
table.insert(
wynik,
"! ❌ Najwyższa porażka"
)
table.insert(
wynik,
"| " ..
tekstMeczow(
najwyzszaPorazka.dom
)
)
table.insert(
wynik,
"| " ..
tekstMeczow(
najwyzszaPorazka.wyjazd
)
)
table.insert(
wynik,
"|}"
)
-- =====================================================
-- SERIE
-- =====================================================
table.insert(
wynik,
""
)
table.insert(
wynik,
"==== Serie ===="
)
table.insert(
wynik,
""
)
table.insert(
wynik,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
wynik,
"! Rekord !! Wszystkie mecze !! 🏠 Dom !! ✈️ Wyjazd"
)
table.insert(
wynik,
"|-"
)
table.insert(
wynik,
"! 🔥 Najdłuższa seria bez porażki"
)
table.insert(
wynik,
"| " ..
tostring(
serieBezPorazki.wszystkie
)
)
table.insert(
wynik,
"| " ..
tostring(
serieBezPorazki.dom
)
)
table.insert(
wynik,
"| " ..
tostring(
serieBezPorazki.wyjazd
)
)
table.insert(
wynik,
"|}"
)
-- =====================================================
-- WYNIKI
-- =====================================================
table.insert(
wynik,
""
)
table.insert(
wynik,
"==== Najczęstsze wyniki ===="
)
table.insert(
wynik,
""
)
table.insert(
wynik,
'{| class="wikitable" style="text-align:center;"'
)
table.insert(
wynik,
"! Wynik !! Liczba"
)
for _, item in ipairs(
listaWynikow
) do
table.insert(
wynik,
"|-"
)
table.insert(
wynik,
"| '''" ..
item.wynik ..
"'''"
)
table.insert(
wynik,
"| " ..
tostring(
item.liczba
)
)
end
table.insert(
wynik,
"|}"
)
-- =====================================================
-- ROZGRYWKI
-- =====================================================
table.insert(
wynik,
""
)
table.insert(
wynik,
"==== Wyniki według rozgrywek ===="
)
table.insert(
wynik,
""
)
table.insert(
wynik,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
wynik,
"! Rozgrywki !! Mecze !! 🏆 Wygrane !! 🤝 Remisy !! ❌ Porażki !! ⚪ Bez wygranej"
)
local listaRozgrywek = {}
for nazwa, dane in pairs(
wynikiRozgrywek
) do
table.insert(
listaRozgrywek,
{
nazwa = nazwa,
dane = dane
}
)
end
table.sort(
listaRozgrywek,
function(a, b)
return
a.nazwa <
b.nazwa
end
)
for _, pozycja in ipairs(
listaRozgrywek
) do
local dane =
pozycja.dane.wszystkie
table.insert(
wynik,
"|-"
)
table.insert(
wynik,
"! " ..
pozycja.nazwa
)
table.insert(
wynik,
"| " ..
tostring(dane.mecze)
)
table.insert(
wynik,
"| " ..
tostring(dane.wygrane)
)
table.insert(
wynik,
"| " ..
tostring(dane.remisy)
)
table.insert(
wynik,
"| " ..
tostring(dane.porazki)
)
table.insert(
wynik,
"| " ..
tostring(dane.bezWygranej)
)
end
table.insert(
wynik,
"|}"
)
return table.concat(
wynik,
"\n"
)
end
-- =========================================================
-- GŁÓWNA FUNKCJA
-- =========================================================
function p.main(frame)
local sezon =
tostring(
frame.args.sezon or ""
)
local druzyna =
tostring(
frame.args.druzyna or ""
)
local dyscyplina =
mw.ustring.lower(
tostring(
frame.args.dyscyplina or ""
)
)
if sezon == "" then
return
"'''Błąd:''' nie podano sezonu."
end
if druzyna == "" then
return
"'''Błąd:''' nie podano drużyny."
end
-- =====================================================
-- PIŁKA NOŻNA
-- =====================================================
if dyscyplina == "piłka nożna"
or dyscyplina == "pilka nozna"
or dyscyplina == "piłka nozna"
or dyscyplina == "football" then
return
pilkaNozna(
frame,
sezon,
druzyna
)
end
-- =====================================================
-- KOSZYKÓWKA
-- =====================================================
if dyscyplina == "koszykówka"
or dyscyplina == "koszykowka"
or dyscyplina == "basketball" then
return
koszykowka(
frame,
sezon,
druzyna
)
end
-- =====================================================
-- BRAK ROZPOZNANIA
-- =====================================================
return
"'''Błąd:''' nie rozpoznano dyscypliny '''" ..
dyscyplina ..
"'''. Dostępne: '''piłka nożna''' lub '''koszykówka'''."
end
return p