Moduł:StatystykiHistoryczne: Różnice pomiędzy wersjami
Wygląd
Utworzono nową stronę "local p = {} -- ========================================================= -- MODUŁ: STATYSTYKIHISTORYCZNE -- -- Łączne statystyki wszystkich zawodników Enea Basket Poznań -- ze wszystkich sezonów znajdujących się w Cargo. -- -- Rankingi: -- MECZE -- PUNKTY -- MINUTY -- ASYSTY -- ZBIÓRKI -- BLOKI -- -- Dane: -- UdzialZawodnika -- -- Uwzględniani są WYŁĄCZNIE zawodnicy, -- dla których: -- -- druzyna = "Enea Basket Poznań" -- -- =======…" |
Nie podano opisu zmian |
||
| Linia 2: | Linia 2: | ||
-- ========================================================= | -- ========================================================= | ||
-- MODUŁ: | -- MODUŁ: STATYSTYKISTORYCZNE | ||
-- | -- | ||
-- Łączne statystyki | -- Łączne statystyki zawodników drużyny koszykarskiej | ||
-- ze wszystkich sezonów | -- ze wszystkich wprowadzonych sezonów. | ||
-- | -- | ||
-- | -- Tabele: | ||
-- | -- 1. Mecze | ||
-- | -- 2. Punkty | ||
-- | -- 3. Asysty | ||
-- | -- 4. Zbiórki | ||
-- | -- 5. Bloki | ||
-- | -- 6. Minuty | ||
-- | -- | ||
-- | -- Użycie: | ||
-- | -- | ||
-- | -- {{#invoke:StatystykiHistoryczne|main | ||
-- |druzyna=Enea Basket Poznań | |||
-- | -- }} | ||
-- | -- | ||
-- Moduł jest uniwersalny dla drużyn koszykarskich. | |||
-- ========================================================= | -- ========================================================= | ||
-- ========================================================= | -- ========================================================= | ||
-- | -- GŁÓWNA FUNKCJA | ||
-- ========================================================= | -- ========================================================= | ||
function p.main(frame) | |||
-- ----------------------------------------------------- | |||
-- DRUŻYNA | |||
-- ----------------------------------------------------- | |||
local druzyna = | |||
mw.text.trim( | |||
frame.args.druzyna or "" | |||
) | |||
if druzyna == "" then | |||
return | |||
"''Nie podano drużyny.''" | |||
end | end | ||
-- ----------------------------------------------------- | |||
-- BEZPIECZNE PRZYGOTOWANIE NAZWY DRUŻYNY | |||
-- ----------------------------------------------------- | |||
local druzynaSQL = | |||
mw.ustring.gsub( | |||
druzyna, | |||
"'", | |||
"''" | |||
) | |||
-- ===================================================== | |||
-- POLA CARGO | |||
-- ===================================================== | |||
local fields = table.concat({ | |||
"UdzialZawodnika.zawodnik=zawodnik", | |||
"UdzialZawodnika.druzyna=druzyna", | |||
"UdzialZawodnika.mecz=mecz", | |||
" | |||
"UdzialZawodnika.minuty=minuty", | |||
"UdzialZawodnika.minuty_format=minuty_format", | |||
"UdzialZawodnika.gol=gol", | |||
"UdzialZawodnika.asysta=asysta", | |||
"UdzialZawodnika.zbiorka=zbiorka", | |||
"UdzialZawodnika.blok=blok" | |||
"blok=blok" | |||
}, ",") | }, ",") | ||
| Linia 105: | Linia 89: | ||
-- ===================================================== | -- ===================================================== | ||
-- ZAPYTANIE | -- ZAPYTANIE CARGO | ||
-- ===================================================== | -- ===================================================== | ||
| Linia 117: | Linia 95: | ||
where = | where = | ||
"druzyna='" | "UdzialZawodnika.druzyna='" | ||
.. | .. druzynaSQL | ||
.. "'", | .. "'", | ||
limit = | limit = 5000 | ||
} | } | ||
| Linia 141: | Linia 119: | ||
return | return | ||
"''Brak | "''Brak statystyk dla drużyny " | ||
.. " | .. druzyna | ||
.. " w bazie.''" | |||
end | end | ||
| Linia 148: | Linia 127: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- STRUKTURA ZAWODNIKA | ||
-- ===================================================== | -- ===================================================== | ||
| Linia 155: | Linia 134: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- FUNKCJA NOWEGO REKORDU | ||
-- ===================================================== | -- ===================================================== | ||
local function nowyZawodnik() | |||
return { | |||
mecze = 0, | |||
punkty = 0, | |||
asysty = 0, | |||
zbiorki = 0, | |||
bloki = 0, | |||
minuty = 0 | |||
} | |||
end | |||
-- ===================================================== | |||
-- POMOCNICZA FUNKCJA LICZBOWA | |||
-- ===================================================== | |||
local function liczba(wartosc) | |||
return | |||
tonumber(wartosc or 0) | |||
or 0 | |||
end | |||
-- ===================================================== | |||
-- ZLICZANIE STATYSTYK | |||
-- ===================================================== | |||
for _, row in ipairs(rows) do | |||
local zawodnik = | |||
mw.text.trim( | |||
row.zawodnik or "" | |||
) | |||
if zawodnik ~= "" then | |||
if not zawodnicy[zawodnik] then | |||
zawodnicy[zawodnik] = | |||
nowyZawodnik() | |||
end | end | ||
| Linia 201: | Linia 199: | ||
-- --------------------------------------------- | -- --------------------------------------------- | ||
-- MECZ | -- MECZ | ||
-- --------------------------------------------- | -- --------------------------------------------- | ||
| Linia 217: | Linia 212: | ||
stat.punkty | stat.punkty | ||
+ liczba(row.gol) | + liczba(row.gol) | ||
| Linia 253: | Linia 239: | ||
stat.bloki | stat.bloki | ||
+ liczba(row.blok) | + liczba(row.blok) | ||
-- --------------------------------------------- | |||
-- MINUTY | |||
-- | |||
-- Cargo przechowuje minuty jako Integer. | |||
-- Przyjmujemy, że jest to liczba minut. | |||
-- --------------------------------------------- | |||
stat.minuty = | |||
stat.minuty | |||
+ liczba(row.minuty) | |||
end | end | ||
| Linia 263: | Linia 261: | ||
-- ===================================================== | -- ===================================================== | ||
local | local lista = {} | ||
| Linia 269: | Linia 267: | ||
table.insert( | table.insert( | ||
lista, | |||
{ | { | ||
zawodnik = zawodnik, | zawodnik = zawodnik, | ||
| Linia 280: | Linia 278: | ||
-- ===================================================== | -- ===================================================== | ||
-- | -- FORMATOWANIE MINUT | ||
-- ===================================================== | -- ===================================================== | ||
local function | local function formatujMinuty(minuty) | ||
minuty = | |||
tonumber(minuty) | |||
or 0 | |||
local godziny = | |||
math.floor( | |||
minuty / 60 | |||
) | ) | ||
local min = | |||
minuty % 60 | |||
return string.format( | |||
"%d:%02d", | |||
godziny, | |||
min | |||
) | |||
end | |||
-- ===================================================== | |||
-- LINK DO ZAWODNIKA | |||
-- | |||
-- Zakładamy, że strona zawodnika ma nazwę identyczną | |||
-- z polem "zawodnik" w Cargo. | |||
-- ===================================================== | |||
local function linkZawodnika(nazwa) | |||
return | |||
"[[" | |||
.. nazwa | |||
.. "|" | |||
.. nazwa | |||
.. "]]" | |||
end | end | ||
| Linia 340: | Linia 327: | ||
-- ===================================================== | -- ===================================================== | ||
-- GENEROWANIE | -- GENEROWANIE JEDNEJ TABELI | ||
-- ===================================================== | -- ===================================================== | ||
local function generujTabele( | local function generujTabele( | ||
tytul, | tytul, | ||
pole, | pole, | ||
formatWartosci, | formatWartosci, | ||
ikona | ikona | ||
) | |||
-- --------------------------------------------- | |||
-- SORTOWANIE | |||
-- --------------------------------------------- | |||
table.sort( | |||
lista, | |||
function(a, b) | |||
local wartoscA = | |||
a.stat[pole] | |||
or 0 | |||
local wartoscB = | |||
b.stat[pole] | |||
or 0 | |||
if wartoscA ~= wartoscB then | |||
return wartoscA > wartoscB | |||
end | |||
-- Przy remisie alfabetycznie | |||