Moduł:Rekordy sezon: Różnice pomiędzy wersjami
Wygląd
Nie podano opisu zmian |
Nie podano opisu zmian |
||
| Linia 5: | Linia 5: | ||
-- | -- | ||
-- Jeden moduł dla różnych dyscyplin. | -- 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 | |||
-- }} | |||
-- | |||
-- ========================================================= | -- ========================================================= | ||
| Linia 184: | Linia 201: | ||
-- | -- | ||
-- WAŻNE: | -- WAŻNE: | ||
-- item.wartosc | -- item.wartosc jest ustawiane tutaj dla KAŻDEGO rekordu. | ||
-- Dzięki temu | -- | ||
-- | -- Dzięki temu: | ||
-- punkty porównują punkty, | |||
-- minuty porównują minuty, | |||
-- asysty porównują asysty, | |||
-- zbiórki porównują zbiórki, | |||
-- EVAL porównuje EVAL, | |||
-- plus/minus porównuje plus/minus. | |||
-- ========================================================= | -- ========================================================= | ||
| Linia 205: | Linia 228: | ||
-- KLUCZOWA POPRAWKA | -- KLUCZOWA POPRAWKA | ||
item.wartosc = wartosc | item.wartosc = wartosc | ||
if #lista == 0 then | if #lista == 0 then | ||
| Linia 264: | Linia 286: | ||
local roznicaTekst | local roznicaTekst | ||
if roznica >= 0 then | if roznica >= 0 then | ||
| Linia 333: | Linia 354: | ||
wartosc = | wartosc = | ||
tostring(item.punkty | tostring(item.punkty) .. | ||
" pkt" | " pkt" | ||
| Linia 361: | Linia 382: | ||
wartosc = | wartosc = | ||
tostring(item.asysty | tostring(item.asysty) .. | ||
" as." | " as." | ||
| Linia 368: | Linia 389: | ||
wartosc = | wartosc = | ||
tostring(item.zbiorki | tostring(item.zbiorki) .. | ||
" zb." | " zb." | ||
| Linia 375: | Linia 396: | ||
wartosc = | wartosc = | ||
tostring(item.eval | tostring(item.eval) .. | ||
" EVAL" | " EVAL" | ||
| Linia 383: | Linia 404: | ||
local pm = | local pm = | ||
item.plusminus or 0 | item.plusminus or 0 | ||
if pm >= 0 then | if pm >= 0 then | ||
| Linia 515: | Linia 535: | ||
wyjazd = {} | wyjazd = {} | ||
} | } | ||
local najwyzszaPorazka = { | local najwyzszaPorazka = { | ||
| Linia 534: | Linia 553: | ||
druzyna | druzyna | ||
) | ) | ||
local zdobyte, | local zdobyte, | ||
| Linia 577: | Linia 595: | ||
wynik = | wynik = | ||
tostring( | tostring(zdobyte) .. | ||
":" .. | ":" .. | ||
tostring( | tostring(stracone) | ||
} | } | ||
| Linia 628: | Linia 642: | ||
local obecna = | local obecna = | ||
lista[1].przegrana | lista[1].przegrana | ||
| Linia 751: | Linia 760: | ||
} | } | ||
if zawodnicy then | if zawodnicy then | ||
| Linia 792: | Linia 797: | ||
row.minuty_format or "", | row.minuty_format or "", | ||
-- PUNKTY KOSZYKARSKIE | |||
-- przechowywane w polu gol | |||
punkty = | punkty = | ||
liczba(row.gol), | liczba(row.gol), | ||
| Linia 813: | Linia 820: | ||
-- ========================================= | -- ================================================= | ||
-- | -- KAŻDY REKORD MA WŁASNĄ WARTOŚĆ | ||
-- ========================================= | -- ================================================= | ||
dodajRekord( | dodajRekord( | ||
| Linia 824: | Linia 831: | ||
) | ) | ||
dodajRekord( | dodajRekord( | ||
| Linia 836: | Linia 839: | ||
) | ) | ||
dodajRekord( | dodajRekord( | ||
| Linia 848: | Linia 847: | ||
) | ) | ||
dodajRekord( | dodajRekord( | ||
| Linia 860: | Linia 855: | ||
) | ) | ||
dodajRekord( | dodajRekord( | ||
| Linia 872: | Linia 863: | ||
) | ) | ||
dodajRekord( | dodajRekord( | ||
| Linia 942: | Linia 929: | ||
druzyna | druzyna | ||
) | ) | ||
local zdobyte, | local zdobyte, | ||
| Linia 1113: | Linia 1099: | ||
-- | -- MECZOWE | ||
table.insert( | table.insert( | ||
| Linia 1192: | Linia 1176: | ||
-- | -- INDYWIDUALNE | ||
table.insert( | table.insert( | ||
| Linia 1221: | Linia 1203: | ||
) | ) | ||
-- ===================================================== | |||
-- KOLEJNOŚĆ STATYSTYK ZACHOWANA | |||
-- ===================================================== | |||
local rekordyLista = { | local rekordyLista = { | ||
| Linia 1303: | Linia 1289: | ||
-- SERIE | -- SERIE | ||
table.insert( | table.insert( | ||
| Linia 1504: | Linia 1488: | ||
wyjazd = {} | wyjazd = {} | ||
} | } | ||
local najwyzszaPorazka = { | local najwyzszaPorazka = { | ||
| Linia 1569: | Linia 1552: | ||
druzyna | druzyna | ||
) | ) | ||
local zdobyte, | local zdobyte, | ||
| Linia 1588: | Linia 1570: | ||
-- ============================================= | |||
-- WYNIK Z PERSPEKTYWY DRUŻYNY | -- WYNIK Z PERSPEKTYWY DRUŻYNY | ||
-- ============================================= | |||
local wynikPerspektywa = | local wynikPerspektywa = | ||
tostring( | tostring(zdobyte) .. | ||
":" .. | ":" .. | ||
tostring(stracone) | tostring(stracone) | ||
-- ============================================= | |||
-- NAJCZĘSTSZE WYNIKI | -- NAJCZĘSTSZE WYNIKI | ||
-- ============================================= | |||
najczestszeWyniki[ | najczestszeWyniki[ | ||
| Linia 1606: | Linia 1592: | ||
-- ============================================= | |||
-- ROZGRYWKI | -- ROZGRYWKI | ||
-- ============================================= | |||
local rozgrywki = | local rozgrywki = | ||
| Linia 1612: | Linia 1600: | ||
row.rozgrywki or "" | row.rozgrywki or "" | ||
) | ) | ||
if rozgrywki == "" then | if rozgrywki == "" then | ||
| Linia 1663: | Linia 1650: | ||
-- ============================================= | |||
-- REZULTAT | -- REZULTAT | ||
-- ============================================= | |||
local rezultat | local rezultat | ||
| Linia 1723: | Linia 1712: | ||
-- | -- ============================================= | ||
-- REKORD NAJWYŻSZEGO ZWYCIĘSTWA | |||
-- ============================================= | |||
if rezultat == "W" then | if rezultat == "W" then | ||
| Linia 1769: | Linia 1760: | ||
-- | -- ============================================= | ||
-- REKORD NAJWYŻSZEJ PORAŻKI | |||
-- ============================================= | |||
if rezultat == "P" then | if rezultat == "P" then | ||
| Linia 1822: | Linia 1815: | ||
-- ============================================= | |||
-- SERIA BEZ PORAŻKI | -- SERIA BEZ PORAŻKI | ||
-- ============================================= | |||
if rezultat == "W" | if rezultat == "W" | ||
| Linia 1854: | Linia 1849: | ||
-- SERIE | -- ============================================= | ||
-- SERIE WYGRANYCH / BEZ WYGRANEJ / PORAŻEK | |||
-- ============================================= | |||
local obszary = { | local obszary = { | ||
| Linia 1977: | Linia 1974: | ||
-- ===================================================== | |||
-- REKORDY MECZOWE | -- REKORDY MECZOWE | ||
-- ===================================================== | |||
table.insert( | table.insert( | ||
| Linia 2060: | Linia 2059: | ||
-- ===================================================== | |||
-- SERIE | -- SERIE | ||
-- ===================================================== | |||
table.insert( | table.insert( | ||
| Linia 2129: | Linia 2130: | ||
-- | -- ===================================================== | ||
-- WYNIKI | |||
-- ===================================================== | |||
table.insert( | table.insert( | ||
| Linia 2190: | Linia 2193: | ||
-- ===================================================== | |||
-- ROZGRYWKI | -- ROZGRYWKI | ||
-- ===================================================== | |||
table.insert( | table.insert( | ||
| Linia 2324: | Linia 2329: | ||
frame.args.sezon or "" | frame.args.sezon or "" | ||
) | ) | ||
local druzyna = | local druzyna = | ||
| Linia 2330: | Linia 2334: | ||
frame.args.druzyna or "" | frame.args.druzyna or "" | ||
) | ) | ||
local dyscyplina = | local dyscyplina = | ||
| Linia 2356: | Linia 2359: | ||
-- ===================================================== | |||
-- PIŁKA NOŻNA | -- PIŁKA NOŻNA | ||
-- ===================================================== | |||
if dyscyplina == "piłka nożna" | if dyscyplina == "piłka nożna" | ||
| Linia 2373: | Linia 2378: | ||
-- ===================================================== | |||
-- KOSZYKÓWKA | -- KOSZYKÓWKA | ||
-- ===================================================== | |||
if dyscyplina == "koszykówka" | if dyscyplina == "koszykówka" | ||
| Linia 2388: | Linia 2395: | ||
end | end | ||
-- ===================================================== | |||
-- BRAK ROZPOZNANIA | |||
-- ===================================================== | |||
return | return | ||
Wersja z 14:45, 20 sie 2026
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
-- =========================================================
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
-- =========================================================
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
-- =========================================================
-- FUNKCJA DODAWANIA REKORDU
--
-- WAŻNE:
-- item.wartosc jest ustawiane tutaj dla KAŻDEGO rekordu.
--
-- Dzięki temu:
-- punkty porównują punkty,
-- minuty porównują minuty,
-- asysty porównują asysty,
-- zbiórki porównują zbiórki,
-- EVAL porównuje EVAL,
-- plus/minus porównuje plus/minus.
-- =========================================================
local function dodajRekord(
tabela,
miejsce,
wartosc,
item
)
if wartosc == nil then
return
end
local lista =
tabela[miejsce]
-- KLUCZOWA POPRAWKA
item.wartosc = wartosc
if #lista == 0 then
table.insert(
lista,
item
)
return
end
local obecna =
lista[1].wartosc
if obecna == nil then
obecna = 0
end
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(zdobyte) ..
":" ..
tostring(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 KOSZYKARSKIE
-- przechowywane w polu gol
punkty =
liczba(row.gol),
minuty =
liczba(row.minuty),
asysty =
liczba(row.asysta),
zbiorki =
liczba(row.zbiorka),
eval =
liczba(row.eval),
plusminus =
liczba(row.plusminus)
}
-- =================================================
-- KAŻDY REKORD MA WŁASNĄ WARTOŚĆ
-- =================================================
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 =