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

Нужна помощь со скиллом-атакой

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

Оффлайн Slavko

  • Продвинутый
  • 224
  • Мощь: 5
  • -_-
В общем, есть у меня два вот таких вот скилла(второй аналогичный, но дамаг другой наносит). Оба существуют как модификатор атаки(без автокаста). Проблема в том, что при атаке первым скиллом, на кастера навешивается и модификатор с орбом второго скилла, и в итоге, если модификатор второго стоит на первом месте - происходит удар орбом второго. И вот че-то мне кажется, что я туплю на чем-то простом.

Спойлер
Код
"alastar_punch_str"
{
  "BaseClass"                "ability_datadriven"
  "AbilityBehavior"          "DOTA_ABILITY_BEHAVIOR_ATTACK | DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
  "AbilityUnitTargetTeam"   "DOTA_UNIT_TARGET_TEAM_ENEMY"
  "AbilityUnitTargetType"   "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
  "SpellImmunityType"         "SPELL_IMMUNITY_ENEMIES_YES"
  "AbilityTextureName"       "ghoul6"
  "AbilityCastAnimation"    "ACT_DOTA_ATTACK"
  //"AbilityCastPoint"         "0.8"
  "AbilityCastRange"        "128"
  "AbilityCooldown"         "7"
  "AbilityManaCost"         "20 30 40 50"
  "AbilitySpecial"
    {
      "01"
      {
        "var_type"            "FIELD_INTEGER"
        "coff"                "3 4 5 6"
      }
      "02"
      {
        "var_type"            "FIELD_INTEGER"
        "duration"                "1.5"
      }
    }
  "Modifiers"
  {
    "modifier_alastar_punch_str_checker"
    {
      "Passive"      "1"
      "IsHidden"     "1"
      "OnAttackStart"
      {
        "ApplyModifier"
        {
          "ModifierName"   "modifier_alastar_punch_str"
          "Target"         "CASTER"
        }
      }
    }
    "modifier_alastar_punch_str"
    {
      "Passive"   "0"
      "IsHidden"  "0"
      "Orb"
      {
        "Priority"         "DOTA_ORB_PRIORITY_ABILITY"
        "ProjectileName"  "particles/units/heroes/hero_disruptor/disruptor_ambient_glow.vpcf"
        "CastAttack"    "1"
      }
      "OnOrbFire"
      {
        "RunScript"
        {
          "ScriptFile"    "abilities/alastar/alastar.lua"
          "Function"      "punch_str_start"
          "coff"          "%coff"
        }
      }
    }
  }
}
[свернуть]

UPD.
« Последнее редактирование: 17-07-2016, 12:31:40 от Slavko »
Ландшафтеры, мастера фотошопа и скриптеры более-менее адекватного уровня - приглашаю за заманчивым предложением в скайп: vyacheslavmikh

Оффлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Нужна помощь со скиллом-атакой
« Ответ #1 : 17-07-2016, 12:45:40 »
Вот это выложи:
Код
          "ScriptFile"    "abilities/alastar/alastar.lua"
          "Function"      "punch_str_start"

Ну вот этот сразу висит "modifier_alastar_punch_str_checker", как только абилку вкачиваешь.

А этот навешивается по атаке "modifier_alastar_punch_str".

Однако, на сколько я помню, если выставляешь флаг пассивности   

 "Passive"   "0"

То он тоже сразу вешается. Здесь 0 отвечает лишь за его тип (т.е. висит пассивно, либо активируется в какое-то время ).

Убери эту строчку, может этого и достаточно будет. А так все ждут код функции : )

 

Оффлайн Slavko

  • Продвинутый
  • 224
  • Мощь: 5
  • -_-
