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

AUTOCAST-ATTACK-SPELL

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

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
AUTOCAST-ATTACK-SPELL
« : 24-06-2016, 04:25:36 »
Модель самодельного тайдбрингера работает у меня через пассивку и при этом скилл срабатывает всегда, как только может (в откате проблем нет, с таймером разобраться помогли), а нужно, чтоб он срабатывал только, если скилл включен на автокаст или использовал, а не при каждой возможной атаке даже с выключенным автокастом:
Код
	//=================================================================================================================
// Kunkka: Tidebringer
//=================================================================================================================
"kunkka_tidebringer"
{
// General
//-------------------------------------------------------------------------------------------------------------
"ID" "5032" // unique ID number for this ability.  Do not change this once established or it will invalidate collected stats.
"BaseClass" "ability_datadriven"
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET | DOTA_ABILITY_BEHAVIOR_AUTOCAST | DOTA_ABILITY_BEHAVIOR_ATTACK"
"AbilityUnitDamageType" "DAMAGE_TYPE_PHYSICAL"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
"AbilityUnitTargetFlags" "DOTA_UNIT_TARGET_FLAG_MAGIC_IMMUNE_ENEMIES"
"SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_YES"

// Time
//-------------------------------------------------------------------------------------------------------------
"AbilityCooldown" "20.0 15.0 10.0 5.0"
"AbilityCastRange" "128"
"AbilityCastPoint" "0.0 0.0 0.0 0.0"

// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_INTEGER"
"radius" "1500 2000 2500 3000"
}
"02"
{
"var_type" "FIELD_INTEGER"
"damage_bonus" "25 30 35 40"
}
"03"
{
"var_type" "FIELD_INTEGER"
"cleave_damage" "100"
}
}
"Modifiers"
{
"precache"
{
"soundfile" "soundevents/game_sounds_heroes/game_sounds_kunkka.vsndevts"
"particle" "particles/units/heroes/hero_kunkka/kunkka_weapon_tidebringer.vpcf"
"particle" "particles/units/heroes/hero_kunkka/kunkka_spell_tidebringer.vpcf"
}

"modifier_tidebringer_splash_datadriven"
{
"Passive" "1"
"IsHidden" "1"
"IsPurgable" "0"

"OnCreated"
{
"FireEffect"
{
"Target" "CASTER"
"EffectName" "Hero_Kunkaa.Tidebringer"
}

"AttachEffect"
{
"Target" "CASTER"
"EffectName" "particles/units/heroes/hero_kunkka/kunkka_weapon_tidebringer.vpcf"
"EffectAttachType" "start_at_customorigin"
"ControlPointEntities"
{
"CASTER" "attach_sword"
"CASTER" "attach_sword"
"CASTER" "attach_sword"
}
}
}

"OnAttackLanded"
{
"FireSound"
{
"Target" "TARGET"
"EffectName" "Hero_Kunkka.Tidebringer.Attack"
}

"ActOnTargets"
{
"Target"
{
"Center" "TARGET"
"Teams" "DOTA_UNIT_TARGET_TEAM_ENEMY"
}

"Action"
{
"FireSound"
{
"Target" "TARGET"
"EffectName" "Hero_Kunkka.TidebringerDamage"
}

"CleaveAttack"
{
"CleavePercent" "100"
"CleaveRadius" "%radius"
"CleaveEffect" "particles/units/heroes/hero_kunkka/kunkka_spell_tidebringer.vpcf"
}

"RunScript"
{
"ScriptFile" "heroes/hero_kunkka/tidebringer.lua"
"Function" "tidebringer_set_cooldown"
}
}
}
}

"Properties"
{
"MODIFIER_PROPERTY_PREATTACK_BONUS_DAMAGE" "%damage_bonus"
}
}
}
}
+ Где приписать к коду скрипт, который будет вычислять ApplyDamage через скрипт?
« Последнее редактирование: 24-06-2016, 04:28:15 от EnDronist »
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: AUTOCAST-ATTACK-SPELL
« Ответ #1 : 24-06-2016, 08:55:33 »
Так а чего бы тебе не взять оригинальный, который итак автокастом сделан?

Собственный надо будет через lua реализовывать, если хочешь автокаст.

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: AUTOCAST-ATTACK-SPELL
« Ответ #2 : 25-06-2016, 03:33:36 »
Илья, Этот полностью скопирован от Пиззалола и не работает, как положено, лол
« Последнее редактирование: 25-06-2016, 03:41:56 от EnDronist »
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: AUTOCAST-ATTACK-SPELL
« Ответ #3 : 25-06-2016, 03:40:41 »
Илья, Этот полностью скопирован от Пиззалола
Когда ты так говоришь в мире грустит один фримен.
Без луа и двух бутылок рома не выйдет.
Собственно, там есть
bool ability:GetAutoCastState()

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: AUTOCAST-ATTACK-SPELL
« Ответ #4 : 25-06-2016, 03:47:09 »
CryDeS, Я так понял, пора учиться писать абилитисы на lua?
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: AUTOCAST-ATTACK-SPELL
« Ответ #5 : 25-06-2016, 05:22:28 »
CryDeS, Я так понял, пора учиться писать абилитисы на lua?
В идеале да. Но мне самому лень их писать полностью на луа, так что велосипедыыы.
Так же можно перед атакой проверять есть ли автокаст, если нету снимать модификатор сплеша, если есть автокаст то добавлять.

Оффлайн EnDronist

  • 222
  • Мощь: 1
  • Перфекционист-максималист
