Создание скила

  • Автор темы Автор темы Maloy
  • Дата начала Дата начала

Maloy

Пользователь
19 Дек 2019
10
0
Проект
rofl
мне надо к скилу добавить что при касте этого скила герой(который кастует этот скил ) умирает с шансом 1%, помогите )
 
я бы сделал что-то типо такого, вроде должно работать

Код:
function suicid (keys)
      local unit= keys.caster
    local kill = RandomInt(1,100)
if kill == 1 then
unit:forcekill(true)
end
end
 
Последнее редактирование:
  • Нравится
Реакции: DDSuper
я бы сделал что-то типо такого, вроде должно работать

Код:
function suicid (keys)
      local unit= keys.caster
    local kill = RandomInt(1,100)
if kill == 1 then
unit:forcekill(true)
end
end
я не понимаю куда это написать тк как за основу скила у меня взят скил из доты
 
со стандартным ничего не выйдет,
пиши скил с 0 или используй spelllibrary
 
  • Нравится
Реакции: almazist1
И опять же скажу, что и с дотовским скиллом это можно
можно мне пример?
"luna_lucent_beam"
{
// General
//-------------------------------------------------------------------------------------------------------------
"ID" "5222" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats.
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
"AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL"
"SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO"
"SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG"
"FightRecapLevel" "1"
"AbilitySound" "Hero_Luna.LucentBeam.Target"

// Casting
//-------------------------------------------------------------------------------------------------------------
"AbilityCastRange" "800"
"AbilityCastPoint" "0.4"

// Time
//-------------------------------------------------------------------------------------------------------------
"AbilityCooldown" "6.0 6.0 6.0 6.0"


// Cost
//-------------------------------------------------------------------------------------------------------------
"AbilityManaCost" "90 100 110 120"

// Stats
//-------------------------------------------------------------------------------------------------------------
"AbilityModifierSupportValue" "0.5" // Mostly about the damage

// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_FLOAT"
"stun_duration" "0.8"
}
"02"
{
"var_type" "FIELD_INTEGER"
"beam_damage" "75 150 225 300"
"LinkedSpecialBonus" "special_bonus_unique_luna_1"
}
}
"AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1"
}
 
  • Нравится
Реакции: kain и Niker323
можно мне пример?
"luna_lucent_beam"
{
// General
//-------------------------------------------------------------------------------------------------------------
"ID" "5222" // unique ID number for this ability. Do not change this once established or it will invalidate collected stats.
"AbilityBehavior" "DOTA_ABILITY_BEHAVIOR_UNIT_TARGET"
"AbilityUnitTargetTeam" "DOTA_UNIT_TARGET_TEAM_ENEMY"
"AbilityUnitTargetType" "DOTA_UNIT_TARGET_HERO | DOTA_UNIT_TARGET_BASIC"
"AbilityUnitDamageType" "DAMAGE_TYPE_MAGICAL"
"SpellImmunityType" "SPELL_IMMUNITY_ENEMIES_NO"
"SpellDispellableType" "SPELL_DISPELLABLE_YES_STRONG"
"FightRecapLevel" "1"
"AbilitySound" "Hero_Luna.LucentBeam.Target"

// Casting
//-------------------------------------------------------------------------------------------------------------
"AbilityCastRange" "800"
"AbilityCastPoint" "0.4"

// Time
//-------------------------------------------------------------------------------------------------------------
"AbilityCooldown" "6.0 6.0 6.0 6.0"


// Cost
//-------------------------------------------------------------------------------------------------------------
"AbilityManaCost" "90 100 110 120"

// Stats
//-------------------------------------------------------------------------------------------------------------
"AbilityModifierSupportValue" "0.5" // Mostly about the damage

// Special
//-------------------------------------------------------------------------------------------------------------
"AbilitySpecial"
{
"01"
{
"var_type" "FIELD_FLOAT"
"stun_duration" "0.8"
}
"02"
{
"var_type" "FIELD_INTEGER"
"beam_damage" "75 150 225 300"
"LinkedSpecialBonus" "special_bonus_unique_luna_1"
}
}
"AbilityCastAnimation" "ACT_DOTA_CAST_ABILITY_1"
}
есть фильтры, мне не надо вот это кв
 
  • Грусть
Реакции: vulkantsk
Так лол, нет никакой проблемы это к стандартному скилу добавить. Сразу 3 способа в голову пришло, чуть позже распишу самый простой, если будет время.
 
зачем добавлять чтото к стандартным скилам если можно писать свои? и да фильтры первое что приходит в голову
 
зачем добавлять чтото к стандартным скилам если можно писать свои? и да фильтры первое что приходит в голову
А зачем делать какие-то кастомки, если можно писать свою доту?
Ладно еще, если надо сделать только один скил, и это какой-нибудь бим луны, а не ульта Кробы. Но если понадобится запилить кастомную механику для всех/ряда скилов доты? Не будешь же их все переписывать, тем более что вольво не особо запариваются над сохранением работоспособности API при выпуске патчей, мб пока ты будешь делать вторую половину скилов, первая перестанет работать. По факту даже переписывание одного скила без реального на то основания - бесполезное изобретение велосипеда (который скорее всего и работать будет хуже, чем оригинал, сужу по SpellLibrary. Автору, кончено, респект, но от абилок оттуда тем еще говном несёт)
 
  • Нравится
Реакции: almazist1
Самый простой способ здесь - слушатель.

Перехожу сюда, и ищу подходящее по смыслу название. (если кто-нибудь вдруг знает, поделитесь плиз ссылкой на актуальный список)

dota_player_used_ability - вроде то, что нужно. Там на сайте еще типо список аргументов прилагается, но лучше распечать таблицу самому и посмотреть, что там.
Код:
ListenToGameEvent( 'dota_player_used_ability', function( kv )
    table.foreach( kv, print )
end, nil )

В примере я буду использовать копьё марса. Вот, что вернула мне консоль.
Код:
abilityname    mars_spear
caster_entindex    745
game_event_listener    1585446915
game_event_name    dota_player_used_ability
PlayerID    0
splitscreenplayer    -1
Как видно, параметров тут намного больше, чем дано на сайте. Это лишь доказывает, что принт неизвестной таблицы в подобных системах - самый рациональный способ узнать, какие же данные у меня есть для дальнейшей работы.

Возьмем только нужное.
abilityname [без комментариев]
caster_entindex - 'entindex' в доте всегда обозначает индекс (уникальный идентификатор) сущности. В данном случае это индекс кастера (того, кто применил способность). Чтобы по индексу получить саму сущность, существует функция EntIndexToHScript

Рабочий код:
Код:
    ListenToGameEvent( 'dota_player_used_ability', function( kv )
        if kv.caster_entindex ~= nil and kv.abilityname == 'mars_spear' then
            local caster = EntIndexToHScript( kv.caster_entindex )
            if caster and not caster:IsNull() then
                if RandomFloat(0,100) <= 1 then
                    caster:ForceKill( true )
                end
            end
        end
    end, nil )


???
Всё.. Я сам вначале думал, что кода будет минимум в 3 раза больше, но задача оказалась прям максимально тривиальной...
 
  • Нравится
Реакции: .фи
Реклама: