5441
редагування
Admin (обговорення | внесок) Немає опису редагування |
Admin (обговорення | внесок) Немає опису редагування |
||
| Рядок 81: | Рядок 81: | ||
return nil, error_output("Player Not Found", player_name) | return nil, error_output("Player Not Found", player_name) | ||
end | |||
--- Генерує іконку медалі | |||
local function get_medal_icon(value) | |||
if not value or value == "" or value == " " then | |||
return nil | |||
end | |||
value = mw.text.trim(value) | |||
if value == "" then | |||
return nil | |||
elseif value == "1" then | |||
return "[[Файл:Gold.png|1-е Місце]]" | |||
elseif value == "2" then | |||
return "[[Файл:Silver.png|2-е Місце]]" | |||
elseif value == "3" then | |||
return "[[Файл:Bronze.png|3-є Місце]]" | |||
elseif value == "4" then | |||
return "[[Файл:Finalist.png|Фіналіст]]" | |||
elseif value == "S" or mw.ustring.match(value, "^S%d") then | |||
return "[[Файл:Star.png|Найкращий]]" | |||
else | |||
return nil | |||
end | |||
end | |||
--- Конвертує число в римські цифри | |||
local function to_roman(num) | |||
local romans = { | |||
{1000, "M"}, {900, "CM"}, {500, "D"}, {400, "CD"}, | |||
{100, "C"}, {90, "XC"}, {50, "L"}, {40, "XL"}, | |||
{10, "X"}, {9, "IX"}, {5, "V"}, {4, "IV"}, {1, "I"} | |||
} | |||
local result = "" | |||
for _, pair in ipairs(romans) do | |||
local value, letter = pair[1], pair[2] | |||
while num >= value do | |||
result = result .. letter | |||
num = num - value | |||
end | |||
end | |||
return result | |||
end | |||
--- Генерує посилання на турнір | |||
local function get_tournament_link(header_name) | |||
local season_num = mw.ustring.match(header_name, "([А-Яа-яЁёІіЇїЄєҐґ']+) сезон %(фінал%)") | |||
if not season_num then | |||
season_num = mw.ustring.match(header_name, "([А-Яа-яЁёІіЇїЄєҐґ']+) сезон %(рейтинг%)") | |||
end | |||
if season_num then | |||
local season_map = { | |||
["Перший"] = 1, ["Другий"] = 2, ["Третій"] = 3, | |||
["Четвертий"] = 4, ["П'ятий"] = 5, ["Шостий"] = 6, | |||
["Сьомий"] = 7, ["Восьмий"] = 8, ["Дев'ятий"] = 9 | |||
} | |||
local season_number = season_map[season_num] | |||
if season_number then | |||
local roman = to_roman(season_number) | |||
local type_text = "" | |||
if mw.ustring.find(header_name, "фінал") then | |||
type_text = "Фінал." | |||
elseif mw.ustring.find(header_name, "рейтинг") then | |||
type_text = "Рейтинг." | |||
end | |||
local clean_name = mw.ustring.gsub(header_name, "%s*%(фінал%)%s*", "") | |||
clean_name = mw.ustring.gsub(clean_name, "%s*%(рейтинг%)%s*", "") | |||
clean_name = mw.text.trim(clean_name) | |||
return string.format("[[%s|%s сезон. %s]]", clean_name, roman, type_text) | |||
end | |||
end | |||
return string.format("[[%s]]", header_name) | |||
end | end | ||
| Рядок 91: | Рядок 170: | ||
if not name or name == "" then | if not name or name == "" then | ||
return error_output("No Player Name", "") | return error_output("No Player Name", "") | ||
end | |||
-- Отримуємо дані з таблиці "Титули" | |||
local titles_data, err1 = get_player_row("Титули", name) | |||
if not titles_data then | |||
return err1 or "''Відсутні''" | |||
end | end | ||
-- Отримуємо дані з таблиці "Призові" | -- Отримуємо дані з таблиці "Призові" | ||
local prize_data | local prize_data = get_player_row("Призові", name) | ||
if | |||
-- Створюємо мапу призових для швидкого доступу | |||
local prize_map = {} | |||
if prize_data then | |||
for j = 1, #prize_data.headers do | |||
local header = prize_data.headers[j] | |||
local value = prize_data.cells[j] or "" | |||
prize_map[header] = value | |||
end | |||
end | end | ||
| Рядок 102: | Рядок 194: | ||
-- Пропускаємо першу колонку (ім'я гравця) | -- Пропускаємо першу колонку (ім'я гравця) | ||
for i = 2, # | for i = 2, #titles_data.cells do | ||
local | local cell_value = titles_data.cells[i] | ||
local header = | local header = titles_data.headers[i] | ||
if | if cell_value and cell_value ~= "" and cell_value ~= "-" and header then | ||
local medal = get_medal_icon(cell_value) | |||
local | |||
-- | if medal then | ||
-- Отримуємо призові з мапи (використовуємо точний заголовок з Титулів) | |||
local prize_value = prize_map[header] | |||
local prize_amount = "0 ₴" | |||
if prize_value and prize_value ~= "" and prize_value ~= "-" then | |||
-- Видаляємо символ ₴ якщо він вже є | |||
prize_value = mw.ustring.gsub(prize_value, "₴", "") | |||
prize_value = mw.text.trim(prize_value) | |||
if prize_value ~= "0" then | |||
prize_amount = prize_value .. " ₴" | |||
end | |||
end | |||
-- Форматуємо посилання на турнір | |||
local tournament_link = get_tournament_link(header) | |||
table.insert(results, { | table.insert(results, { | ||
tournament = | medal = medal, | ||
prize = | tournament = tournament_link, | ||
prize = prize_amount | |||
}) | }) | ||
end | end | ||
| Рядок 134: | Рядок 241: | ||
for _, result in ipairs(results) do | for _, result in ipairs(results) do | ||
table.insert(table_html, string.format( | table.insert(table_html, string.format( | ||
'| style="text-align:left;" | | '| style="text-align:left; padding-left:10px;" | %s %s || style="text-align:right;" | %s', | ||
result.medal, | |||
result.tournament, | result.tournament, | ||
result.prize | result.prize | ||