Re: AUTOCAST-ATTACK-SPELL
« Ответ #6 : 25-06-2016, 08:05:40 »
В идеале да. Но мне самому лень их писать полностью на луа, так что велосипедыыы.
Так же можно перед атакой проверять есть ли автокаст, если нету снимать модификатор сплеша, если есть автокаст то добавлять.
Вот именно, что может найти, включен ли автокаст?
Ням
Мой аддон: steamcommunity.com/...ils/?id=671144274
[свернуть]

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: AUTOCAST-ATTACK-SPELL
« Ответ #7 : 25-06-2016, 09:05:26 »
Тебе же Cry скинул : ))

bool ability:GetAutoCastState() - true, если автокаст, иначе false.

Я недавно реализовывал ульт акса в автокаст - переписал полностью ульт (довольно просто оказалось) и реализовал так же автокаст.

Скажу сразу, что будет проблема с активацией абилки при автокасте: сколько я не искал, так и не нашел что-либо в духе OnToogle для автокаста (какго-то встроенного активатора), поэтому можно либо накладывать на кастера в момент прокачки абилки модификатор, что будет каждую секунду (или чаще) проверять GetAutoCastState() и в случае true активировать OnSpellStart. Либо можно там же в момент прокачки абилки создавать таймер, что так же будет проверять кастующего.

Это не будет велосипедом, потому что так и должен в теории реализовываться автокаст. И я очень был удивлен, когда не нашел заранее реализованного механизма для таких абилок. Ток функции проверки и смен состояния.

Оффлайн Adam Smith

  • Друзья CG
  • 476
  • Мощь: 6
  • жрять жри его
Re: AUTOCAST-ATTACK-SPELL
« Ответ #8 : 25-06-2016, 10:10:57 »
Тебе же Cry скинул : ))

bool ability:GetAutoCastState() - true, если автокаст, иначе false.

Я недавно реализовывал ульт акса в автокаст - переписал полностью ульт (довольно просто оказалось) и реализовал так же автокаст.

Скажу сразу, что будет проблема с активацией абилки при автокасте: сколько я не искал, так и не нашел что-либо в духе OnToogle для автокаста (какго-то встроенного активатора), поэтому можно либо накладывать на кастера в момент прокачки абилки модификатор, что будет каждую секунду (или чаще) проверять GetAutoCastState() и в случае true активировать OnSpellStart. Либо можно там же в момент прокачки абилки создавать таймер, что так же будет проверять кастующего.

Это не будет велосипедом, потому что так и должен в теории реализовываться автокаст. И я очень был удивлен, когда не нашел заранее реализованного механизма для таких абилок. Ток функции проверки и смен состояния.
Есть же
Код
IsToggle
By PG.Freeman

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: AUTOCAST-ATTACK-SPELL
« Ответ #9 : 25-06-2016, 10:39:07 »
Я не про это.

Когда работаешь с абилкой типа toogle (переключатель) кодеру предоставляют возможность переопределить функцию OnToogle, которая срабатывает по включению им этой самой абилки.

В случае с autocast, такой функции нет (что-нибудь в духе OnAutocastStart), есть лишь OnSpellStart (когда именно кастуем, но не переключаем) и геттеры, что позволяют определить текущий флаг абилки GetAutoCastState().

Поэтому механизм отлова момента включения автокаста приходится реализовывать самому.

Оффлайн Adam Smith

  • Друзья CG
  • 476
  • Мощь: 6
  • жрять жри его
Re: AUTOCAST-ATTACK-SPELL
« Ответ #10 : 25-06-2016, 11:30:33 »
Я не про это.

Когда работаешь с абилкой типа toogle (переключатель) кодеру предоставляют возможность переопределить функцию OnToogle, которая срабатывает по включению им этой самой абилки.

В случае с autocast, такой функции нет (что-нибудь в духе OnAutocastStart), есть лишь OnSpellStart (когда именно кастуем, но не переключаем) и геттеры, что позволяют определить текущий флаг абилки GetAutoCastState().

Поэтому механизм отлова момента включения автокаста приходится реализовывать самому.
Лол, если вы не знали, то это делается обычным модификатором, в такой абилке есть только поле класса и GetInstrictModifierName

В нем уже функция OnAttackLanded

У меня есть воссозданный тайдбрингер
By PG.Freeman

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: AUTOCAST-ATTACK-SPELL
« Ответ #11 : 25-06-2016, 16:04:37 »
Лол, если вы не знали, то это делается обычным модификатором, в такой абилке есть только поле класса и GetInstrictModifierName

В нем уже функция OnAttackLanded

У меня есть воссозданный тайдбрингер
Покажи пример использования GetInstrictModifierName пжл, я не одупляю чот.

Оффлайн Adam Smith

  • Друзья CG
  • 476
  • Мощь: 6
  • жрять жри его
Re: AUTOCAST-ATTACK-SPELL
« Ответ #12 : 25-06-2016, 16:11:48 »
Покажи пример использования GetInstrictModifierName пжл, я не одупляю чот.
Код
function item_blink_staff:GetIntrinsicModifierName()
return "item_blink_staff_passive_modifier"
end
By PG.Freeman

Оффлайн CryDeS

  • Друзья CG
  • 1208
  • Мощь: 12
Re: AUTOCAST-ATTACK-SPELL
« Ответ #13 : 25-06-2016, 16:17:31 »
Код
function item_blink_staff:GetIntrinsicModifierName()
return "item_blink_staff_passive_modifier"
end
благодарю

Оффлайн Илья

  • Супермодератор
  • 2041
  • Мощь: 19
Re: AUTOCAST-ATTACK-SPELL
« Ответ #14 : 25-06-2016, 17:22:01 »
Лол, если вы не знали, то это делается обычным модификатором, в такой абилке есть только поле класса и GetInstrictModifierName

В нем уже функция OnAttackLanded

У меня есть воссозданный тайдбрингер

Не очень понял, хочешь сказать, что на кастующего автоматом накладывается какой-то модификатор?  Было бы неплохо увидеть пример.