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

Danis

Продвинутый
12 Июн 2016
285
0
16
16
Подольск
Проект
Custom Hero Arena
VK
https://vk.com/darkenlord1
Реакции
0 0 0
#1
Дошли мои ручки до переписывания своей линзы и вот к чему это привело:
Я залез посмотреть как реализованы подобные предметы в других кастомках и пришел к выводу что они почти все юзают модификатор "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
40
48
27
Реакции
40 0 0
#2
Эт что, модификатор как бы сам ищет в предмете эти величины? А не пробовал сделать тогда так:

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

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

ZLOY

Администратор
27 Июн 2016
668
94
28
18
Реакции
92 0 2
#3
Последнее редактирование модератором:

Danis

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

ZLOY

Администратор
27 Июн 2016
668
94
28
18
Реакции
92 0 2
#5
Невероятно
 
Реклама:

CryDeS

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

ZLOY

Администратор
27 Июн 2016
668
94
28
18
Реакции
92 0 2
#7
[quote author=CryDeS link=topic=1316.msg8205#msg8205 date=1486807415]
Кек?
[/quote]
Ты не прав
 

Danis

Продвинутый
12 Июн 2016
285
0
16
16
Подольск
Проект
Custom Hero Arena
VK
https://vk.com/darkenlord1
Реакции
0 0 0
#9
[quote author=CryDeS link=topic=1316.msg8207#msg8207 date=1486809374]
Кек? :D
[/quote]

А вот это уже пойдет :)
 

Danis

Продвинутый
12 Июн 2016
285
0
16
16
Подольск
Проект
Custom Hero Arena
VK
https://vk.com/darkenlord1
Реакции
0 0 0
#10
[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
668
94
28
18
Реакции
92 0 2
#11
Почему нельзя сделать так?
Код:
self.modifier:Destroy()
 

CryDeS

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

Danis

Продвинутый
12 Июн 2016
285
0
16
16
Подольск
Проект
Custom Hero Arena
VK
https://vk.com/darkenlord1
Реакции
0 0 0
#13
[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
Реакции
22 0 0
#14
Ты конечно прав что можно сделать просто Destroy, но поиск его у юнита все равно не лишний. Вызов дестрой у модифаера которого на юните нет - краш игры. По крайней мере раньше так было. Теперь везде проверяю.
 

ZLOY

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

MahouShoujo

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

ZLOY

Администратор
27 Июн 2016
668
94
28
18
Реакции
92 0 2
#17
Код:
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
Реакции
22 0 0
#18
Ну значит пофиксили когда-то.

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