Версия 1.31.1. Хочу сделать ауру, которая например давала бы и фиксированное значение брони, и процентное, зависящее от брони владельца ауры. Хотелось бы понять принцип, по которому можно делать подобные способности (бафф-аура процентная от брони, хп, маны, урона героя).
`
ОЖИДАНИЕ РЕКЛАМЫ...
30
  • получить значение брони
  • установить значение для ауры
  • PROFIT
2
Сделал что-то наподобии этого. Но тогда есть ряд проблем. В переменную загоняется броня только от статов персонажа. Если например есть предмет на броню, то его бонус не учитывается. Во-вторых, несмотря на обновление каждые 0.1 сек бонус ауры не обновляется: вот взял герой предмет на ловкость, а бонус не обновился. Ну и в третьих, по какой-то причине триггер не изменяет значение бонуса первого уровня
Загруженные файлы
7
Хотелось бы понять принцип, по которому можно делать подобные способности
Такая аура будет полностью кастомной, стандартная будет использоваться только в качестве болванки.
  1. При изучении ауры/появлении юнита с аурой создаем таймер(период на твое усмотрение)
  2. Коллбек таймера:
  • группирует и фильтрует юнитов которые должны получать бонус ауры.
  • просчитывает необходимый бонус для каждого юнита, сохраняет значение и выдает его юниту
  • запоминает группу юнитов которым был выдан бонус.
  1. При последующих коллбеках
  • Группируем и фильтруем юнитов.
  • сравниваем юнитов из ранее сохраненной группы и текущей:
    1. Если юнит в старой группе но не в новой - удаляем бонус, значение которого было сохранено для юнита.
    2. если юнит в обеих группах - просчитываем необходимый бонус, и сравниваем с сохраненным, если они разные меняем значение бонуса.
    3. если юнит только в новой группе - просчитываем бонус , сохраняем, выдаем.
  • сохраняем новую группу.
Принцип примерно такой, если тебе нужно мгновенное изменение бонуса при поднятии предметов или еще чего либо нужны хуки на нужные события, либо маленький период таймера ауры.
2
Не до конца понимаю манипуляции с группами. Можно на примере показать?
Ответы (2)
7
Не до конца понимаю манипуляции с группами. Можно на примере показать?
Открыть
function callback takes nothing returns nothing
...
local group auraGroup = LoadGroupHandle(...)    // группа с юнитами на которых действует аура
local group tempGroup = CreateGroup()
...
call GroupEnumUnitsInRange(tempGroup,....) 	  // собираем юнитов на которых должна действовать аура
loop		// Перебираем старую группу
	set i = BlzGroupGetSize(auraGroup) - 1
	exitwhen i < 0 
	set tempUnit = BlzGroupUnitAt(auraGroup,i)
	set oldBonus = GetSavedBonus(tempUnit)
	if not IsUnitInGroup(tempUnit,tempGroup) then 		// юнит вне зоны действия ауры
		call AddStatBonus(tempUnit,-oldBonus)
		call GroupRemoveUnit(auraGroup,tempUnit)
		call SaveStatBonus(tempUnit,0)
	else
		set newBonus = CalcNewBonus(tempUnit)	// Просчитываем новый бонус
		if newBonus != oldBonus then
			call AddStatBonus(tempUnit,newBonus - oldBonus)
			call SaveStatBonus(tempUnit,newBonus)
		endif
		call GroupRemoveUnit(tempGroup,tempUnit)	// удаляем из временной группы, что бы не проходтся по нему дважды
	endif
	
	set i = i - 1
endloop
loop	// перебираем юнитов вокруг владельца ауры, ищем на кого надо добавить эффект ауры
	set tempUnit = FirstOfGroup(tempGroup)
	exitwhen tempUnit == null
	if UnitCanHaveAura(tempUnit) then
		set newBonus = CalcNewBonus(tempUnit)
		call AddStatBonus(tempUnit,newBonus)
		call SaveStatBonus(tempUnit,newBonus)
		call GroupAddUnit(auraGroup,tempUnit)
	endif
	call GroupRemoveUnit(tempGroup,tempUnit)
endloop
call DestroyGroup(tempGroup)
...
auraGroup нужно создать и сохранить при инициализации таймера.
7
не заметил, что тебе нужно процентное значение именно владельца ауры, а не юнита который получает ауру. Тогда все еще проще и в целом даже лучше сделать как предложил удав.
16
Самое простое, но не самое хорошее решение: сделать ауре паладина много уровней и устанавливать текущий уровень в зависимости от нужных значений, который более приближен к желаемому. До 1.29 и без мемхака\ujapi уровень защиты ты напрямую получить не сможешь, но если знаешь базовую защиту героя, защиту за едину ловкости и защиту от текущих предметов, то сможешь рассчитать текущее значение.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.