Re: Нужна помощь со скиллом-атакой
« Ответ #2 : 17-07-2016, 12:48:18 »
Ничего особоенного, дамаг с эффектами
Код
function punch_str_start(keys)
  local caster = keys.caster
  local ability = keys.ability
  local target = keys.target
  local damage = caster:GetStrength() * keys.coff
  local damage_table = {
          victim = target,
          attacker = caster,
          damage = damage,
          damage_type = DAMAGE_TYPE_MAGICAL
        }
  ApplyDamage(damage_table)
  ability:StartCooldown(ability:GetCooldown(ability:GetLevel()))
  caster:RemoveModifierByName("modifier_alastar_punch_str")
  target:EmitSound("Hero_Nightstalker.Void")
  local particle = ParticleManager:CreateParticle("particles/heroes/alastar/nyx_assassin_mana_burn_flash_red.vpcf", PATTACH_POINT, target)
  ParticleManager:SetParticleControl(particle, 0, target:GetAbsOrigin() + Vector(0, 0, 0))
end
Ландшафтеры, мастера фотошопа и скриптеры более-менее адекватного уровня - приглашаю за заманчивым предложением в скайп: vyacheslavmikh

Оффлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Нужна помощь со скиллом-атакой
« Ответ #3 : 17-07-2016, 12:49:37 »
Вот тебе почти такой же пример модификатора из одного моего старого мода:

жмяк
Код
	
"Modifiers"
{
"modifier_cripple"
{
"Passive" "1"
"IsHidden"  "0"
"TextureName" "cripple"
"IsDebuff"      "0"

"OnAttack"
{
"Random"
{
"Chance" "15"
"OnSuccess"
{
"ApplyModifier"
{
"Target" "TARGET"
"ModifierName" "modifier_bleeding"
}

}

}

}
}


"modifier_bleeding"
{
"IsHidden"  "0"
"TextureName" "bleeding"
"IsDebuff"      "1"
"ThinkInterval" "3"
"OnIntervalThink"
{  
"RunScript"
{
"ScriptFile" "ai.lua"
"Function" "BleedingDamage"
"Target" "TARGET"
}
}
}
}
 
[свернуть]

Как видишь, у второго я не указываю флаг Passive, и он вешается только в момент удара на цель.
« Последнее редактирование: 17-07-2016, 12:51:51 от Илья »

Оффлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Нужна помощь со скиллом-атакой
« Ответ #4 : 17-07-2016, 12:55:44 »
Ну да, в коде вроде ничего примечательного нет.
А эта строчка обязательна? Вроде бы в кулдаун абилка сама уйдет итак:
Код
  ability:StartCooldown(ability:GetCooldown(ability:GetLevel()))

И зачем тебе каждый раз вешать и удалять этот орб-модификатор? Почему просто один раз не повесить?

Оффлайн Slavko

  • Продвинутый
  • 224
  • Мощь: 5
  • -_-
Re: Нужна помощь со скиллом-атакой
« Ответ #5 : 17-07-2016, 12:56:37 »
Илья, посмотри видос, у меня тоже это так работает. Но ты пойми, что скилла два. И при любовь ударе навешиваются оба модификатора: и с первого скилла, и со второго, т.к. чекер начала удара всегда включен. Было бы хорошо, если бы можно было отследить начало каста этих скиллов, и при нём навешивать модификатор с орбом, но OnAbilityPhaseStart тупо не работает.
Ландшафтеры, мастера фотошопа и скриптеры более-менее адекватного уровня - приглашаю за заманчивым предложением в скайп: vyacheslavmikh

Оффлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Нужна помощь со скиллом-атакой
« Ответ #6 : 17-07-2016, 12:57:23 »
Постой, постой. Две абилки? А чего ты оба модификатора в одну пихнул и скинул только одну?

Оффлайн Slavko

  • Продвинутый
  • 224
  • Мощь: 5
  • -_-
Re: Нужна помощь со скиллом-атакой
« Ответ #7 : 17-07-2016, 12:58:33 »
Цитата: Илья
И зачем тебе каждый раз вешать и удалять этот орб-модификатор? Почему просто один раз не повесить?
смотри. к примеру, вешаем этот модификатор при спавне героя. сначала повесится, к примеру, модификатор от первого скилла, потом - от второго.. И при юзе второго скилла модификатор с орбом будет срабатывать от первого.
Ландшафтеры, мастера фотошопа и скриптеры более-менее адекватного уровня - приглашаю за заманчивым предложением в скайп: vyacheslavmikh

Оффлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Нужна помощь со скиллом-атакой
« Ответ #8 : 17-07-2016, 12:58:54 »
А, вижу, с просоня плохо читаю:
Цитировать
В общем, есть у меня два вот таких вот скилла(второй аналогичный, но дамаг другой наносит).

А скинь все же второй тоже.

Оффлайн Slavko

  • Продвинутый
  • 224
  • Мощь: 5
  • -_-
Re: Нужна помощь со скиллом-атакой
« Ответ #9 : 17-07-2016, 13:00:05 »
Илья, ну вот две сразу
Спойлер
Код
"alastar_punch_str"
{
  "BaseClass"                "ability_datadriven"
  "AbilityBehavior"          "DOTA_ABILITY_BEHAVIOR_ATTACK | DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
  "AbilityUnitTargetTeam"   "DOTA_UNIT_TARGET_TEAM_ENEMY"
  "AbilityUnitTargetType"   "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
  "SpellImmunityType"         "SPELL_IMMUNITY_ENEMIES_YES"
  "AbilityTextureName"       "ghoul6"
  "AbilityCastAnimation"    "ACT_DOTA_ATTACK"
  //"AbilityCastPoint"         "0.8"
  "AbilityCastRange"        "128"
  "AbilityCooldown"         "7"
  "AbilityManaCost"         "20 30 40 50"
  "AbilitySpecial"
    {
      "01"
      {
        "var_type"            "FIELD_INTEGER"
        "coff"                "3 4 5 6"
      }
      "02"
      {
        "var_type"            "FIELD_INTEGER"
        "duration"                "1.5"
      }
    }
  "Modifiers"
  {
    "modifier_alastar_punch_str_checker"
    {
      "Passive"      "1"
      "IsHidden"     "1"
      "OnAttackStart"
      {
        "ApplyModifier"
        {
          "ModifierName"   "modifier_alastar_punch_str"
          "Target"         "CASTER"
        }
      }
    }
    "modifier_alastar_punch_str"
    {
      "IsHidden"  "0"
      "Orb"
      {
        "Priority"         "DOTA_ORB_PRIORITY_ABILITY"
        "ProjectileName"  "particles/units/heroes/hero_disruptor/disruptor_ambient_glow.vpcf"
        "CastAttack"    "1"
      }
      "OnOrbFire"
      {
        "RunScript"
        {
          "ScriptFile"    "abilities/alastar/alastar.lua"
          "Function"      "punch_str_start"
          "coff"          "%coff"
        }
        "ApplyModifier"
        {
          "ModifierName"  "modifier_alastar_punch_str_debuff"
          "Target"        "TARGET"
        }
      }
    }
  }
}
// ==================================================================================================================================================
// ==================================================================================================================================================
"alastar_punch_agi"
{
  "BaseClass"                "ability_datadriven"
  "AbilityBehavior"          "DOTA_ABILITY_BEHAVIOR_ATTACK | DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AUTOCAST"
  "AbilityUnitTargetTeam"   "DOTA_UNIT_TARGET_TEAM_ENEMY"
  "AbilityUnitTargetType"   "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
  "SpellImmunityType"         "SPELL_IMMUNITY_ENEMIES_YES"
  "AbilityTextureName"       "ghoul4"
  "AbilityCastAnimation"    "ACT_DOTA_ATTACK"
  //"AbilityCastPoint"         "0.8"
  "AbilityCastRange"        "128"
  "AbilityCooldown"         "8 7 6 5"
  "AbilityManaCost"         "20 30 40 50"
  "AbilitySpecial"
    {
      "01"
      {
        "var_type"            "FIELD_INTEGER"
        "coff"                "2 4 6 8"
      }
      "02"
      {
        "var_type"            "FIELD_INTEGER"
        "duration"                "1.5"
      }
    }
  "Modifiers"
  {
    "modifier_alastar_punch_agi_checker"
    {
      "Passive"      "1"
      "IsHidden"     "1"
      "OnAttackStart"
      {
        "ApplyModifier"
        {
          "ModifierName"   "modifier_alastar_punch_agi"
          "Target"         "CASTER"
        }
      }
    }
    "modifier_alastar_punch_agi"
    {
      "Passive"   "0"
      "IsHidden"  "0"
      "Orb"
      {
        "Priority"         "DOTA_ORB_PRIORITY_ABILITY"
        "ProjectileName"  "particles/units/heroes/hero_disruptor/disruptor_ambient_glow.vpcf"
        "CastAttack"    "1"
      }
      "OnOrbFire"
      {
        "RunScript"
        {
          "ScriptFile"    "abilities/alastar/alastar.lua"
          "Function"      "punch_agi_start"
          "coff"          "%coff"
        }
      }
    }
  }
}
[свернуть]
Ландшафтеры, мастера фотошопа и скриптеры более-менее адекватного уровня - приглашаю за заманчивым предложением в скайп: vyacheslavmikh

