Способ реализации:
Lua
Версия Warcraft:
Наработка позволяет заменить текст по шаблону, используя стандартное описание способности из РО
раскрыть
do
	function string.gsuber(data, str)
		for k, v in pairs(data) do
			str = string.gsub(str, '[' .. k .. ']', v)
			str = string.gsub(str, k, v)
		end
		return str
	end
	local GetAbilityDescriptionOriginalTable = {}
	local GetAbilityNameOriginalTable = {}
	function GetAbilityDescriptionOriginal(id,lvl)
		if GetAbilityDescriptionOriginalTable[id] == nil then
			GetAbilityDescriptionOriginalTable[id] = BlzGetAbilityExtendedTooltip(id,lvl)
		end
		return GetAbilityDescriptionOriginalTable[id]
	end
	function GetAbilityNameOriginal(id,lvl)
		if GetAbilityNameOriginalTable[id] == nil then
			GetAbilityNameOriginalTable[id] = BlzGetAbilityTooltip(id,lvl)
		end
		return GetAbilityNameOriginalTable[id]
	end
	function UnitRefreshAbilityTooltip(hero,id)
		local lvl=GetUnitAbilityLevel(hero,id)-1
		local NativeString=GetAbilityDescriptionOriginal(id,lvl)
		local NativeStringName=GetAbilityNameOriginal(id,lvl)

		if GetLocalPlayer()==GetOwningPlayer(hero) then
			if id==SpellIDQ then -- айди нашего конкретного спела
				local dmg="Текст в середине, например число урона от интеллекта, которое необходимо превратить в текст"
				NativeString =string.gsub(NativeString,'dmg',dmg)
				NativeString=NativeString.."|cff5078f8".."\nТекс добавлен в конце".."|r"
			end
		end
		BlzSetAbilityTooltip(id,NativeStringName,lvl)
		BlzSetAbilityExtendedTooltip(id,NativeString,lvl)
	end
end

Пример использования и инструкция

  1. Копируем код себе в карту
  2. Создаём способность в ро и пишем ярлыки для шаблонов dmg И int
Способность наносит урон от интеллекта, и оглушает цель на 0.1 секунду, за каждый уровень героя
Урон: int
Оглушение: lvl
  1. Запоминаем ID способности, и на всякий случай занесём в переменную SpellIDQ =FourCC('A000')
  2. Когда хотим обновлять вызываем, либо после каста способности, либо в периодическом таймере, либо раз в год, в зависимости от надобности, например при подборе предмета, смотря что у нас за динамический текст
UnitRefreshAbilityTooltip(hero,SpellIDQ )
ну и разумеется правим чутка ЭТОТ блок кода, чтобы всё работало
		if id==SpellIDQ then 
				local int=GetHeroInt(hero,true)
				local lvlH=GetHeroLvl(hero)*.1
				NativeString =string.gsub(NativeString,'int',int)
				NativeString =string.gsub(NativeString,'lvl',lvlH)
				NativeString=NativeString.."|cff5078f8".."\nСпособность имеет динамическое описание".."|r"
		end
Если всё правильно, то увидим вот этот текст
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
Не знаю в чём причина, но если ты прокачиваешь способность с таким динамическим описанием и обновляешь его по таймеру, то статичная часть способности получает описание этой способности на максимальном лвл, а если у героя изначально прокачана способность на определённый лвл, то и статичная часть описания всегда будет иметь описание этого определённого лвл.
33
Sir Barios, это прям в карте примере или же вообще у тебя? ну в любом случае надо продебажить мб где-то ошибка уровней
7
А что мешает присваивать описание через ABILITY_SLF_TOOLTIP_NORMAL_EXTENDED ???
7
через BlzSetAbilityTooltip присваиваться у всех юнитов, а там у конкретного
15
ABILITY_SLF_TOOLTIP_NORMAL_EXTENDED
А оно работает? Не то чтобы я обтестил это поле вдоль и поперек, но когда пытался. не получалось.
7
GetLocalPlayer:
А оно работает? Не то чтобы я обтестил это поле вдоль и поперек, но когда пытался. не получалось.
работает, смена иконки не работает
Чтобы оставить комментарий, пожалуйста, войдите на сайт.