Невероятно дикий костыль, который позволяет узнать - "а сколько же зелёных бонусов атаки у нашего юнита?"
function GetUnitGreenAttackBonus(hero)
local bonus=0
if IsUnitSelected(hero,GetOwningPlayer(hero)) then
local frame=BlzGetFrameByName("InfoPanelIconValue",0)
local text=BlzFrameGetText(frame)
if string.len(text)>=15 then
bonus = text:sub(text:find("|C")+10,-3)
end
bonus=tonumber(bonus)
end
return bonus
end
Зачем это нужно
Если есть скажем адекватный Бонус_Мод ? и функция GetUnitBonus. Бонус мод очень громоздкий, имеет лёгкий импорт только на новые карты, требует работу с РО, и так же полную кастомизацию всех бонусов в игре, для адекватной работы, а это нам не подходит.
А где это применяется
Ну как же где? всё в том же рефордже, есть функция для получения белого урона
BlzGetUnitBaseDamage(hero,0) -- юнит, индекс атаки
И мы сделали способность, которая наносит урон от силы атаки, (да теперь не обязательно наносить урон способностями от основных атрибутов героя). И нам для полного функционала не хватает зелёного урона, иначе способность не бафается свитком зверя или когтями атаки.. И вот приходит на помощь наша новая функция GetUnitGreenAttackBonus
Которую мы приплюсуем к нашему обычному урон, примерно это будет выглядеть вот так:
Которую мы приплюсуем к нашему обычному урон, примерно это будет выглядеть вот так:
local damage=BlzGetUnitBaseDamage(hero,0)+data.HeroGreenDamage
ограничения при использовании:
К сожалению очень много нюансов и тонкостей в работе
- Как видите в коде выше я написал data.HeroGreenDamage скажем это отдельная ячейка в таблице луа или в хештаблице, где храниться значение о зелёной атаке. Ибо основное требование это ВЫБОР ЮНИТА.
local damage=BlzGetUnitBaseDamage(hero,0)+GetUnitGreenAttackBonus(hero)
Но тут надо всё таки прерваться и рассказать про...
Принцип работы
Чтобы получить зелёную атаку, нужно считать её из фрейма текущего выделенного юнита и занести в таблицу, а ещё нужно это значение очень часто обновлять, чтобы иметь актуальные данные. Но можно считывать и единожды, например при касте способности, продолжаем
ограничения при использовании:
- Юнит должен быть выбран и только один (выделение 2х и более скрывает фрейм и мы не видим нашу атаку)
- Будет нормально работать только в узких кругах (арены, мобы, рпг, PeonRpg, и прочие игры где не нужно управлять более чем 1 героем)
- Можно абузить, как в плюс так и себе во вред, снимая выделение, своего юнита, и игра будет помнить последний бонус. (только как вы будете активировать способности тогда?), и то если активировано запоминание
- Функция Get возможна, но она требует ещё более диких костылей, я попробовал, но как-то не пошло
- Мало тетировалось
Плюсы работы
- Та самая недостающая функция
- Можно тоже самое сделать и для брони, если будет нужно - я добавлю
- Сочетается с любыми системами бонусного урона, как с бонус модом так и с дефолт бонусами
- Работает как с зелёным так и с красным уроном
- Нет ограничений на размер бонуса
- Прекрасно работает в мультиплеере и не требует дополнительной синхронизации (спс Doc)
Ред. Берги
Ред. Doc
Если бы нужна была синхронизация, тогда бы на клиенте синего игрока пеон получил 0 урона, и на красном 1000, у красного умер, у синего живой, вывод?
1 игрок выделил юнит +15 атака зеленый
А у 2 игрока будет 0 урон от функции
Наносить урон 15 или 0 у разных игроков