Модуль:Dante: различия между версиями

Материал из Space Stories Wiki
(Создана пустая страница)
 
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
local p = {}


-- Цвета для каждого отдела
local department_colors = {
    ["Командование"] = "#372686",  -- фиолетовый
    ["Медицинский Отдел"] = "#28a745",  -- зелёный
    ["Служба безопасности"] = "#dc3545",  -- красный
    ["Антагонисты"] = "#ffc107"  -- жёлтый
}
-- Список ролей с иконками
local roles = {
    ["Командование"] = {
        {role = "Капитан", icon = "File:Капитан.png"},
        {role = "Глава персонала", icon = "File:Глава_Персонала.png"},
        {role = "Глава службы безопасности", icon = "File:Глава Службы Безопасности.png"},
        {role = "Старший Инженер", icon = "File:Старший_инженер.png"},
        {role = "Научный руководитель", icon = "File:Научный руководитель.png"},
        {role = "Главный врач", icon = "File:Главный врач.png"},
        {role = "Квартирмейстер", icon = "File:Квартирмейстер.png"}
    }
    -- Добавь сюда другие отделы, если нужно
}
-- Основная функция для генерации HTML
function p.roles(frame)
    local department = frame.args[1] or "Неизвестно"
    local list = roles[department]
    local color = department_colors[department] or "#FFFFFF"  -- белый, если цвет не найден
    if not list then
        return "<b>Неизвестный отдел: " .. department .. "</b>"
    end
    -- Начинаем формировать HTML
    local out = {}
    table.insert(out, string.format(
        '<div class="nomobile"><div class="biglink" style="margin:0px; text-shadow: 2px 3px black, 3px 5px %s; text-align: center; font-size: 40px; line-height:50px"><span class="sprite">[[File:cmd_dep.png|64px|link=%s]]</span> [[%s]]</div>',
        color, department, department
    ))
    table.insert(out, "<center><b>Глава отдела: [[Капитан]]<br>[[Радио|Канал отдела '':к'']]</b></center>")
   
    -- Выводим заголовок для сотрудников отдела
    table.insert(out, string.format('<div style="padding:2px;background:%s;border-radius:.3em;margin-bottom:.2em"><center><b>Сотрудники отдела:</b></center></div>', color))
   
    -- Разделим роли на две части (чтобы было удобнее)
    local role_section1 = {}
    local role_section2 = {}
   
    -- Перебираем роли и добавляем их в разделы
    for i, roleData in ipairs(list) do
        local role_html = string.format(
            '<div style="display:flex; flex-direction:column; align-items:center; padding:5px;"><div><br>[[%s]]</div><div class="sprite">[[%s|146x146px|link=%s]]</div></div>',
            roleData.role, roleData.icon, roleData.role
        )
        if i <= math.ceil(#list / 2) then
            table.insert(role_section1, role_html)
        else
            table.insert(role_section2, role_html)
        end
    end
   
    -- Вставляем разделы ролей в HTML
    table.insert(out, '<div style="display:flex; width:55%; justify-content:space-around; flex-wrap:wrap">')
    table.insert(out, table.concat(role_section1, "\n"))
    table.insert(out, '</div>')
    table.insert(out, '<div style="display:flex; width:65%; justify-content:space-around; flex-wrap:wrap">')
    table.insert(out, table.concat(role_section2, "\n"))
    table.insert(out, '</div>')
    -- Заключение с дополнительной информацией
    table.insert(out, string.format(
        '<div style="padding:2px;background:%s;border-radius:.3em;margin-bottom:.2em"><center><b>Связанные руководства:</b></center></div>',
        color
    ))
    table.insert(out, "<center>[[Стандартные Рабочие Процедуры (Командование)]] • [[Задачи станции]]</center>")
    table.insert(out, "<br></div>")
    -- Возвращаем сгенерированный HTML
    return table.concat(out, "\n")
end
return p

Текущая версия от 22:43, 20 апреля 2025

Для документации этого модуля может быть создана страница Модуль:Dante/doc

local p = {}

-- Цвета для каждого отдела
local department_colors = {
    ["Командование"] = "#372686",  -- фиолетовый
    ["Медицинский Отдел"] = "#28a745",  -- зелёный
    ["Служба безопасности"] = "#dc3545",  -- красный
    ["Антагонисты"] = "#ffc107"  -- жёлтый
}

-- Список ролей с иконками
local roles = {
    ["Командование"] = {
        {role = "Капитан", icon = "File:Капитан.png"},
        {role = "Глава персонала", icon = "File:Глава_Персонала.png"},
        {role = "Глава службы безопасности", icon = "File:Глава Службы Безопасности.png"},
        {role = "Старший Инженер", icon = "File:Старший_инженер.png"},
        {role = "Научный руководитель", icon = "File:Научный руководитель.png"},
        {role = "Главный врач", icon = "File:Главный врач.png"},
        {role = "Квартирмейстер", icon = "File:Квартирмейстер.png"}
    }
    -- Добавь сюда другие отделы, если нужно
}

-- Основная функция для генерации HTML
function p.roles(frame)
    local department = frame.args[1] or "Неизвестно"
    local list = roles[department]
    local color = department_colors[department] or "#FFFFFF"  -- белый, если цвет не найден

    if not list then
        return "<b>Неизвестный отдел: " .. department .. "</b>"
    end

    -- Начинаем формировать HTML
    local out = {}
    table.insert(out, string.format(
        '<div class="nomobile"><div class="biglink" style="margin:0px; text-shadow: 2px 3px black, 3px 5px %s; text-align: center; font-size: 40px; line-height:50px"><span class="sprite">[[File:cmd_dep.png|64px|link=%s]]</span> [[%s]]</div>',
        color, department, department
    ))
    table.insert(out, "<center><b>Глава отдела: [[Капитан]]<br>[[Радио|Канал отдела '':к'']]</b></center>")
    
    -- Выводим заголовок для сотрудников отдела
    table.insert(out, string.format('<div style="padding:2px;background:%s;border-radius:.3em;margin-bottom:.2em"><center><b>Сотрудники отдела:</b></center></div>', color))
    
    -- Разделим роли на две части (чтобы было удобнее)
    local role_section1 = {}
    local role_section2 = {}
    
    -- Перебираем роли и добавляем их в разделы
    for i, roleData in ipairs(list) do
        local role_html = string.format(
            '<div style="display:flex; flex-direction:column; align-items:center; padding:5px;"><div><br>[[%s]]</div><div class="sprite">[[%s|146x146px|link=%s]]</div></div>',
            roleData.role, roleData.icon, roleData.role
        )
        if i <= math.ceil(#list / 2) then
            table.insert(role_section1, role_html)
        else
            table.insert(role_section2, role_html)
        end
    end
    
    -- Вставляем разделы ролей в HTML
    table.insert(out, '<div style="display:flex; width:55%; justify-content:space-around; flex-wrap:wrap">')
    table.insert(out, table.concat(role_section1, "\n"))
    table.insert(out, '</div>')

    table.insert(out, '<div style="display:flex; width:65%; justify-content:space-around; flex-wrap:wrap">')
    table.insert(out, table.concat(role_section2, "\n"))
    table.insert(out, '</div>')

    -- Заключение с дополнительной информацией
    table.insert(out, string.format(
        '<div style="padding:2px;background:%s;border-radius:.3em;margin-bottom:.2em"><center><b>Связанные руководства:</b></center></div>',
        color
    ))
    table.insert(out, "<center>[[Стандартные Рабочие Процедуры (Командование)]] • [[Задачи станции]]</center>")
    table.insert(out, "<br></div>")

    -- Возвращаем сгенерированный HTML
    return table.concat(out, "\n")
end

return p