Ваша Дальность каста и Усиление маг. урона в лЮа / Your Cast range and Spell Amp

Danis

Продвинутый
12 Июн 2016
285
0
16
17
Подольск
Проект
Custom Hero Arena
Дошли мои ручки до переписывания своей линзы и вот к чему это привело:
Я залез посмотреть как реализованы подобные предметы в других кастомках и пришел к выводу что они почти все юзают модификатор "modifier_item_aether_lens" и не трудно догадаться что можно сделать кое какую шляпу.
Код:
function modifier_lens_five_passive:OnCreated( )
	local ability = self:GetAbility()
	if IsServer() then 
		self.modifier = self:GetCaster():AddNewModifier(self:GetCaster(),ability,"modifier_item_aether_lens",{})
	end
end

function modifier_lens_five_passive:OnDestroy( )
	local caster = self:GetCaster()
	if IsServer() then 
		local mod_list = caster:FindAllModifiers()
		for _,mod in pairs(mod_list) do 
			if mod == self.modifier then 
				mod:Destroy()
			end
		end
	end
end
И в кв предмета надо прописать следующие кеи
Код:
"AbilitySpecial"
{
      "01"
      {
        "var_type" "FIELD_INTEGER"
        "cast_range_bonus" "ваш бонус каст ренжа"
      }
      "02"
      {
        "var_type" "FIELD_INTEGER"
        "spell_amp" "ваш ампл. спелл дамага"
      }
}
Если надо на ДД писать, то там вроде должно быть не трудно, просто пихаете функции отдельно и запускаете 1 из них при поднятии итема а другую при убирании.
 
Последнее редактирование модератором:

Илья

Супермодератор
Команда форума
25 Сен 2015
2,348
31
48
27
Эт что, модификатор как бы сам ищет в предмете эти величины? А не пробовал сделать тогда так:

Код:
AddNewModifier(self:GetCaster(),ability,"modifier_item_aether_lens",{cast_range_bonus = 100,spell_amp = 100 })
если сработает, то ты нашел стандартные параметры для модификатора и не обязательно будет реализовывать его через вещь.

А если не сработает, то надо попробовать этот фокус провернуть с абилкой. Должно будет сработать, ведь вещь по сути тоже абилка. И в итоге имеем халявный способ мудрить свои абилки/вещи с подобной фигней.
 
Последнее редактирование модератором:

Danis

Продвинутый
12 Июн 2016
285
0
16
17
Подольск
Проект
Custom Hero Arena
Особенно позабавил поиск модификатора в OnDestroy
Я думаю что больше никак его не найти, если будут у кастера несколько предметов с разными статами и с этим модификатором, то могут пойти траблы..
 
Последнее редактирование модератором:
Реклама:

CryDeS

Друзья CG
14 Июл 2015
1,210
5
38
18
Последнее редактирование модератором:

ZLOY

Администратор
Команда форума
27 Июн 2016
671
72
28
18
[quote author=CryDeS link=topic=1316.msg8205#msg8205 date=1486807415]
Кек?
[/quote]
Ты не прав
 

Danis

Продвинутый
12 Июн 2016
285
0
16
17
Подольск
Проект
Custom Hero Arena
[quote author=Илья link=topic=1316.msg8196#msg8196 date=1486760462]
Эт что, модификатор как бы сам ищет в предмете эти величины? А не пробовал сделать тогда так:

Код:
AddNewModifier(self:GetCaster(),ability,"modifier_item_aether_lens",{cast_range_bonus = 100,spell_amp = 100 })
[/quote]

Так не работает, только что проверил(

Вообщем теперь эта шняга имеет такой код
Код:
"AbilitySpecial"
   {
      "04"
      {
        "var_type" "FIELD_INTEGER"
        "spell_amp" "5 10 15 20 25"
      }
      "05"
      {
        "var_type" "FIELD_INTEGER"
        "cast_range_bonus" "200 300 325 350 375"
      }
}
Код:
function modifier_lens_five_passive:OnCreated( )
	local ability = self:GetAbility()
	self.modifier = self:GetCaster():AddNewModifier(self:GetCaster(),ability,"modifier_item_aether_lens",{})
end

function modifier_lens_five_passive:OnDestroy( )
	local caster = self:GetCaster()
	caster:RemoveCurrentModifier(self.modifier)
end
Код:
function CDOTA_BaseNPC:RemoveCurrentModifier( modifier )
 local caster = self
 local mod_list = caster:FindAllModifiersByName(modifier:GetName())
 for _,mod in pairs(mod_list) do 
  if mod == modifier then 
   mod:Destroy()
  end
 end
end
 
Последнее редактирование модератором:
Реклама:

ZLOY

Администратор
Команда форума
27 Июн 2016
671
72
28
18
Почему нельзя сделать так?
Код:
self.modifier:Destroy()
 

CryDeS

Друзья CG
14 Июл 2015
1,210
5
38
18
[quote author=ZLOY link=topic=1316.msg8210#msg8210 date=1486813021]
Почему нельзя сделать так?
Код:
self.modifier:Destroy()
[/quote]
мозг: потрачено :c
 

Danis

Продвинутый
12 Июн 2016
285
0
16
17
Подольск
Проект
Custom Hero Arena
[quote author=CryDeS link=topic=1316.msg8211#msg8211 date=1486813324]
мозг: потрачено :c
[/quote]

сагласин, патрачено :'(

[quote author=ZLOY link=topic=1316.msg8210#msg8210 date=1486813021]
Почему нельзя сделать так?
Код:
self.modifier:Destroy()
[/quote]
Из-за того потому что я усложняю себе жизнь.
 

MahouShoujo

Продвинутый
3 Ноя 2016
251
22
18
18
Ты конечно прав что можно сделать просто Destroy, но поиск его у юнита все равно не лишний. Вызов дестрой у модифаера которого на юните нет - краш игры. По крайней мере раньше так было. Теперь везде проверяю.
 

ZLOY

Администратор
Команда форума
27 Июн 2016
671
72
28
18
Ты конечно прав что можно сделать просто Destroy, но поиск его у юнита все равно не лишний. Вызов дестрой у модифаера которого на юните нет - краш игры. По крайней мере раньше так было. Теперь везде проверяю.
Максимум что может быть - ошибка, как с другими обьектами, которые уже удалены из игры.
Но и тут IsNull() спасает
 
Последнее редактирование модератором:
Реклама:

MahouShoujo

Продвинутый
3 Ноя 2016
251
22
18
18
Неправда. Никакой ошибки - просто инстант краш. И модифаеры - не сущности и проверить их на валидность нельзя.
 

ZLOY

Администратор
Команда форума
27 Июн 2016
671
72
28
18
Код:
local hero = PlayerResource:GetSelectedHeroEntity(playerID)
local modifier = hero:AddNewModifier(hero,nil,"modifier_hide_lua",{duration = 1})
Timers:CreateTimer(2,function() modifier:Destroy() end )
Код:
This object has been deleted from C++ and no longer exists. (Use :IsNull() to detect this.)
 
Последнее редактирование модератором:

MahouShoujo

Продвинутый
3 Ноя 2016
251
22
18
18
Ну значит пофиксили когда-то.

to:DotaCustomGames <DotaCustomGames@valvesoftware.com>
date:Sat, Apr 16, 2016 at 3:34 PM
subject:Modifier related crash
 
Последнее редактирование модератором:
Реклама: