Узнать все модификаторы цели.

Задать им длительность при создании?
 
Просто проверяешь модификатор на принадлежность бафу через IsDebuff()

Ну можно спокойно проверять через флаг IsAura().

Или как вариант проверять модификатор на флаг исчезновения при смерти: RemoveOnDeath()

Просто закрой страницу API и больше не открывай, гений. Хоть бы проверяли, что пишут.
 
А что тебе не нравится? Эти функции можно использовать не только для переопределения в абилке, но и для получения инфы с уже существующей.
 
Только если это относительно недавно поменяли и добавили всё это в бейзкласс Buff в чём я сильно сомневаюсь.

Пошел и проверил

Код:
hero:AddNewModifier(hero, self, "modifier_invisible", { duration = 4 })
  Timers:CreateTimer(1, function()
    print(hero:FindModifier("modifier_invisible"):IsAura())
  end)

attempt to call method 'IsAura' (a nil value)
 
Последнее редактирование модератором:
Проверил сам, признаю, на стандартных модификаторах это не работает, что и следует из названия: CDOTA_Modifier_Lua.

А так как я работаю в основном с lua модификаторами и на них подобные вещи работают,я и сделал вывод, что работают и на стандартных, но ошибся.
 
Может, конечно, подобные методы работают еще и на дд модификаторах, ведь там тоже можно указать флаги для IsAura или IsDebuff.

Но со стандартными нужен другой подход.
 
[quote author=Илья link=topic=1337.msg8540#msg8540 date=1488152018]
Проверил сам, признаю, на стандартных модификаторах это не работает, что и следует из названия: CDOTA_Modifier_Lua.

А так как я работаю в основном с lua модификаторами и на них подобные вещи работают,я и сделал вывод, что работают и на стандартных, но ошибся.
[/quote]
У меня на модификаторах с++ работает O_o
 
Жду пруфа

С дд работать тоже не будет, по-моему очевидно написано что все функции в разделе modifier_lua
 
Так в чем вопрос то?
Мне нужно повесить на себя бафф и снять его. Я не знаю, как снять. Я знаю команду RemoveModifierByName(), я знаю команду GetDuration(), но как убрать модифер через его длительность? Да, вопрос тупой и это уже где-то написано...
 
Последнее редактирование модератором:
Код:
AddNewModifier(caster,ability,"modifier_name",{duration = 5})
 
Последнее редактирование модератором:
Спасибки за библеотеку timers.lua, цикл чтения таблицы и сслыки на вальвовские API (Самовлюбвлённо полагаю, что теперь я примерно представляю что там да как, а всё благодаря вам). Тема закрыта.
Луа код:
Код:
имягероя_имя_способности_lua = class({})

//***********************************************

function имягероя_имя_способности_lua:OnSpellStart()
	//variables
	local caster = self:GetCaster()
	local ability = self
	local target = self:GetCursorTarget()
	local tModifiers = target:FindAllModifiers()
	self.free_help_duration = self:GetSpecialValueFor( "free_help_duration" )

	//remove modifers from target and give it to caster
	for index, hModifier in pairs(tModifiers) do
		local ModifName = hModifier:GetName()
		local ModifAbil = hModifier:GetAbility()
		local ModifDura = hModifier:GetDuration()
		local AbilBehav = ModifAbil:GetBehavior()
		
		target:RemoveModifierByName ( ModifName )
		caster:AddNewModifier(caster, ModifAbil, ModifName, {duration = ModifDura})
		
		if (AbilBehav==2) then
			if IsServer() then
				require('lib/timers')\\нагло стыренная с GitHub-а библеотека таймерс.
				Timers:CreateTimer(self.free_help_duration, function()
					for index, hModifier in pairs(tModifiers) do	
					caster:RemoveModifierByName ( ModifName )
					target:AddNewModifier(caster, ModifAbil, ModifName, {})
					end
				end)
			end
		end
	end
end
Код абилки:
Код:
//Ability: имя героя: имя способности
	"имягероя_имя_способности_lua"
	{
		"BaseClass"				"ability_lua"
		"AbilityBehavior"			"DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
		"AbilityTextureName"			"furion_wrath_of_nature"
		"AbilityUnitTargetTeam"			"DOTA_UNIT_TARGET_TEAM_FRIENDLY"
		"AbilityUnitTargetType"			"DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC" 
		"ScriptFile"				"имягероя_имяспособности_lua"
		"AbilityCastRange"			"200"
		"AbilityCastPoint"			"0.0 0.0 0.0 0.0"
		"AbilityCooldown"			"20"
		"AbilityManaCost"			"60"
		"AbilitySpecial"
		{
			"01"
			{
				"var_type"						"FIELD_INTEGER"
				"free_help_duration"			"6"
			}
		}
	}
 
Последнее редактирование модератором:
> if IsServer() then

Это ты просто рандомно в середину кода решил зафигачить? Это условие всегда будет проходить, можно убрать.
 
Последнее редактирование модератором:
Реклама: