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

Cooldown абилок с некоторым шансом.

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

Оффлайн Faith

  • 18
  • Мощь: 0
Код
function modifier_test_stats:OnAbilityExecuted(params)
  if IsServer() then
    local hHero = self:GetParent()
    local player = hHero:GetPlayerOwnerID()
    local rChance = 40 + hHero.int * 0.05
    local ability = params.ability
    if RollPercentage(rChance) then
      local manacost = ability:GetManaCost(ability:GetLevel() - 1)
      local cooldown = ability:GetCooldown(ability:GetLevel() - 1)
      hHero:SetMana(hHero:GetMana() + manacost)
      ability:StartCooldown(cooldown/2)
    end
  end
end

Кусок кода из луа модификатора, который работает криво.
При использовании абилок, проверяется шанс, если прокнуло , кд уменьшается в 2 раза + возращается мана за использование.
Мана возращается, кд не уменьшается - почему, немогу понять. Сначало думал что нельзя использовать функции с кд абилок при IsServer(), но при ВТФ моде кд уменьшается.
upd.
Так же не работает полное обнуление кулдауна - EndCooldown()
« Последнее редактирование: 08-09-2016, 09:36:14 от Faith »

Оффлайн CryDeS

  • Друзья CG
  • 1212
  • Мощь: 12
Re: Cooldown абилок с некоторым шансом.
« Ответ #1 : 08-09-2016, 12:10:42 »
Код
function modifier_test_stats:OnAbilityExecuted(params)
  if IsServer() then
    local hHero = self:GetParent()
    local player = hHero:GetPlayerOwnerID()
    local rChance = 40 + hHero.int * 0.05
    local ability = params.ability
    if RollPercentage(rChance) then
      local manacost = ability:GetManaCost(ability:GetLevel() - 1)
      local cooldown = ability:GetCooldown(ability:GetLevel() - 1)
      hHero:SetMana(hHero:GetMana() + manacost)
      ability:StartCooldown(cooldown/2)
    end
  end
end

Кусок кода из луа модификатора, который работает криво.
При использовании абилок, проверяется шанс, если прокнуло , кд уменьшается в 2 раза + возращается мана за использование.
Мана возращается, кд не уменьшается - почему, немогу понять. Сначало думал что нельзя использовать функции с кд абилок при IsServer(), но при ВТФ моде кд уменьшается.
upd.
Так же не работает полное обнуление кулдауна - EndCooldown()
Есть два стула.
params.ability - абилка которая наложила модификатор.
params.event_ability - абилка по нажатию которой сработал эвент.
Пример
Код
function PassiveRefresh( keys )
local caster = keys.caster
local chance_ability = keys.ChanceAbility
local chance_ultimate = keys.ChanceUltimate
local ability = keys.event_ability

if not ability then return end

local ability_type = ability:GetAbilityType()

if ability_type == DOTA_ABILITY_TYPE_ULTIMATE then
chance_ability = chance_ultimate
end

if RollPercentage(chance_ability) then
ability:EndCooldown()
end

end
[свернуть]

Оффлайн Faith

  • 18
  • Мощь: 0
Re: Cooldown абилок с некоторым шансом.
« Ответ #2 : 08-09-2016, 14:13:38 »
CryDeS,  спасибо.

Странно что при ВТФ моде, и ability:StartCooldown() все срабатывало через event.ability, да и мана рефрешилась, это и ввело меня в ступор.

UPD.
Через params.event_ability не получилось. Ссылается на пустую переменную ability.
Код
function modifier_test_stats:OnAbilityExecuted(params)
  if IsServer() then
    local hHero = self:GetParent()
    local player = hHero:GetPlayerOwnerID()
    local refreshChance = 8 + hHero.int * 0.12
    local ability = params.event_ability
    if RollPercentage(refreshChance) then
      local particle = ParticleManager:CreateParticle("particles/units/heroes/hero_obsidian_destroyer/obsidian_destroyer_essence_effect.vpcf", PATTACH_ABSORIGIN, hHero)
      ParticleManager:SetParticleControl(particle, 0, hHero:GetAbsOrigin())
      local manacost = ability:GetManaCost(ability:GetLevel() - 1)
      local cooldown = ability:GetCooldown(ability:GetLevel() - 1)
      ability:StartCooldown(cooldown/2)
      hHero:SetMana(hHero:GetMana() + manacost)
    end
  end
end
« Последнее редактирование: 08-09-2016, 15:07:58 от Faith »

Оффлайн I_GRIN_I

  • Продвинутый
  • 616
  • Мощь: 11
  • Научиться бы скриптить...
Re: Cooldown абилок с некоторым шансом.
« Ответ #3 : 08-09-2016, 17:07:46 »
Faith, аблку обозначай self и, кстати, манакост можно просто убирать функцией self:RefundManaCost(), а не устанавливая ману

UPD: Ыыы, не заметил, что это модификатор
« Последнее редактирование: 08-09-2016, 17:17:04 от I_GRIN_I »

Оффлайн I_GRIN_I

  • Продвинутый
  • 616
  • Мощь: 11
  • Научиться бы скриптить...