Оффлайн Slavko

  • Продвинутый
  • 224
  • Мощь: 5
  • -_-
Re: Нужна помощь со скиллом-атакой
« Ответ #10 : 17-07-2016, 13:01:27 »
на дебаффы не смотри, я просто повырезал их сейчас чтоб не нагромождалось.
Ландшафтеры, мастера фотошопа и скриптеры более-менее адекватного уровня - приглашаю за заманчивым предложением в скайп: vyacheslavmikh

Оффлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Нужна помощь со скиллом-атакой
« Ответ #11 : 17-07-2016, 13:02:38 »
И код тоже скинь на всякий.


А зачем тебе вообще это в виде модификаторов реализовывать? Почему не реализовать как обычную таргетовскую абилку? У тебя же модификаторы в пустую используются как раз из-за того, что существуют они только в момент удара.

Оффлайн Slavko

  • Продвинутый
  • 224
  • Мощь: 5
  • -_-
Re: Нужна помощь со скиллом-атакой
« Ответ #12 : 17-07-2016, 13:05:16 »
Илья, мне нужно чтобы они были модификаторами атаки
код второго
Спойлер
Код
function punch_agi_start(keys)
  local caster = keys.caster
  local ability = keys.ability
  local target = keys.target
  local damage = caster:GetAgility() * keys.coff
  local damage_table = {
          victim = target,
          attacker = caster,
          damage = damage,
          damage_type = DAMAGE_TYPE_MAGICAL
        }
  ApplyDamage(damage_table)
  ability:StartCooldown(ability:GetCooldown(ability:GetLevel()))
  caster:RemoveModifierByName("modifier_alastar_punch_agi")
  target:EmitSound("Hero_Nightstalker.Void")
  local particle = ParticleManager:CreateParticle("particles/heroes/alastar/nyx_assassin_mana_burn_flash_green.vpcf", PATTACH_POINT, target)
  ParticleManager:SetParticleControl(particle, 0, target:GetAbsOrigin() + Vector(0, 0, 0))
  ability:ApplyDataDrivenModifier(caster, caster, "modifier_alastar_punch_agi_buff", {})
end
[свернуть]
Ландшафтеры, мастера фотошопа и скриптеры более-менее адекватного уровня - приглашаю за заманчивым предложением в скайп: vyacheslavmikh

Оффлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Нужна помощь со скиллом-атакой
« Ответ #13 : 17-07-2016, 13:10:58 »
Делай тогда не OnAttackStart, а OnSpellStart.

У тебя висят два модификатора, как только качаешь обе абилки.
И обе реагируют не на каст абилки, а на удар. Вот у тебя и вешается по удару оба модификатора: и от первой абилки и от второй. 

Оффлайн Илья

  • Супермодератор
  • 2031
  • Мощь: 19
Re: Нужна помощь со скиллом-атакой
« Ответ #14 : 17-07-2016, 13:13:10 »
Хотя как ты в модификаторе используешь OnSpellStart - никак, ведь это команда для абилки  :-X

Тебе надо переписать логику. Сделать это таргетовскими абилками и там вешать бафы/дебафы.