Moduł:H2H: Różnice pomiędzy wersjami
Wygląd
Nie podano opisu zmian |
Nie podano opisu zmian |
||
| Linia 212: | Linia 212: | ||
"M.wynik_do_przerwy=wynik_do_przerwy", | "M.wynik_do_przerwy=wynik_do_przerwy", | ||
"M. | "M.kwarta1=kwarta1", | ||
"M. | "M.kwarta2=kwarta2", | ||
"M. | "M.kwarta3=kwarta3", | ||
"M. | "M.kwarta4=kwarta4", | ||
"M.dogrywka1=dogrywka1", | "M.dogrywka1=dogrywka1", | ||
| Linia 1216: | Linia 1216: | ||
{ | { | ||
nazwa = "1. kwarta", | nazwa = "1. kwarta", | ||
pole = " | pole = "kwarta1" | ||
}, | }, | ||
{ | { | ||
nazwa = "2. kwarta", | nazwa = "2. kwarta", | ||
pole = " | pole = "kwarta2" | ||
}, | }, | ||
{ | { | ||
nazwa = "3. kwarta", | nazwa = "3. kwarta", | ||
pole = " | pole = "kwarta3" | ||
}, | }, | ||
{ | { | ||
nazwa = "4. kwarta", | nazwa = "4. kwarta", | ||
pole = " | pole = "kwarta4" | ||
} | } | ||
| Linia 2443: | Linia 2443: | ||
out, | out, | ||
"| " .. | "| " .. | ||
(row. | (row.kwarta1 or "—") | ||
) | ) | ||
| Linia 2450: | Linia 2450: | ||
out, | out, | ||
"| " .. | "| " .. | ||
(row. | (row.kwarta2 or "—") | ||
) | ) | ||
| Linia 2457: | Linia 2457: | ||
out, | out, | ||
"| " .. | "| " .. | ||
(row. | (row.kwarta3 or "—") | ||
) | ) | ||
| Linia 2464: | Linia 2464: | ||
out, | out, | ||
"| " .. | "| " .. | ||
(row. | (row.kwarta4 or "—") | ||
) | ) | ||
Wersja z 11:00, 18 sie 2026
Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:H2H/opis
local p = {}
-- =========================================================
-- MODUŁ:H2H
--
-- Historia bezpośrednich spotkań dwóch drużyn.
--
-- team1 = drużyna analizowana
-- team2 = przeciwnik
--
-- Identyfikacja rywalizacji:
-- nazwa_statystyki1 / nazwa_statystyki2
--
-- Zawiera:
-- 1. Bilans ogółem / dom / wyjazd
-- 2. Trenerów team1
-- 3. Najlepszych strzelców obu drużyn
-- 4. Rekordy indywidualne team1
-- 5. Serie zwycięstw / porażek
-- 6. Analizę kwart
-- 7. Wszystkie mecze
-- 8. Dogrywkę 1 / 2 / 3
-- =========================================================
function p.main(frame)
local team1 = mw.text.trim(frame.args.team1 or "")
local team2 = mw.text.trim(frame.args.team2 or "")
if team1 == "" then
return "'''Błąd:''' nie podano team1."
end
if team2 == "" then
return "'''Błąd:''' nie podano team2."
end
-- =====================================================
-- FUNKCJE POMOCNICZE
-- =====================================================
local function sql(value)
value = tostring(value or "")
return mw.ustring.gsub(value, "'", "''")
end
local team1SQL = sql(team1)
local team2SQL = sql(team2)
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 procent(wygrane, mecze)
if not mecze or mecze == 0 then
return "0,0%"
end
local wynik =
string.format(
"%.1f",
(wygrane / mecze) * 100
)
wynik =
mw.ustring.gsub(
wynik,
"%.",
","
)
return wynik .. "%"
end
local function parseWynik(value)
if not value or value == "" then
return nil, nil
end
local a, b =
tostring(value):match(
"(%d+)%s*:%s*(%d+)"
)
if not a or not b then
return nil, nil
end
return tonumber(a), tonumber(b)
end
local function wynikDruzyny(row)
local g1 = liczba(row.gole1)
local g2 = liczba(row.gole2)
if row.ns1 == team1 then
return g1, g2
end
if row.ns2 == team1 then
return g2, g1
end
return nil, nil
end
local function miejsce(row)
if row.ns1 == team1 then
return "dom"
end
if row.ns2 == team1 then
return "wyjazd"
end
return nil
end
local function nazwaMeczu(row)
local d1 = row.druzyna1 or ""
local d2 = row.druzyna2 or ""
local strona = row.strona_meczu or ""
local tekst =
d1 .. " – " .. d2
if strona ~= "" then
return "[[" ..
strona ..
"|" ..
tekst ..
"]]"
end
return tekst
end
-- =====================================================
-- WARUNEK H2H
--
-- UWAGA:
-- Używamy nazw pól z aliasem M.
-- =====================================================
local whereH2H =
"(" ..
"(M.nazwa_statystyki1='" ..
team1SQL ..
"' AND M.nazwa_statystyki2='" ..
team2SQL ..
"')" ..
" OR " ..
"(M.nazwa_statystyki1='" ..
team2SQL ..
"' AND M.nazwa_statystyki2='" ..
team1SQL ..
"')" ..
")"
-- =====================================================
-- POBRANIE MECZÓW
-- =====================================================
local fieldsMecze = table.concat({
"M.id=mecz",
"M.data=data",
"M.sezon=sezon",
"M.druzyna1=druzyna1",
"M.druzyna2=druzyna2",
"M.nazwa_statystyki1=ns1",
"M.nazwa_statystyki2=ns2",
"M.gole1=gole1",
"M.gole2=gole2",
"M.wynik=wynik",
"M.wynik_do_przerwy=wynik_do_przerwy",
"M.kwarta1=kwarta1",
"M.kwarta2=kwarta2",
"M.kwarta3=kwarta3",
"M.kwarta4=kwarta4",
"M.dogrywka1=dogrywka1",
"M.dogrywka2=dogrywka2",
"M.dogrywka3=dogrywka3",
"M.hala=hala",
"M.widzowie=widzowie",
"M.sedziowie=sedziowie",
"M.strona_meczu=strona_meczu"
}, ",")
local mecze =
mw.ext.cargo.query(
"Mecze=M",
fieldsMecze,
{
where = whereH2H,
orderBy =
"M.data ASC",
limit = 5000
}
)
if not mecze or #mecze == 0 then
return
"'''Brak meczów pomiędzy ''" ..
team1 ..
"'' a ''" ..
team2 ..
"''.'''"
end
-- =====================================================
-- BILANS
-- TYLKO TEAM1
-- =====================================================
local bilans = {
wszystkie = {
mecze = 0,
wygrane = 0,
przegrane = 0,
punktyZdobyte = 0,
punktyStracone = 0
},
dom = {
mecze = 0,
wygrane = 0,
przegrane = 0,
punktyZdobyte = 0,
punktyStracone = 0
},
wyjazd = {
mecze = 0,
wygrane = 0,
przegrane = 0,
punktyZdobyte = 0,
punktyStracone = 0
}
}
-- =====================================================
-- SERIE
-- =====================================================
local serie = {
wszystkie = {
W = 0,
P = 0
},
dom = {
W = 0,
P = 0
},
wyjazd = {
W = 0,
P = 0
}
}
local aktualnaSeria = {
wszystkie = {
W = 0,
P = 0
},
dom = {
W = 0,
P = 0
},
wyjazd = {
W = 0,
P = 0
}
}
-- =====================================================
-- REKORDY MECZOWE
-- =====================================================
local rekordyMeczowe = {
zwyciestwo = {
dom = {},
wyjazd = {}
},
porazka = {
dom = {},
wyjazd = {}
}
}
local function dodajRekordMeczowy(
lista,
wartosc,
item
)
if #lista == 0 then
item.wartosc = wartosc
table.insert(
lista,
item
)
return
end
local obecna =
lista[1].wartosc
if wartosc > obecna then
item.wartosc = wartosc
lista = {
item
}
elseif wartosc == obecna then
item.wartosc = wartosc
table.insert(
lista,
item
)
end
return lista
end
-- =====================================================
-- PRZETWARZANIE MECZÓW
-- =====================================================
for _, row in ipairs(mecze) do
local zdobyte, stracone =
wynikDruzyny(row)
local miejsceMeczu =
miejsce(row)
if zdobyte and stracone and miejsceMeczu then
local wynikMeczu
if zdobyte > stracone then
wynikMeczu = "W"
elseif zdobyte < stracone then
wynikMeczu = "P"
else
wynikMeczu = "R"
end
-- =============================================
-- BILANS OGÓŁEM
-- =============================================
local b =
bilans.wszystkie
b.mecze =
b.mecze + 1
b.punktyZdobyte =
b.punktyZdobyte +
zdobyte
b.punktyStracone =
b.punktyStracone +
stracone
if wynikMeczu == "W" then
b.wygrane =
b.wygrane + 1
elseif wynikMeczu == "P" then
b.przegrane =
b.przegrane + 1
end
-- =============================================
-- BILANS DOM / WYJAZD
-- =============================================
local bm =
bilans[miejsceMeczu]
bm.mecze =
bm.mecze + 1
bm.punktyZdobyte =
bm.punktyZdobyte +
zdobyte
bm.punktyStracone =
bm.punktyStracone +
stracone
if wynikMeczu == "W" then
bm.wygrane =
bm.wygrane + 1
elseif wynikMeczu == "P" then
bm.przegrane =
bm.przegrane + 1
end
-- =============================================
-- REKORDY MECZOWE
-- =============================================
local item = {
tekst =
nazwaMeczu(row),
wynik =
tostring(
liczba(row.gole1)
) ..
":" ..
tostring(
liczba(row.gole2)
),
data =
row.data or "",
miejsce =
miejsceMeczu
}
local roznica =
zdobyte - stracone
if roznica > 0 then
local lista =
rekordyMeczowe.zwyciestwo[
miejsceMeczu
]
if #lista == 0 or
roznica > lista[1].wartosc then
rekordyMeczowe.zwyciestwo[
miejsceMeczu
] = {
item
}
item.wartosc =
roznica
elseif roznica ==
lista[1].wartosc then
item.wartosc =
roznica
table.insert(
lista,
item
)
end
elseif roznica < 0 then
local przegrana =
math.abs(roznica)
local lista =
rekordyMeczowe.porazka[
miejsceMeczu
]
if #lista == 0 or
przegrana > lista[1].wartosc then
item.wartosc =
przegrana
rekordyMeczowe.porazka[
miejsceMeczu
] = {
item
}
elseif przegrana ==
lista[1].wartosc then
item.wartosc =
przegrana
table.insert(
lista,
item
)
end
end
-- =============================================
-- SERIA OGÓŁEM
-- =============================================
if wynikMeczu == "W" then
aktualnaSeria.wszystkie.W =
aktualnaSeria.wszystkie.W + 1
aktualnaSeria.wszystkie.P = 0
if aktualnaSeria.wszystkie.W >
serie.wszystkie.W then
serie.wszystkie.W =
aktualnaSeria.wszystkie.W
end
elseif wynikMeczu == "P" then
aktualnaSeria.wszystkie.P =
aktualnaSeria.wszystkie.P + 1
aktualnaSeria.wszystkie.W = 0
if aktualnaSeria.wszystkie.P >
serie.wszystkie.P then
serie.wszystkie.P =
aktualnaSeria.wszystkie.P
end
else
aktualnaSeria.wszystkie.W = 0
aktualnaSeria.wszystkie.P = 0
end
-- =============================================
-- SERIA DOM / WYJAZD
-- =============================================
local s =
aktualnaSeria[miejsceMeczu]
local sr =
serie[miejsceMeczu]
if wynikMeczu == "W" then
s.W =
s.W + 1
s.P = 0
if s.W > sr.W then
sr.W = s.W
end
elseif wynikMeczu == "P" then
s.P =
s.P + 1
s.W = 0
if s.P > sr.P then
sr.P = s.P
end
else
s.W = 0
s.P = 0
end
end
end
-- =====================================================
-- REKORDY INDYWIDUALNE TEAM1
-- =====================================================
local rekordy = {
punkty = {
dom = {},
wyjazd = {}
},
minuty = {
dom = {},
wyjazd = {}
},
asysty = {
dom = {},
wyjazd = {}
},
zbiorki = {
dom = {},
wyjazd = {}
},
eval = {
dom = {},
wyjazd = {}
},
plusminus = {
dom = {},
wyjazd = {}
}
}
-- =====================================================
-- ZAWODNICY TEAM1
-- =====================================================
local fieldsZawodnicy = table.concat({
"U.zawodnik=zawodnik",
"U.druzyna=druzyna_zawodnika",
"U.gol=gol",
"U.minuty=minuty",
"U.minuty_format=minuty_format",
"U.asysta=asysta",
"U.zbiorka=zbiorka",
"U.eval=eval",
"U.plusminus=plusminus",
"M.id=mecz",
"M.data=data",
"M.druzyna1=druzyna1",
"M.druzyna2=druzyna2",
"M.nazwa_statystyki1=ns1",
"M.nazwa_statystyki2=ns2",
"M.gole1=gole1",
"M.gole2=gole2",
"M.wynik=wynik",
"M.strona_meczu=strona_meczu"
}, ",")
local zawodnicy =
mw.ext.cargo.query(
"UdzialZawodnika=U,Mecze=M",
fieldsZawodnicy,
{
join =
"U.mecz=M.id",
where =
whereH2H ..
" AND U.druzyna='" ..
team1SQL ..
"'" ..
" AND U.minuty > 0",
orderBy =
"M.data ASC",
limit = 10000
}
)
local function dodajRekordZawodnika(
tabela,
miejsceMeczu,
wartosc,
item
)
local lista =
tabela[miejsceMeczu]
if #lista == 0 then
item.wartosc =
wartosc
table.insert(
lista,
item
)
return
end
local obecna =
lista[1].wartosc
if wartosc > obecna then
item.wartosc =
wartosc
tabela[miejsceMeczu] = {
item
}
elseif wartosc == obecna then
item.wartosc =
wartosc
table.insert(
lista,
item
)
end
end
if zawodnicy then
for _, row in ipairs(zawodnicy) do
local miejsceMeczu =
miejsce(row)
if miejsceMeczu then
local item = {
zawodnik =
row.zawodnik or "",
mecz =
row.mecz or "",
data =
row.data or "",
tekst =
nazwaMeczu(row),
wynik =
row.wynik or "",
punkty =
liczba(row.gol),
minuty =
liczba(row.minuty),
minuty_format =
row.minuty_format or "",
asysty =
liczba(row.asysta),
zbiorki =
liczba(row.zbiorka),
eval =
liczba(row.eval),
plusminus =
liczba(row.plusminus)
}
dodajRekordZawodnika(
rekordy.punkty,
miejsceMeczu,
item.punkty,
item
)
dodajRekordZawodnika(
rekordy.minuty,
miejsceMeczu,
item.minuty,
item
)
-- WAŻNE:
-- asysty są liczone jako liczba.
-- Dzięki temu rekord dom/wyjazd
-- jest niezależny od pozostałych rekordów.
dodajRekordZawodnika(
rekordy.asysty,
miejsceMeczu,
item.asysty,
item
)
dodajRekordZawodnika(
rekordy.zbiorki,
miejsceMeczu,
item.zbiorki,
item
)
dodajRekordZawodnika(
rekordy.eval,
miejsceMeczu,
item.eval,
item
)
dodajRekordZawodnika(
rekordy.plusminus,
miejsceMeczu,
item.plusminus,
item
)
end
end
end
-- =====================================================
-- NAJLEPSI STRZELCY TEAM1
-- =====================================================
local strzelcy1Map = {}
if zawodnicy then
for _, row in ipairs(zawodnicy) do
local zawodnik =
row.zawodnik or ""
if zawodnik ~= "" then
strzelcy1Map[zawodnik] =
(strzelcy1Map[zawodnik] or 0)
+
liczba(row.gol)
end
end
end
-- =====================================================
-- NAJLEPSI STRZELCY TEAM2
--
-- OSOBNE ZAPYTANIE.
-- Dzięki temu team2 nie znika z tabeli.
-- =====================================================
local strzelcy2Map = {}
local zawodnicy2 =
mw.ext.cargo.query(
"UdzialZawodnika=U,Mecze=M",
"U.zawodnik=zawodnik,U.druzyna=druzyna,U.gol=gol,U.minuty=minuty",
{
join =
"U.mecz=M.id",
where =
whereH2H ..
" AND U.druzyna='" ..
team2SQL ..
"'" ..
" AND U.minuty > 0",
orderBy =
"M.data ASC",
limit = 10000
}
)
if zawodnicy2 then
for _, row in ipairs(zawodnicy2) do
local zawodnik =
row.zawodnik or ""
if zawodnik ~= "" then
strzelcy2Map[zawodnik] =
(strzelcy2Map[zawodnik] or 0)
+
liczba(row.gol)
end
end
end
local function uporzadkujStrzelcow(tablica)
local wynik = {}
for zawodnik, punkty
in pairs(tablica) do
table.insert(
wynik,
{
zawodnik = zawodnik,
punkty = punkty
}
)
end
table.sort(
wynik,
function(a, b)
if a.punkty == b.punkty then
return a.zawodnik < b.zawodnik
end
return a.punkty > b.punkty
end
)
return wynik
end
local strzelcy1 =
uporzadkujStrzelcow(
strzelcy1Map
)
local strzelcy2 =
uporzadkujStrzelcow(
strzelcy2Map
)
-- =====================================================
-- TRENERZY TEAM1
-- =====================================================
local trenerzy = {}
for _, row in ipairs(mecze) do
local sztabMeczu =
mw.ext.cargo.query(
"SztabMeczu",
"osoba,rola,druzyna",
{
where =
"SztabMeczu.mecz='" ..
sql(row.mecz or "") ..
"'" ..
" AND SztabMeczu.rola='Trener'" ..
" AND SztabMeczu.druzyna='" ..
team1SQL ..
"'",
limit = 10
}
)
if sztabMeczu and
#sztabMeczu > 0 then
local zdobyte, stracone =
wynikDruzyny(row)
if zdobyte and stracone then
for _, sztabRow
in ipairs(sztabMeczu) do
local trener =
sztabRow.osoba or ""
if trener ~= "" then
trenerzy[trener] =
trenerzy[trener] or {
mecze = 0,
wygrane = 0,
przegrane = 0,
punktyZdobyte = 0,
punktyStracone = 0
}
local t =
trenerzy[trener]
t.mecze =
t.mecze + 1
t.punktyZdobyte =
t.punktyZdobyte +
zdobyte
t.punktyStracone =
t.punktyStracone +
stracone
if zdobyte > stracone then
t.wygrane =
t.wygrane + 1
elseif zdobyte < stracone then
t.przegrane =
t.przegrane + 1
end
end
end
end
end
end
local listaTrenerow = {}
for trener, dane
in pairs(trenerzy) do
table.insert(
listaTrenerow,
{
trener = trener,
dane = dane
}
)
end
table.sort(
listaTrenerow,
function(a, b)
if a.dane.mecze ==
b.dane.mecze then
return a.trener <
b.trener
end
return a.dane.mecze >
b.dane.mecze
end
)
-- =====================================================
-- ANALIZA KWART
-- =====================================================
local kwarty = {
{
nazwa = "1. kwarta",
pole = "kwarta1"
},
{
nazwa = "2. kwarta",
pole = "kwarta2"
},
{
nazwa = "3. kwarta",
pole = "kwarta3"
},
{
nazwa = "4. kwarta",
pole = "kwarta4"
}
}
local analizaKwart = {}
for i = 1, 4 do
analizaKwart[i] = {
wygranaKwartaWygranyMecz = 0,
wygranaKwartaPrzegranyMecz = 0,
przegranaKwartaWygranyMecz = 0,
przegranaKwartaPrzegranyMecz = 0,
remisKwartaWygranyMecz = 0,
remisKwartaPrzegranyMecz = 0
}
end
for _, row in ipairs(mecze) do
local zdobyte, stracone =
wynikDruzyny(row)
if zdobyte and stracone then
local wynikMeczu
if zdobyte > stracone then
wynikMeczu = "W"
elseif zdobyte < stracone then
wynikMeczu = "P"
else
wynikMeczu = "R"
end
for i = 1, 4 do
local pole =
kwarty[i].pole
local a, b =
parseWynik(
row[pole]
)
if a and b then
local teamScore
local oppScore
if miejsce(row) == "dom" then
teamScore = a
oppScore = b
else
teamScore = b
oppScore = a
end
local dane =
analizaKwart[i]
if teamScore > oppScore then
if wynikMeczu == "W" then
dane.wygranaKwartaWygranyMecz =
dane.wygranaKwartaWygranyMecz + 1
elseif wynikMeczu == "P" then
dane.wygranaKwartaPrzegranyMecz =
dane.wygranaKwartaPrzegranyMecz + 1
end
elseif teamScore < oppScore then
if wynikMeczu == "W" then
dane.przegranaKwartaWygranyMecz =
dane.przegranaKwartaWygranyMecz + 1
elseif wynikMeczu == "P" then
dane.przegranaKwartaPrzegranyMecz =
dane.przegranaKwartaPrzegranyMecz + 1
end
else
if wynikMeczu == "W" then
dane.remisKwartaWygranyMecz =
dane.remisKwartaWygranyMecz + 1
elseif wynikMeczu == "P" then
dane.remisKwartaPrzegranyMecz =
dane.remisKwartaPrzegranyMecz + 1
end
end
end
end
end
end
-- =====================================================
-- FORMATOWANIE REKORDÓW INDYWIDUALNYCH
-- =====================================================
local function tekstRekordu(
lista,
typ
)
if not lista or #lista == 0 then
return "—"
end
local wynik = {}
for _, item in ipairs(lista) do
local wartosc = ""
if typ == "punkty" then
wartosc =
tostring(item.punkty) ..
" pkt"
elseif typ == "minuty" then
if item.minuty_format ~= "" then
wartosc =
item.minuty_format ..
" min"
else
wartosc =
tostring(item.minuty) ..
" min"
end
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
if item.plusminus >= 0 then
wartosc =
"+" ..
tostring(item.plusminus)
else
wartosc =
tostring(item.plusminus)
end
wartosc =
wartosc ..
" +/-"
end
table.insert(
wynik,
"[[" ..
item.zawodnik ..
"]] — " ..
wartosc ..
"<br>" ..
item.tekst ..
" (" ..
item.wynik ..
")"
)
end
return table.concat(
wynik,
"<br>"
)
end
-- =====================================================
-- GENEROWANIE
-- =====================================================
local out = {}
-- =====================================================
-- BILANS
-- =====================================================
table.insert(
out,
"== Bilans bezpośrednich spotkań =="
)
table.insert(
out,
""
)
table.insert(
out,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
out,
"! Zakres !! Mecze !! W !! P !! % wygranych !! Punkty zdobyte !! Punkty stracone"
)
local zakresy = {
{
nazwa = "Ogółem",
dane = bilans.wszystkie
},
{
nazwa = "🏠 Dom",
dane = bilans.dom
},
{
nazwa = "✈️ Wyjazd",
dane = bilans.wyjazd
}
}
for _, zakres in ipairs(zakresy) do
local d =
zakres.dane
table.insert(
out,
"|-"
)
table.insert(
out,
"! " ..
zakres.nazwa
)
table.insert(
out,
"| " ..
d.mecze
)
table.insert(
out,
"| " ..
d.wygrane
)
table.insert(
out,
"| " ..
d.przegrane
)
table.insert(
out,
"| " ..
procent(
d.wygrane,
d.mecze
)
)
table.insert(
out,
"| " ..
d.punktyZdobyte
)
table.insert(
out,
"| " ..
d.punktyStracone
)
end
table.insert(
out,
"|}"
)
-- =====================================================
-- TRENERZY
-- =====================================================
table.insert(
out,
""
)
table.insert(
out,
"== Trenerzy " ..
team1 ..
" w rywalizacji =="
)
table.insert(
out,
""
)
if #listaTrenerow == 0 then
table.insert(
out,
"Brak danych o trenerach."
)
else
table.insert(
out,
'{| class="wikitable sortable" style="width:100%; text-align:center;"'
)
table.insert(
out,
"! Trener !! Mecze !! W !! P !! % wygranych !! Punkty zdobyte !! Punkty stracone"
)
for _, trener
in ipairs(listaTrenerow) do
local d =
trener.dane
table.insert(
out,
"|-"
)
table.insert(
out,
"| [[" ..
trener.trener ..
"]]"
)
table.insert(
out,
"| " ..
d.mecze
)
table.insert(
out,
"| " ..
d.wygrane
)
table.insert(
out,
"| " ..
d.przegrane
)
table.insert(
out,
"| " ..
procent(
d.wygrane,
d.mecze
)
)
table.insert(
out,
"| " ..
d.punktyZdobyte
)
table.insert(
out,
"| " ..
d.punktyStracone
)
end
table.insert(
out,
"|}"
)
end
-- =====================================================
-- NAJLEPSI STRZELCY
-- =====================================================
table.insert(
out,
""
)
table.insert(
out,
"== Najlepsi strzelcy rywalizacji =="
)
table.insert(
out,
""
)
table.insert(
out,
'{| class="wikitable sortable" style="width:100%; text-align:center;"'
)
table.insert(
out,
"! " ..
team1 ..
" !! Punkty !! " ..
team2 ..
" !! Punkty"
)
local max =
math.max(
#strzelcy1,
#strzelcy2
)
for i = 1, max do
local s1 =
strzelcy1[i]
local s2 =
strzelcy2[i]
table.insert(
out,
"|-"
)
if s1 then
table.insert(
out,
"| [[" ..
s1.zawodnik ..
"]]"
)
table.insert(
out,
"| " ..
s1.punkty
)
else
table.insert(out, "|")
table.insert(out, "|")
end
if s2 then
table.insert(
out,
"| [[" ..
s2.zawodnik ..
"]]"
)
table.insert(
out,
"| " ..
s2.punkty
)
else
table.insert(out, "|")
table.insert(out, "|")
end
end
table.insert(
out,
"|}"
)
-- =====================================================
-- REKORDY INDYWIDUALNE
-- =====================================================
table.insert(
out,
""
)
table.insert(
out,
"== Rekordy indywidualne " ..
team1 ..
" =="
)
table.insert(
out,
""
)
table.insert(
out,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
out,
"! Rekord !! 🏠 Dom !! ✈️ Wyjazd"
)
local rekordyLista = {
{
nazwa = "🏀 Najwięcej punktów",
dane = rekordy.punkty,
typ = "punkty"
},
{
nazwa = "⏱️ Najwięcej minut",
dane = rekordy.minuty,
typ = "minuty"
},
{
nazwa = "🎯 Najwięcej asyst",
dane = rekordy.asysty,
typ = "asysty"
},
{
nazwa = "🏀 Najwięcej zbiórek",
dane = rekordy.zbiorki,
typ = "zbiorki"
},
{
nazwa = "⭐ Najwyższy EVAL",
dane = rekordy.eval,
typ = "eval"
},
{
nazwa = "➕ Najwyższy +/-",
dane = rekordy.plusminus,
typ = "plusminus"
}
}
for _, rekord
in ipairs(rekordyLista) do
table.insert(
out,
"|-"
)
table.insert(
out,
"! " ..
rekord.nazwa
)
table.insert(
out,
"| " ..
tekstRekordu(
rekord.dane.dom,
rekord.typ
)
)
table.insert(
out,
"| " ..
tekstRekordu(
rekord.dane.wyjazd,
rekord.typ
)
)
end
table.insert(
out,
"|}"
)
-- =====================================================
-- REKORDY MECZOWE
-- =====================================================
table.insert(
out,
""
)
table.insert(
out,
"== Rekordy meczowe =="
)
table.insert(
out,
""
)
table.insert(
out,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
out,
"! Rekord !! 🏠 Dom !! ✈️ Wyjazd"
)
local function tekstRekorduMeczowego(
lista,
typ
)
if not lista or #lista == 0 then
return "—"
end
local wynik = {}
for _, item in ipairs(lista) do
local roznica =
item.wartosc or 0
local tekst
if typ == "wygrana" then
tekst =
"+" ..
tostring(roznica)
else
tekst =
"-" ..
tostring(roznica)
end
table.insert(
wynik,
item.tekst ..
" (" ..
item.wynik ..
", " ..
tekst ..
")"
)
end
return table.concat(
wynik,
"<br>"
)
end
table.insert(
out,
"|-"
)
table.insert(
out,
"! 🏆 Najwyższe zwycięstwo"
)
table.insert(
out,
"| " ..
tekstRekorduMeczowego(
rekordyMeczowe.zwyciestwo.dom,
"wygrana"
)
)
table.insert(
out,
"| " ..
tekstRekorduMeczowego(
rekordyMeczowe.zwyciestwo.wyjazd,
"wygrana"
)
)
table.insert(
out,
"|-"
)
table.insert(
out,
"! ❌ Najwyższa porażka"
)
table.insert(
out,
"| " ..
tekstRekorduMeczowego(
rekordyMeczowe.porazka.dom,
"porazka"
)
)
table.insert(
out,
"| " ..
tekstRekorduMeczowego(
rekordyMeczowe.porazka.wyjazd,
"porazka"
)
)
table.insert(
out,
"|}"
)
-- =====================================================
-- SERIE
-- =====================================================
table.insert(
out,
""
)
table.insert(
out,
"== Serie zwycięstw i porażek =="
)
table.insert(
out,
""
)
table.insert(
out,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
out,
"! Seria !! Ogółem !! 🏠 Dom !! ✈️ Wyjazd"
)
table.insert(
out,
"|-"
)
table.insert(
out,
"! 🔥 Najdłuższa seria zwycięstw"
)
table.insert(
out,
"| " ..
serie.wszystkie.W
)
table.insert(
out,
"| " ..
serie.dom.W
)
table.insert(
out,
"| " ..
serie.wyjazd.W
)
table.insert(
out,
"|-"
)
table.insert(
out,
"! 📉 Najdłuższa seria porażek"
)
table.insert(
out,
"| " ..
serie.wszystkie.P
)
table.insert(
out,
"| " ..
serie.dom.P
)
table.insert(
out,
"| " ..
serie.wyjazd.P
)
table.insert(
out,
"|}"
)
-- =====================================================
-- ANALIZA KWART
-- =====================================================
table.insert(
out,
""
)
table.insert(
out,
"== Zależność wyniku kwarty od wyniku meczu =="
)
table.insert(
out,
""
)
table.insert(
out,
'{| class="wikitable" style="width:100%; text-align:center;"'
)
table.insert(
out,
"! Kwarta !! Wygrała kwartę<br>i wygrała mecz !! Wygrała kwartę<br>i przegrała mecz !! Przegrała kwartę<br>i wygrała mecz !! Przegrała kwartę<br>i przegrała mecz !! Remis kwarty<br>i wygrała mecz !! Remis kwarty<br>i przegrała mecz"
)
for i = 1, 4 do
local a =
analizaKwart[i]
table.insert(
out,
"|-"
)
table.insert(
out,
"! " ..
kwarty[i].nazwa
)
table.insert(
out,
"| " ..
a.wygranaKwartaWygranyMecz
)
table.insert(
out,
"| " ..
a.wygranaKwartaPrzegranyMecz
)
table.insert(
out,
"| " ..
a.przegranaKwartaWygranyMecz
)
table.insert(
out,
"| " ..
a.przegranaKwartaPrzegranyMecz
)
table.insert(
out,
"| " ..
a.remisKwartaWygranyMecz
)
table.insert(
out,
"| " ..
a.remisKwartaPrzegranyMecz
)
end
table.insert(
out,
"|}"
)
-- =====================================================
-- WSZYSTKIE MECZE
-- =====================================================
table.insert(
out,
""
)
table.insert(
out,
"== Historia spotkań =="
)
table.insert(
out,
""
)
table.insert(
out,
'{| class="wikitable sortable" style="width:100%; text-align:center;"'
)
table.insert(
out,
"! Data !! Sezon !! Mecz !! Wynik !! Miejsce !! Wynik do przerwy !! K1 !! K2 !! K3 !! K4 !! Dogrywka 1 !! Dogrywka 2 !! Dogrywka 3"
)
for _, row in ipairs(mecze) do
local m =
miejsce(row)
local miejsceTekst
if m == "dom" then
miejsceTekst = "🏠 Dom"
else
miejsceTekst = "✈️ Wyjazd"
end
table.insert(
out,
"|-"
)
table.insert(
out,
"| " ..
(row.data or "")
)
table.insert(
out,
"| " ..
(row.sezon or "")
)
table.insert(
out,
"| " ..
nazwaMeczu(row)
)
table.insert(
out,
"| '''" ..
liczba(row.gole1) ..
":" ..
liczba(row.gole2) ..
"'''"
)
table.insert(
out,
"| " ..
miejsceTekst
)
table.insert(
out,
"| " ..
(row.wynik_do_przerwy or "—")
)
table.insert(
out,
"| " ..
(row.kwarta1 or "—")
)
table.insert(
out,
"| " ..
(row.kwarta2 or "—")
)
table.insert(
out,
"| " ..
(row.kwarta3 or "—")
)
table.insert(
out,
"| " ..
(row.kwarta4 or "—")
)
table.insert(
out,
"| " ..
(row.dogrywka1 or "—")
)
table.insert(
out,
"| " ..
(row.dogrywka2 or "—")
)
table.insert(
out,
"| " ..
(row.dogrywka3 or "—")
)
end
table.insert(
out,
"|}"
)
-- =====================================================
-- KONIEC
-- =====================================================
return table.concat(
out,
"\n"
)
end
return p