Moduł:H2H
Wygląd
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:
-- Mecze.nazwa_statystyki1
-- Mecze.nazwa_statystyki2
--
-- Dzięki temu zmiana nazwy sponsorskiej nie rozbija H2H.
--
-- 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. Dogrywka 1, 2 i 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
-- =====================================================
-- SQL
-- =====================================================
local function sql(value)
return mw.ustring.gsub(value, "'", "''")
end
local team1SQL = sql(team1)
local team2SQL = sql(team2)
-- =====================================================
-- FUNKCJE POMOCNICZE
-- =====================================================
local function liczba(value)
if value == nil or value == "" then
return 0
end
local tekst = tostring(value)
tekst = mw.ustring.gsub(
tekst,
"%s+",
""
)
-- WAŻNE:
-- nie przekazujemy bezpośrednio gsub() do tonumber(),
-- ponieważ gsub zwraca dwa wyniki.
return tonumber(tekst) or 0
end
local function procent(wygrane, mecze)
if not mecze or mecze == 0 then
return "0,0%"
end
local wartosc =
(wygrane / mecze) * 100
local tekst =
string.format(
"%.1f",
wartosc
)
tekst =
mw.ustring.gsub(
tekst,
"%.",
","
)
return tekst .. "%"
end
-- =====================================================
-- USTALENIE STRONY TEAM1
-- =====================================================
local function miejsce(row)
if row.ns1 == team1 then
return "dom"
end
if row.ns2 == team1 then
return "wyjazd"
end
return nil
end
-- =====================================================
-- WYNIK TEAM1
-- =====================================================
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
-- =====================================================
-- NAZWA MECZU
-- =====================================================
local function nazwaMeczu(row)
local d1 = row.druzyna1 or ""
local d2 = row.druzyna2 or ""
local tekst =
d1 .. " – " .. d2
local strona =
row.strona_meczu or ""
if strona ~= "" then
return "[[" ..
strona ..
"|" ..
tekst ..
"]]"
end
return tekst
end
-- =====================================================
-- PARSOWANIE KWARTY
-- =====================================================
local function parseCzesciowy(value)
if value == nil or value == "" then
return nil, nil
end
local tekst =
tostring(value)
local a, b =
tekst:match(
"(%d+)%s*:%s*(%d+)"
)
if not a or not b then
return nil, nil
end
return tonumber(a), tonumber(b)
end
-- =====================================================
-- 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 =
"(" ..
"(M.nazwa_statystyki1='" ..
team1SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team2SQL ..
"')" ..
" OR " ..
"(M.nazwa_statystyki1='" ..
team2SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team1SQL ..
"')" ..
")",
orderBy =
"M.data ASC",
limit = 5000
}
)
if not mecze or #mecze == 0 then
return
"'''Brak meczów pomiędzy ''" ..
team1 ..
"'' a ''" ..
team2 ..
"''.'''"
end
-- =====================================================
-- BILANS
-- =====================================================
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
lista = {
item
}
item.wartosc = wartosc
return lista
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
-- =============================================
b =
bilans[miejsceMeczu]
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
-- =============================================
-- 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 then
item.wartosc = roznica
table.insert(
lista,
item
)
else
local obecna =
lista[1].wartosc
if roznica > obecna then
item.wartosc =
roznica
rekordyMeczowe.
zwyciestwo[miejsceMeczu] = {
item
}
elseif roznica == obecna then
item.wartosc =
roznica
table.insert(
lista,
item
)
end
end
elseif roznica < 0 then
local przegrana =
math.abs(roznica)
local lista =
rekordyMeczowe.
porazka[miejsceMeczu]
if #lista == 0 then
item.wartosc =
przegrana
table.insert(
lista,
item
)
else
local obecna =
lista[1].wartosc
if przegrana > obecna then
item.wartosc =
przegrana
rekordyMeczowe.
porazka[miejsceMeczu] = {
item
}
elseif przegrana == obecna then
item.wartosc =
przegrana
table.insert(
lista,
item
)
end
end
end
-- =============================================
-- SERIA OGÓŁEM
-- =============================================
local s =
aktualnaSeria.wszystkie
local sr =
serie.wszystkie
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
-- =============================================
-- SERIA DOM / WYJAZD
-- =============================================
s =
aktualnaSeria[miejsceMeczu]
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
-- =====================================================
-- ZAWODNICY
--
-- JEDNO zapytanie dla obu drużyn.
--
-- Nie filtrujemy U.druzyna po nazwie team1/team2,
-- ponieważ nazwa sponsora może się zmieniać.
-- =====================================================
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 =
"(" ..
"(M.nazwa_statystyki1='" ..
team1SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team2SQL ..
"')" ..
" OR " ..
"(M.nazwa_statystyki1='" ..
team2SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team1SQL ..
"')" ..
")" ..
" AND U.minuty > 0",
orderBy =
"M.data ASC",
limit = 20000
}
)
-- =====================================================
-- OKREŚLENIE, DLA KTÓREJ DRUŻYNY GRAŁ ZAWODNIK
-- =====================================================
local function stronaZawodnika(row)
local d =
row.druzyna_zawodnika or ""
if row.ns1 == team1
and d == (row.druzyna1 or "") then
return team1
end
if row.ns2 == team1
and d == (row.druzyna2 or "") then
return team1
end
if row.ns1 == team2
and d == (row.druzyna1 or "") then
return team2
end
if row.ns2 == team2
and d == (row.druzyna2 or "") then
return team2
end
return nil
end
-- =====================================================
-- REKORDY INDYWIDUALNE TEAM1
-- =====================================================
local rekordy = {
punkty = {
dom = {},
wyjazd = {}
},
minuty = {
dom = {},
wyjazd = {}
},
asysty = {
dom = {},
wyjazd = {}
},
zbiorki = {
dom = {},
wyjazd = {}
},
eval = {
dom = {},
wyjazd = {}
},
plusminus = {
dom = {},
wyjazd = {}
}
}
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
-- =====================================================
-- STRZELCY OBU DRUŻYN + REKORDY TEAM1
-- =====================================================
local strzelcy = {
[team1] = {},
[team2] = {}
}
if zawodnicy then
for _, row in ipairs(zawodnicy) do
local strona =
stronaZawodnika(row)
if strona == team1
or strona == team2 then
local zawodnik =
row.zawodnik or ""
if zawodnik ~= "" then
strzelcy[strona][zawodnik] =
(
strzelcy[strona][zawodnik]
or 0
)
+
liczba(row.gol)
end
end
-- =============================================
-- REKORDY TYLKO TEAM1
-- =============================================
if strona == team1 then
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
)
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
end
-- =====================================================
-- SORTOWANIE STRZELCÓW
-- =====================================================
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(
strzelcy[team1]
)
local strzelcy2 =
uporzadkujStrzelcow(
strzelcy[team2]
)
-- =====================================================
-- TRENERZY TEAM1
-- =====================================================
local trenerzy = {}
-- Pobieramy wszystkich trenerów w tych meczach.
local sztab =
mw.ext.cargo.query(
"SztabMeczu=S,Mecze=M",
table.concat({
"S.mecz=mecz",
"S.osoba=osoba",
"S.druzyna=druzyna",
"S.rola=rola"
}, ","),
{
join =
"S.mecz=M.id",
where =
"S.rola='Trener'" ..
" AND S.druzyna='" ..
team1SQL ..
"'" ..
" AND (" ..
"(M.nazwa_statystyki1='" ..
team1SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team2SQL ..
"')" ..
" OR " ..
"(M.nazwa_statystyki1='" ..
team2SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team1SQL ..
"')" ..
")",
limit = 5000
}
)
-- mapa mecz -> trener
local trenerMecz = {}
if sztab then
for _, row in ipairs(sztab) do
local mecz =
row.mecz or ""
local trener =
row.osoba or ""
if mecz ~= ""
and trener ~= "" then
trenerMecz[mecz] =
trener
end
end
end
-- =====================================================
-- STATYSTYKI TRENERÓW
-- =====================================================
for _, row in ipairs(mecze) do
local trener =
trenerMecz[row.mecz or ""]
if trener and trener ~= "" then
trenerzy[trener] =
trenerzy[trener] or {
mecze = 0,
wygrane = 0,
przegrane = 0,
punktyZdobyte = 0,
punktyStracone = 0
}
local zdobyte, stracone =
wynikDruzyny(row)
if zdobyte and stracone then
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
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 polaKwart = {
"kwarta1",
"kwarta2",
"kwarta3",
"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 a, b =
parseCzesciowy(
row[polaKwart[i]]
)
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
-- =====================================================
-- 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 !! " .. team1
)
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 ..
"''' meczów<br>" ..
"Wygrane: '''" ..
d.wygrane ..
"'''<br>" ..
"Przegrane: '''" ..
d.przegrane ..
"'''<br>" ..
"% wygranych: '''" ..
procent(
d.wygrane,
d.mecze
) ..
"'''<br>" ..
"Punkty zdobyte: '''" ..
d.punktyZdobyte ..
"'''<br>" ..
"Punkty stracone: '''" ..
d.punktyStracone ..
"'''"
)
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)
if not lista or #lista == 0 then
return "—"
end
local wynik = {}
for _, item in ipairs(lista) do
table.insert(
wynik,
item.tekst ..
" (" ..
item.wynik ..
", różnica +" ..
item.wartosc ..
")"
)
end
return table.concat(
wynik,
"<br>"
)
end
table.insert(
out,
"|-"
)
table.insert(
out,
"! 🏆 Najwyższe zwycięstwo"
)
table.insert(
out,
"| " ..
tekstRekorduMeczowego(
rekordyMeczowe.zwyciestwo.dom
)
)
table.insert(
out,
"| " ..
tekstRekorduMeczowego(
rekordyMeczowe.zwyciestwo.wyjazd
)
)
table.insert(
out,
"|-"
)
table.insert(
out,
"! ❌ Najwyższa porażka"
)
local function tekstPorazki(lista)
if not lista or #lista == 0 then
return "—"
end
local wynik = {}
for _, item in ipairs(lista) do
table.insert(
wynik,
item.tekst ..
" (" ..
item.wynik ..
", różnica -" ..
item.wartosc ..
")"
)
end
return table.concat(
wynik,
"<br>"
)
end
table.insert(
out,
"| " ..
tekstPorazki(
rekordyMeczowe.porazka.dom
)
)
table.insert(
out,
"| " ..
tekstPorazki(
rekordyMeczowe.porazka.wyjazd
)
)
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
-- =====================================================
-- 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 maxStrzelcow =
math.max(
#strzelcy1,
#strzelcy2
)
for i = 1, maxStrzelcow 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 TEAM1
-- =====================================================
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"
}
}
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 =
item.punkty ..
" pkt"
elseif typ == "minuty" then
wartosc =
item.minuty_format
if wartosc == "" then
wartosc =
tostring(
item.minuty
) ..
" min"
end
elseif typ == "asysty" then
wartosc =
item.asysty ..
" as."
elseif typ == "zbiorki" then
wartosc =
item.zbiorki ..
" zb."
elseif typ == "eval" then
wartosc =
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
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,
"|}"
)
-- =====================================================
-- 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,
"! " ..
tostring(i) ..
". kwarta"
)
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,
"|}"
)
-- =====================================================
-- HISTORIA WSZYSTKICH MECZÓW
-- =====================================================
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 !! Kwarta 1 !! Kwarta 2 !! Kwarta 3 !! Kwarta 4 !! 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,
"| '''" ..
tostring(
liczba(row.gole1)
) ..
":" ..
tostring(
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