Входящий урон за последние 5 секунд (+гайд)

Ответить
noname123
Сообщения: 142
Зарегистрирован: 19 мар 2020, 09:15

Входящий урон за последние 5 секунд (+гайд)

Сообщение noname123 » 22 май 2024, 11:58

Было бы не плохо добавить возможность проверять сколько было получено урона игроком за последние 5 секунд.

Вариантов использования довольно прилично. Для более грамотного прожатия сейва заранее (не когда уже лицо на полу будет), определения сколько стакать меха у друида чтобы можно было начать сливать рагу на дамаг, определения сколько дополнительно хильнёт DS у блад дк (про DS у блад дк чуть позже выложу у бладов в сборках).

Покажу на примере блада как это будет выглядеть.

Вставляем в пользовательский код в боте внизу.

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

frame = CreateFrame("FRAME")
frame:RegisterEvent("COMBAT_LOG_EVENT_UNFILTERED")
local damageTable = {}
local updatedamageInterval = 0.1
local eventIndex = 0
frame:SetScript("OnEvent", function(self, event, ...)
    if event == "COMBAT_LOG_EVENT_UNFILTERED" then
        local timestamp, cleuEvent, hideCaster, sourceGUID, sourceName, sourceFlags, sourceRaidFlags, destGUID, destName, destFlags, destRaidFlags, spellId, spellName, spellSchool, param15, param16, param17, param18, param19, param20;
        eventIndex = eventIndex + 1
        local t = time()   
        if checkVersionOld(1,3) then
            timestamp, cleuEvent, sourceGUID, sourceName, sourceFlags, destGUID, destName, destFlags, spellId, spellName, spellSchool, param15, param16, param17, param18, param19, param20 = ...;
        elseif checkVersionOld(4,7) then
            timestamp, cleuEvent, hideCaster, sourceGUID, sourceName, sourceFlags, sourceRaidFlags, destGUID, destName, destFlags, destRaidFlags, spellId, spellName, spellSchool, param15, param16, param17, param18, param19, param20 = ...;
        else
            timestamp, cleuEvent, hideCaster, sourceGUID, sourceName, sourceFlags, sourceRaidFlags, destGUID, destName, destFlags, destRaidFlags, spellId, spellName, spellSchool, param15, param16, param17, param18, param19, param20 = CombatLogGetCurrentEventInfo();
        end
        if cleuEvent == "SWING_DAMAGE" and isPlayer(destGUID) then
            local _, _, _, _, _, _, _, _, _, _, _, amount = CombatLogGetCurrentEventInfo()
            damageTable[eventIndex] = {t, amount}
        elseif (cleuEvent == "SPELL_DAMAGE" or cleuEvent == "SPELL_PERIODIC_DAMAGE" or cleuEvent == "RANGE_DAMAGE") and isPlayer(destGUID) then
            local _, _, _, _, _, _, _, _, _, _, _, _, _, _, amount = CombatLogGetCurrentEventInfo()
            damageTable[eventIndex] = {t, amount}
        end
    end
end)
local totalTime = 0
local totalDamage = 0
local damageInLast5Seconds = 0
frame:SetScript("OnUpdate", function(self, elapsed)
    totalTime = totalTime + elapsed
    if totalTime >= updatedamageInterval then
        local t = time() - 5
        for k, v in pairs(damageTable) do
            if v[1] < t then
                damageTable[k] = nil
            else
                totalDamage = totalDamage + v[2]
            end
        end
        damageInLast5Seconds = totalDamage
        totalDamage = 0
        totalTime = 0
    end
end)
Теперь можно в своих блоках использовать условие пользовательского кода "damageInLast5Seconds" которое будет возвращать полученный вами урон в течении 5 последних секунд.
Если планируется использовать полученные данные для своевременного прожатия сейва, то нужно будет это значение сравнить с конкретным процентом вашего максимального количества хп. Сделать это можно также через пользовательский код. Например если нужно получить число равное 50% от вашего максимального значения хп, то в пользовательском коде это будет выглядеть как

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

MyUnitHealthMax("player")*0.5
В конечном итоге должно получиться вот так
damageInLast5Seconds.png
damageInLast5Seconds.png (50.75 КБ) 225 просмотров
Последний раз редактировалось noname123 24 май 2024, 18:28, всего редактировалось 1 раз.

lilaa
Сообщения: 19
Зарегистрирован: 03 сен 2019, 12:52

Re: Входящий урон за последние 5 секунд (+гайд)

Сообщение lilaa » 24 май 2024, 01:06

Интересно, спасибо

Ответить

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

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