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

ZLOY

Администратор
Команда форума
27 Июн 2016
953
182
Задать им длительность при создании?
 

MahouShoujo

Продвинутый
3 Ноя 2016
251
23
Просто проверяешь модификатор на принадлежность бафу через IsDebuff()

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

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

Просто закрой страницу API и больше не открывай, гений. Хоть бы проверяли, что пишут.
 

Илья

Друзья CG
25 Сен 2015
2,348
41
А что тебе не нравится? Эти функции можно использовать не только для переопределения в абилке, но и для получения инфы с уже существующей.
 

MahouShoujo

Продвинутый
3 Ноя 2016
251
23
Только если это относительно недавно поменяли и добавили всё это в бейзкласс 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)
 
Последнее редактирование модератором:

Илья

Друзья CG
25 Сен 2015
2,348
41
Проверил сам, признаю, на стандартных модификаторах это не работает, что и следует из названия: CDOTA_Modifier_Lua.

А так как я работаю в основном с lua модификаторами и на них подобные вещи работают,я и сделал вывод, что работают и на стандартных, но ошибся.
 

Илья

Друзья CG
25 Сен 2015
2,348
41
Может, конечно, подобные методы работают еще и на дд модификаторах, ведь там тоже можно указать флаги для IsAura или IsDebuff.

Но со стандартными нужен другой подход.
 

Adam Smith

Друзья CG
4 Окт 2014
473
2
[quote author=Илья link=topic=1337.msg8540#msg8540 date=1488152018]
Проверил сам, признаю, на стандартных модификаторах это не работает, что и следует из названия: CDOTA_Modifier_Lua.

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

MahouShoujo

Продвинутый
3 Ноя 2016
251
23
Жду пруфа

С дд работать тоже не будет, по-моему очевидно написано что все функции в разделе modifier_lua
 

Ciceroni

Пользователь
19 Фев 2017
10
0
Так в чем вопрос то?
Мне нужно повесить на себя бафф и снять его. Я не знаю, как снять. Я знаю команду RemoveModifierByName(), я знаю команду GetDuration(), но как убрать модифер через его длительность? Да, вопрос тупой и это уже где-то написано...
 
Последнее редактирование модератором:

ZLOY

Администратор
Команда форума
27 Июн 2016
953
182
Код:
AddNewModifier(caster,ability,"modifier_name",{duration = 5})
 
Последнее редактирование модератором:

Ciceroni

Пользователь
19 Фев 2017
10
0
Спасибки за библеотеку 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"
			}
		}
	}
 
Последнее редактирование модератором:

MahouShoujo

Продвинутый
3 Ноя 2016
251
23
> if IsServer() then

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