CustomGames.ru - Dota 2 пользовательские игры

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

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Danis

  • Продвинутый
  • 278
  • Мощь: 2
Дошли мои ручки до переписывания своей линзы и вот к чему это привело:
Я залез посмотреть как реализованы подобные предметы в других кастомках и пришел к выводу что они почти все юзают модификатор "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
И в кв предмета надо прописать следующие кеи
Код: (KV итема)
"AbilitySpecial"
{
            "01"
            {
                "var_type" "FIELD_INTEGER"
                "cast_range_bonus" "ваш бонус каст ренжа"
            }
            "02"
            {
                "var_type" "FIELD_INTEGER"
                "spell_amp" "ваш ампл. спелл дамага"
            }
}

Если надо на ДД писать, то там вроде должно быть не трудно, просто пихаете функции отдельно и запускаете 1 из них при поднятии итема а другую при убирании.
« Последнее редактирование: 10-02-2017, 20:33:01 от Danis »
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн Илья

  • Супермодератор
  • 2131
  • Мощь: 21
Эт что, модификатор как бы сам ищет в предмете эти величины? А не пробовал сделать тогда так:

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

если сработает, то ты нашел стандартные параметры для модификатора и не обязательно будет реализовывать его через вещь.

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

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
можно сделать кое какую шляпу.
И вышла действительно шляпа
Особенно позабавил поиск модификатора в OnDestroy

Оффлайн Danis

  • Продвинутый
  • 278
  • Мощь: 2
Особенно позабавил поиск модификатора в OnDestroy

Я думаю что больше никак его не найти, если будут у кастера несколько предметов с разными статами и с этим модификатором, то могут пойти траблы..
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6

Оффлайн CryDeS

  • Друзья CG
  • 1212
  • Мощь: 12
Я думаю что больше никак его не найти, если будут у кастера несколько предметов с разными статами и с этим модификатором, то могут пойти траблы..
Кек?

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6


Оффлайн Danis

  • Продвинутый
  • 278
  • Мощь: 2
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн Danis

  • Продвинутый
  • 278
  • Мощь: 2
Эт что, модификатор как бы сам ищет в предмете эти величины? А не пробовал сделать тогда так:

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

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

Вообщем теперь эта шняга имеет такой код
Код: (KV)
"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"
            }
}
Код: (item script)
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)
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
« Последнее редактирование: 11-02-2017, 11:34:53 от Danis »
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Почему нельзя сделать так?
Код
self.modifier:Destroy()

Оффлайн CryDeS

  • Друзья CG
  • 1212
  • Мощь: 12
Почему нельзя сделать так?
Код
self.modifier:Destroy()
Спойлер
мозг: потрачено :c
[свернуть]

Оффлайн Danis

  • Продвинутый
  • 278
  • Мощь: 2
Спойлер
мозг: потрачено :c
[свернуть]

Спойлер
сагласин, патрачено  :'(
[свернуть]

Почему нельзя сделать так?
Код
self.modifier:Destroy()
Из-за того потому что я усложняю себе жизнь.
Создай Героя
Мод  - steamcommunity.com/...ils/?id=750146414
[свернуть]

Оффлайн MahouShoujo

  • Продвинутый
  • 201
  • Мощь: 3
Ты конечно прав что можно сделать просто Destroy, но поиск его у юнита все равно не лишний. Вызов дестрой у модифаера которого на юните нет - краш игры. По крайней мере раньше так было. Теперь везде проверяю.

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Ты конечно прав что можно сделать просто Destroy, но поиск его у юнита все равно не лишний. Вызов дестрой у модифаера которого на юните нет - краш игры. По крайней мере раньше так было. Теперь везде проверяю.
Максимум что может быть - ошибка, как с другими обьектами, которые уже удалены из игры.
Но и тут IsNull() спасает