Re: Cooldown абилок с некоторым шансом.
« Ответ #4 : 08-09-2016, 17:18:10 »
Faith, сделай DeepPrintTable(params) и возьми от туда нужный параметр

Оффлайн CryDeS

  • Друзья CG
  • 1212
  • Мощь: 12
Re: Cooldown абилок с некоторым шансом.
« Ответ #5 : 09-09-2016, 10:01:26 »
CryDeS,  спасибо.

Странно что при ВТФ моде, и ability:StartCooldown() все срабатывало через event.ability, да и мана рефрешилась, это и ввело меня в ступор.

UPD.
Через params.event_ability не получилось. Ссылается на пустую переменную ability.
Запили тоже самое через датадривен, там точно есть event_ability.
Или принтани параметры, какие вообще есть.

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Cooldown абилок с некоторым шансом.
« Ответ #6 : 09-09-2016, 10:40:16 »
params.ability - способность, которая вызвала ивент

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Cooldown абилок с некоторым шансом.
« Ответ #7 : 09-09-2016, 10:53:46 »
Возможно после выполнения твоего кода абилка запускает стандартный кд

Оффлайн Faith

  • 18
  • Мощь: 0
Re: Cooldown абилок с некоторым шансом.
« Ответ #8 : 09-09-2016, 13:45:32 »
ZLOY, уже второй день не могу разобраться, если писать -wtf и использовать способности, то кд работает отлично. Но без -wtf кд всегда стандартное, даже если прокнуло.
CryDeS, датадривен не подходит, у меня там бонусы от статов зависят, и должны изменятся динамически.


Странно что и EndCooldown() так же не работает, пробовал сначало обнулят полностью, и сразу же стартовать новый с нужным мне значением.

Вот все параметры которые выдает DebugPrintTable(params) :
Спойлер
Код
[   VScript              ]: ability:
[   VScript              ]: __self: userdata: 0x03292600
[   VScript              ]: activity: -1
[   VScript              ]: basher_tested: false
[   VScript              ]: cost: 0
[   VScript              ]: damage: 0
[   VScript              ]: damage_category: 0
[   VScript              ]: damage_flags: 0
[   VScript              ]: damage_type: -725810688
[   VScript              ]: diffusal_applied: false
[   VScript              ]: distance: 0
[   VScript              ]: do_not_consume: false
[   VScript              ]: fail_type: 2047
[   VScript              ]: gain: 0
[   VScript              ]: heart_regen_applied: false
[   VScript              ]: ignore_invis: false
[   VScript              ]: issuer_player_index: 1
[   VScript              ]: no_attack_cooldown: false
[   VScript              ]: order_type: 0
[   VScript              ]: original_damage: 0
[   VScript              ]: process_procs: true
[   VScript              ]: ranged_attack: false
[   VScript              ]: record: 0
[   VScript              ]: reincarnate: false
[   VScript              ]: target:
[   VScript              ]: __self: userdata: 0x032e4018
[   VScript              ]: unit:
[   VScript              ]: __self: userdata: 0x03278320
[   VScript              ]: agi: 5
[   VScript              ]: bFirstSpawned: true
[   VScript              ]: frd: 5
[   VScript              ]: int: 5
[   VScript              ]: lck: 5
[   VScript              ]: str: 5
[свернуть]
« Последнее редактирование: 09-09-2016, 13:55:16 от Faith »

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Cooldown абилок с некоторым шансом.
« Ответ #9 : 09-09-2016, 14:04:50 »
Код
Timers:CreateTimer(0.03,function()
ability:EndCooldown()
ability:StartCooldown(newCooldown)
end)
Так попробуй

Оффлайн Faith

  • 18
  • Мощь: 0
Re: Cooldown абилок с некоторым шансом.
« Ответ #10 : 09-09-2016, 14:12:31 »
Код
Timers:CreateTimer(0.03,function()
ability:EndCooldown()
ability:StartCooldown(newCooldown)
end)
Так попробуй
Спасибо.
Сработало.

Оффлайн Faith

  • 18
  • Мощь: 0
Re: Cooldown абилок с некоторым шансом.
« Ответ #11 : 09-09-2016, 14:18:19 »
Чтоб не создавать новую тему, как решит данную проблему?
imgur.com/a/Wzvem

Когда убираю actionpanel всегда остается черная полоса снизу.

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Cooldown абилок с некоторым шансом.
« Ответ #12 : 09-09-2016, 14:27:41 »
Код: (JavaScript)
GameUI.SetRenderBottomInsetOverride(0)

Оффлайн CryDeS

  • Друзья CG
  • 1212
  • Мощь: 12
Re: Cooldown абилок с некоторым шансом.
« Ответ #13 : 09-09-2016, 15:44:29 »
А что мешает пилить два модификатора, один из дд другой из луа?

Оффлайн ZLOY

  • Супермодератор
  • 452
  • Мощь: 6
Re: Cooldown абилок с некоторым шансом.
« Ответ #14 : 09-09-2016, 15:54:34 »
А что мешает пилить два модификатора, один из дд другой из луа?
Достоинство