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
--
-- nazwa_statystyki1 / nazwa_statystyki2 służą do identyfikacji
-- drużyn niezależnie od historycznych nazw sponsorskich.
--
-- Zawiera:
-- 1. Bilans ogółem / dom / wyjazd
-- 2. Trenerów team1 w rywalizacji
-- 3. Najlepszych strzelców obu drużyn
-- 4. Rekordy indywidualne team1
-- 5. Serie zwycięstw / porażek
-- 6. Analizę kwart
-- 7. Wszystkie mecze
-- 8. Dogrywki 1, 2 i 3
-- =========================================================
function p.main(frame)
-- =====================================================
-- PARAMETRY
-- =====================================================
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
-- =====================================================
-- BEZPIECZEŃSTWO SQL
-- =====================================================
local function sql(value)
return mw.ustring.gsub(
tostring(value or ""),
"'",
"''"
)
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 =
mw.ustring.gsub(
tostring(value),
"%s+",
""
)
return tonumber(tekst) or 0
end
local function procent(wygrane, mecze)
if mecze == 0 then
return "0,0%"
end
local wartosc =
(wygrane / mecze) * 100
return string.format(
"%.1f%%",
wartosc
):gsub("%.", ",")
end
-- =====================================================
-- IDENTYFIKACJA 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
elseif 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 strona =
row.strona_meczu or ""
local tekst =
d1 .. " – " .. d2
if strona ~= "" then
return "[[" ..
strona ..
"|" ..
tekst ..
"]]"
end
return tekst
end
-- =====================================================
-- PARSOWANIE CZĘŚCI WYNIKU
-- =====================================================
local function parseWynikCzesciowy(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
-- =====================================================
-- WARUNEK H2H
-- =====================================================
local whereH2H =
"(" ..
"(Mecze.nazwa_statystyki1='" ..
team1SQL ..
"' AND " ..
"Mecze.nazwa_statystyki2='" ..
team2SQL ..
"')" ..
" OR " ..
"(Mecze.nazwa_statystyki1='" ..
team2SQL ..
"' AND " ..
"Mecze.nazwa_statystyki2='" ..
team1SQL ..
"')" ..
")"
-- =====================================================
-- POBRANIE MECZÓW
--
-- UWAGA:
-- pola nazywają się KWARTA1, KWARTA2 itd.
-- a nie KWART1.
-- =====================================================
local fieldsMecze = table.concat({
"Mecze.id=mecz",
"Mecze.data=data",
"Mecze.sezon=sezon",
"Mecze.druzyna1=druzyna1",
"Mecze.druzyna2=druzyna2",
"Mecze.nazwa_statystyki1=ns1",
"Mecze.nazwa_statystyki2=ns2",
"Mecze.gole1=gole1",
"Mecze.gole2=gole2",
"Mecze.wynik=wynik",
"Mecze.wynik_do_przerwy=wynik_do_przerwy",
"Mecze.kwarta1=kwarta1",
"Mecze.kwarta2=kwarta2",
"Mecze.kwarta3=kwarta3",
"Mecze.kwarta4=kwarta4",
"Mecze.dogrywka1=dogrywka1",
"Mecze.dogrywka2=dogrywka2",
"Mecze.dogrywka3=dogrywka3",
"Mecze.hala=hala",
"Mecze.widzowie=widzowie",
"Mecze.sedziowie=sedziowie",
"Mecze.strona_meczu=strona_meczu"
}, ",")
local mecze =
mw.ext.cargo.query(
"Mecze",
fieldsMecze,
{
where = whereH2H,
orderBy =
"Mecze.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
-- =============================================
-- 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
-- =============================================
-- DOM / WYJAZD
-- =============================================
local bd =
bilans[miejsceMeczu]
bd.mecze =
bd.mecze + 1
bd.punktyZdobyte =
bd.punktyZdobyte +
zdobyte
bd.punktyStracone =
bd.punktyStracone +
stracone
if wynikMeczu == "W" then
bd.wygrane =
bd.wygrane + 1
elseif wynikMeczu == "P" then
bd.przegrane =
bd.przegrane + 1
end
-- =============================================
-- REKORD MECZOWY
-- =============================================
local itemMeczu = {
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
itemMeczu.wartosc =
roznica
table.insert(
lista,
itemMeczu
)
elseif roznica >
lista[1].wartosc then
itemMeczu.wartosc =
roznica
rekordyMeczowe
.zwyciestwo
[miejsceMeczu] = {
itemMeczu
}
elseif roznica ==
lista[1].wartosc then
itemMeczu.wartosc =
roznica
table.insert(
lista,
itemMeczu
)
end
elseif roznica < 0 then
local wartosc =
math.abs(roznica)
local lista =
rekordyMeczowe
.porazka
[miejsceMeczu]
if #lista == 0 then
itemMeczu.wartosc =
wartosc
table.insert(
lista,
itemMeczu
)
elseif wartosc >
lista[1].wartosc then
itemMeczu.wartosc =
wartosc
rekordyMeczowe
.porazka
[miejsceMeczu] = {
itemMeczu
}
elseif wartosc ==
lista[1].wartosc then
itemMeczu.wartosc =
wartosc
table.insert(
lista,
itemMeczu
)
end
end
-- =============================================
-- SERIA OGÓŁEM
-- =============================================
local so =
aktualnaSeria.wszystkie
if wynikMeczu == "W" then
so.W =
so.W + 1
so.P = 0
if so.W >
serie.wszystkie.W then
serie.wszystkie.W =
so.W
end
elseif wynikMeczu == "P" then
so.P =
so.P + 1
so.W = 0
if so.P >
serie.wszystkie.P then
serie.wszystkie.P =
so.P
end
end
-- =============================================
-- SERIA DOM / WYJAZD
-- =============================================
local ss =
aktualnaSeria[miejsceMeczu]
local sr =
serie[miejsceMeczu]
if wynikMeczu == "W" then
ss.W =
ss.W + 1
ss.P = 0
if ss.W > sr.W then
sr.W = ss.W
end
elseif wynikMeczu == "P" then
ss.P =
ss.P + 1
ss.W = 0
if ss.P > sr.P then
sr.P = ss.P
end
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
--
-- WAŻNE:
-- zawodnik musi być po stronie właściwej drużyny
-- historycznej:
--
-- M.ns1 = team1 -> U.druzyna = M.druzyna1
-- M.ns2 = team1 -> U.druzyna = M.druzyna2
--
-- Dzięki temu zmiana sponsora nie psuje historii.
-- =====================================================
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 whereTeam1Players =
"(" ..
"(" ..
"M.nazwa_statystyki1='" ..
team1SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team2SQL ..
"' AND " ..
"U.druzyna=M.druzyna1" ..
")" ..
" OR " ..
"(" ..
"M.nazwa_statystyki1='" ..
team2SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team1SQL ..
"' AND " ..
"U.druzyna=M.druzyna2" ..
")" ..
")"
local zawodnicy =
mw.ext.cargo.query(
"UdzialZawodnika=U,Mecze=M",
fieldsZawodnicy,
{
join =
"U.mecz=M.id",
where =
whereTeam1Players ..
" AND U.minuty > 0",
orderBy =
"M.data ASC",
limit = 10000
}
)
-- =====================================================
-- FUNKCJA DODAWANIA REKORDU
--
-- WAŻNE:
-- tworzona jest kopia item.
--
-- Dzięki temu rekord asyst nie może zostać później
-- nadpisany przez rekord zbiórek/EVAL/+/-.
-- =====================================================
local function kopiaItem(item, wartosc)
return {
zawodnik =
item.zawodnik,
mecz =
item.mecz,
data =
item.data,
tekst =
item.tekst,
wynik =
item.wynik,
punkty =
item.punkty,
minuty =
item.minuty,
minuty_format =
item.minuty_format,
asysty =
item.asysty,
zbiorki =
item.zbiorki,
eval =
item.eval,
plusminus =
item.plusminus,
wartosc =
wartosc
}
end
local function dodajRekordZawodnika(
tabela,
miejsceMeczu,
wartosc,
item
)
local lista =
tabela[miejsceMeczu]
if #lista == 0 then
table.insert(
lista,
kopiaItem(
item,
wartosc
)
)
return
end
local obecna =
lista[1].wartosc
if wartosc > obecna then
tabela[miejsceMeczu] = {
kopiaItem(
item,
wartosc
)
}
elseif wartosc == obecna then
table.insert(
lista,
kopiaItem(
item,
wartosc
)
)
end
end
-- =====================================================
-- PRZETWARZANIE ZAWODNIKÓW
-- =====================================================
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
)
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
-- OBU DRUŻYN
-- =====================================================
local strzelcy = {
[team1] = {},
[team2] = {}
}
local function dodajStrzelca(
tabela,
zawodnik,
punkty
)
if zawodnik == nil or
zawodnik == "" then
return
end
tabela[zawodnik] =
(
tabela[zawodnik] or 0
)
+
punkty
end
-- =====================================================
-- ZAWODNICY OBU DRUŻYN
-- =====================================================
local zawodnicyWszyscy =
mw.ext.cargo.query(
"UdzialZawodnika=U,Mecze=M",
table.concat({
"U.zawodnik=zawodnik",
"U.druzyna=druzyna",
"U.gol=gol",
"U.minuty=minuty",
"M.id=mecz",
"M.druzyna1=druzyna1",
"M.druzyna2=druzyna2",
"M.nazwa_statystyki1=ns1",
"M.nazwa_statystyki2=ns2"
}, ","),
{
join =
"U.mecz=M.id",
where =
"(" ..
"(" ..
"M.nazwa_statystyki1='" ..
team1SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team2SQL ..
"' AND " ..
"U.druzyna=M.druzyna1" ..
")" ..
" OR " ..
"(" ..
"M.nazwa_statystyki1='" ..
team2SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team1SQL ..
"' AND " ..
"U.druzyna=M.druzyna2" ..
")" ..
")" ..
" AND U.minuty > 0",
limit = 20000
}
)
if zawodnicyWszyscy then
for _, row
in ipairs(zawodnicyWszyscy) do
local druzyna = ""
if row.ns1 == team1 and
row.druzyna == row.druzyna1 then
druzyna = team1
elseif row.ns2 == team1 and
row.druzyna == row.druzyna2 then
druzyna = team1
elseif row.ns1 == team2 and
row.druzyna == row.druzyna1 then
druzyna = team2
elseif row.ns2 == team2 and
row.druzyna == row.druzyna2 then
druzyna = team2
end
if druzyna == team1 then
dodajStrzelca(
strzelcy[team1],
row.zawodnik,
liczba(row.gol)
)
elseif druzyna == team2 then
dodajStrzelca(
strzelcy[team2],
row.zawodnik,
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(
strzelcy[team1]
)
local strzelcy2 =
uporzadkujStrzelcow(
strzelcy[team2]
)
-- =====================================================
-- TRENERZY TEAM1
-- =====================================================
local trenerzy = {}
-- =====================================================
-- POBIERAMY SZTAB WSZYSTKICH MECZÓW
-- =====================================================
local sztab =
mw.ext.cargo.query(
"SztabMeczu=S,Mecze=M",
table.concat({
"S.osoba=osoba",
"S.druzyna=druzyna",
"S.rola=rola",
"M.id=mecz",
"M.druzyna1=druzyna1",
"M.druzyna2=druzyna2",
"M.nazwa_statystyki1=ns1",
"M.nazwa_statystyki2=ns2"
}, ","),
{
join =
"S.mecz=M.id",
where =
"S.rola='Trener'" ..
" AND " ..
"(" ..
"(" ..
"M.nazwa_statystyki1='" ..
team1SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team2SQL ..
"' AND " ..
"S.druzyna=M.druzyna1" ..
")" ..
" OR " ..
"(" ..
"M.nazwa_statystyki1='" ..
team2SQL ..
"' AND " ..
"M.nazwa_statystyki2='" ..
team1SQL ..
"' AND " ..
"S.druzyna=M.druzyna2" ..
")" ..
")",
limit = 10000
}
)
-- =====================================================
-- TWORZENIE LISTY TRENERÓW
-- =====================================================
if sztab then
for _, row in ipairs(sztab) do
local trener =
row.osoba or ""
if trener ~= "" then
trenerzy[trener] =
trenerzy[trener] or {
mecze = 0,
wygrane = 0,
przegrane = 0,
punktyZdobyte = 0,
punktyStracone = 0
}
end
end
end
-- =====================================================
-- STATYSTYKI TRENERÓW
-- =====================================================
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='" ..
sql(
row.ns1 == team1
and row.druzyna1
or row.druzyna2
) ..
"'",
limit = 10
}
)
if sztabMeczu and
#sztabMeczu > 0 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 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
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
--
-- UWAGA:
-- pola Cargo:
-- kwarta1
-- kwarta2
-- kwarta3
-- kwarta4
--
-- a nie kwart1 itd.
-- =====================================================
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 =
parseWynikCzesciowy(
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
if teamScore >
oppScore then
if wynikMeczu == "W" then
analizaKwart[i].
wygranaKwartaWygranyMecz =
analizaKwart[i].
wygranaKwartaWygranyMecz + 1
elseif wynikMeczu == "P" then
analizaKwart[i].
wygranaKwartaPrzegranyMecz =
analizaKwart[i].
wygranaKwartaPrzegranyMecz + 1
end
elseif teamScore <
oppScore then
if wynikMeczu == "W" then
analizaKwart[i].
przegranaKwartaWygranyMecz =
analizaKwart[i].
przegranaKwartaWygranyMecz + 1
elseif wynikMeczu == "P" then
analizaKwart[i].
przegranaKwartaPrzegranyMecz =
analizaKwart[i].
przegranaKwartaPrzegranyMecz + 1
end
else
if wynikMeczu == "W" then
analizaKwart[i].
remisKwartaWygranyMecz =
analizaKwart[i].
remisKwartaWygranyMecz + 1
elseif wynikMeczu == "P" then
analizaKwart[i].
remisKwartaPrzegranyMecz =
analizaKwart[i].
remisKwartaPrzegranyMecz + 1
end
end
end
end
end
end
-- =====================================================
-- GENEROWANIE WYNIKU
-- =====================================================
local out = {}
-- =====================================================
-- BILANS
-- =====================================================
table.insert(
out,
"== Bilans bezpośrednich spotkań =="
)
table.insert(
out,
""
)
table.insert(
out,
'{| class="wikitable sortable" style="width:100%; text-align:center;"'
)
table.insert(
out,
"! Zakres !! Mecze !! Wygrane !! Przegrane !! % 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
table.insert(
out,
"|-"
)
local s1 =
strzelcy1[i]
local s2 =
strzelcy2[i]
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 =
"+" ..
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,
"! " ..
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 "—")
)
-- =============================================
-- KWARTA 1
-- =============================================
table.insert(
out,
"| " ..
(row.kwarta1 or "—")
)
-- =============================================
-- KWARTA 2
-- =============================================
table.insert(
out,
"| " ..
(row.kwarta2 or "—")
)
-- =============================================
-- KWARTA 3
-- =============================================
table.insert(
out,
"| " ..
(row.kwarta3 or "—")
)
-- =============================================
-- KWARTA 4
-- =============================================
table.insert(
out,
"| " ..
(row.kwarta4 or "—")
)
-- =============================================
-- DOGRYWKA 1
-- =============================================
table.insert(
out,
"| " ..
(row.dogrywka1 or "—")
)
-- =============================================
-- DOGRYWKA 2
-- =============================================
table.insert(
out,
"| " ..
(row.dogrywka2 or "—")
)
-- =============================================
-- DOGRYWKA 3
-- =============================================
table.insert(
out,
"| " ..
(row.dogrywka3 or "—")
)
end
table.insert(
out,
"|}"
)
-- =====================================================
-- KONIEC
-- =====================================================
return table.concat(
out,
"\n"
)
end
return p