Вопрос по определеню роли в рейде на классике.

Открытый раздел для обсуждений
Ответить
goldrin
Сообщения: 72
Зарегистрирован: 27 апр 2020, 13:21

Вопрос по определеню роли в рейде на классике.

Сообщение goldrin » 31 авг 2024, 06:43

Собственно вот вопрос.
При каких условиях бот считывает роли группы как танк/лекарь?
Сделано это через бафы/ауры на членах группы или же через фрейм?
И еще возможно ли считывать ауры/бафы/таланты с члена рейда в 3.3.5 версиях для определения роли?
Проблема в большинстве своем с протоваром. его защитная стойка считается аурой и ее в бафах не указать у остальных же это просто баф
-Облик медведя
-Власть льда
-Праведное неистовство

eminsk
Сообщения: 287
Зарегистрирован: 19 фев 2016, 17:15

Re: Вопрос по определеню роли в рейде на классике.

Сообщение eminsk » 31 авг 2024, 09:32

Код: Выделить всё

function GetPlayerRole(unit)
    if not UnitExists(unit) then return "UNKNOWN" end
    
    local _, class = UnitClass(unit)
    local spec = GetSpecialization(unit)
    
    -- Таблица соответствия классов и спеков ролям
    local roleMap = {
        WARRIOR = {[1] = "TANK", [2] = "DPS", [3] = "DPS"},
        PALADIN = {[1] = "HEALER", [2] = "TANK", [3] = "DPS"},
        DRUID = {[1] = "TANK", [2] = "DPS", [3] = "HEALER", [4] = "DPS"},
        PRIEST = {[1] = "HEALER", [2] = "HEALER", [3] = "DPS"},
        DEATHKNIGHT = {[1] = "TANK", [2] = "DPS", [3] = "DPS"},
        -- Добавьте остальные классы по необходимости
    }
    
    -- Проверка баффов/аур
    local function HasBuff(buffName)
        for i = 1, 40 do
            local name = UnitBuff(unit, i)
            if name == buffName then return true end
        end
        return false
    end
    
    -- Проверка специфичных условий
    if class == "WARRIOR" and HasBuff("Защитная стойка") then
        return "TANK"
    elseif class == "DRUID" and HasBuff("Облик медведя") then
        return "TANK"
    elseif class == "DEATHKNIGHT" and HasBuff("Власть льда") then
        return "TANK"
    elseif class == "PALADIN" and HasBuff("Праведное неистовство") then
        return "TANK"
    end
    
    return roleMap[class] and roleMap[class][spec] or "DPS"
end
Проверку потом уже делать через пользовательский код в боте с вызовом этой функции.
Данная функция считывает и сравнивает с теми то что есть в игре с теми что внесены в Таблицу соответствия классов и спеков ролям.
если будет не соответствие то вернет - "UNKNOWN". Например несоответствие может быть по причине языкового клиента WOW.

возвращаемые значения:
Для воина в защитной стойке: "TANK"
Для друида в облике медведя: "TANK"
Для жреца со специализацией Свет или Послушание: "HEALER"
Для мага (любая специализация): "DPS"
Для несуществующего юнита: "UNKNOWN"

и еще обязательно переделать входной параметр:
"player" - сам игрок
"target" - текущая цель игрока
"mouseover" - объект, над которым находится курсор мыши
"party1" до "party4" - члены группы (в группе до 5 человек)
"raid1" до "raid40" - члены рейда (в рейде до 40 человек)
"pet" - питомец игрока
"focus" - фокус игрока

Пример вызова функции:
GetPlayerRole("player") и сравнивать значения через пользовательский код в боте

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость