Нужно поместить юнита после каста способности на основе эликсира ярости в глобалку. Так как по механике варика происходит замена юнита, любые Triggering unit или Casting unit к нему уже не относятся.
Сейчас сделано через пик в отряд и проверки на другую способность, что через заднее место. Есть ли какая-нибудь функция, чтобы захватить замененного юнита в переменную?

Принятый ответ

Impertus, не знаю точно как сработает с "Эликсиром ярости", но handleID при морфе Ворона не изменяется. Возможно, и с остальными морфами тоже. Обращайся к юниту через его ID. Как находить этот ID и что это такое можешь почитать ТУТ
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
21
8 лет назад
Отредактирован Raised
1
Impertus, не знаю точно как сработает с "Эликсиром ярости", но handleID при морфе Ворона не изменяется. Возможно, и с остальными морфами тоже. Обращайся к юниту через его ID. Как находить этот ID и что это такое можешь почитать ТУТ
Принятый ответ
0
18
8 лет назад
0
Баф не додумался проверить на герое?
самый легкий способ говорят...
0
11
8 лет назад
0
Можно баф, можно способность (все равно у героя изначально 2 уник способности), но и для того и для того нужен вейт в 0.1 сек, чего желательно избежать.
З.Ы. Сейчас работает нормально, но хочу оптимизировать и убрать вейт.
0
18
8 лет назад
Отредактирован Cosonic5
0
Бери таймер
Иль в кеш сохраняешь героя по ид
Затем при касте он у тебя уже сохранен
Тупо загружаешь и все...
Ну вот кастуешь и потом делаешь че те надо
cast = getspellabilityunit
call saveunithande(hash,h,1,cast)
local unit u = loadunithande(hash,h,1)
вот теперь юнит никогда не потеряется
0
11
8 лет назад
0
Это будет не оптимизация, а варианты, я же хочу обойтись без задержек вообще.
0
21
8 лет назад
0
Impertus, ты хочешь отловить кастера этой абилки?
0
11
8 лет назад
Отредактирован Impertus
0
Кастера отловить не проблема, проблема в том, что по механике варика (как написано в стартпосте) при Эликсире кастер заменяется другим юнитом, и все триг юнит, каст юнит и т.д. не относятся к нему. А мне нужно отловить итогового юнита и к нему применять действия (в моем случае периодик дамаг раз в 0.5 сек по 2% от текущего хп)
0
18
8 лет назад
0
Я тебе написал в кеш грузи превращеного, после каста наносишь дамаг нечего сложного..
0
21
8 лет назад
Отредактирован Raised
0
Impertus, в таком случае - создавай не периодический таймер с задержкой 0 сек., сохраняй юнита в хеш с ключем в ID таймера. В функции, которою запустит таймер - загружай юнита под ключем в ID истекающего таймера, и делай действия. Когда ты выгрузишь юнита из хеша в какую-либо переменную - сможешь изменять его параметры (хп/мп и всё что ты хотел). Если не знаешь как, то: либо читаешь статью, ссылку на которую я дал выше, либо пишешь СЮДА
0
11
8 лет назад
Отредактирован Impertus
0
Я уже почитал, понял и сделал (не хочется конечно хэш-таблами грузить, их уже 5)
Спрашивал только на предмет возможно упущенной стандартной функции, раз такими окольными путями приходится идти.
0
21
8 лет назад
Отредактирован Raised
0
Голова идёт оборотом. Может объяснишь что ты хотел сделать?
Так как по механике варика происходит замена юнита, любые Triggering unit или Casting unit к нему уже не относятся.
Вот это странно звучит
0
11
8 лет назад
0
Так как по механике варика происходит замена юнита, любые Triggering unit или Casting unit к нему уже не относятся.
Вот это странно звучит
Странно, но это так: пробовал эффектом отследить, пробовал с дебагом. Если просто пикать юнитов без задержки, то в массив вносится два юнита, причем по первому урон всегда 0. Эффект без задержки не появляется на юните. С задержкой все ок (переход около 0.1 сек, меньше не пробовал). Еще прикол, что если дамажить кодом типа
function BRDamage takes integer i2 returns nothing
    local unit u = udg_BRCaster[i2]
    local real h = GetUnitStateSwap(UNIT_STATE_LIFE, u)

    if udg_BRCount[i2] <= 20 then
        call SetUnitLifeBJ( u, ( h - ( 0.02 * h ) ) )
        call DisplayTextToForce( bj_FORCE_PLAYER[0], ( R2S(h) + " - " + I2S(udg_BRCount[i2]) ) ) // дебаг
        set udg_BRCount[i2]=udg_BRCount[i2]+1
    else
        set udg_BRCaster[i2]=udg_BRCaster[udg_BRC]
        set udg_BRCount[i2]=udg_BRCount[udg_BRC]
        set udg_i2=udg_i2-1
        set udg_BRC=udg_BRC-1
    endif
    set u = null
    set h = 0
endfunction
и ивент "приводит способность в действие", то после окончания Эликсира первого юнита продолжает дамажить те же 10 сек. С "начинает направлять способность" такого нет. Т.е. Эликсир действует 2 раза - сначала меняет юниты один раз, по окончанию, снова переводит из 2 в 1. Вот такая особенность Эликсира ярости.
Суть способности: абила юзается, юнит заменяется другим с другим типом атаки, уроном и пр., но он получает дамаг в виде 4% от текущего хп в сек (я сделал по 2% каждые 0.5 сек, можно и меньше). Действует 10 сек.
0
21
8 лет назад
Отредактирован Raised
0
Для чего нужна глобалка? Эх.Дождись вечера.
0
11
8 лет назад
0
Не обязательно глобалка, локалка тоже не захватывает. Кого дамажить-то, если без перменной?)
0
21
8 лет назад
0
Impertus, ремонтируй эдитор, ибо
Так как по механике варика происходит замена юнита, любые Triggering unit или Casting unit к нему уже не относятся.
из пальца высосано.
Загруженные файлы
0
18
8 лет назад
0
Код очень печален, нече немного опыта и все получится)
0
11
8 лет назад
Отредактирован Impertus
0
Странно, дома под рукой свежую версию не взял, может с чем-то конфликтует, может модель не та и прочее. Завтра переберу все заново.
ЗЫ уже было такое, что на чистой карте работает отлично, а на основной конфликты непонятно с чем.
Нда, действительно, сейчас нормально работает. Хотя я уже его столько раз менял, что мог сам исправить незаметно ошибку.
Один вопрос: что это было? Не захватывало из триг\каст юнит. Какая-то ошибка редактора реальна?
0
21
8 лет назад
0
Impertus, это кое-кто решил что к юниту нельзя обратится, используя эти переменные. Будь внимательней в следующий раз и не пиши поспешно.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.