Использую функции отсюда call SetAbilityDataHeroRng и call GetAbilityDataHeroRng . Использую БЕЗ клонабилити, чтобы они глобально применялись на абилку и не фаталился вар - просто считываю и задаю рендж.
На одной (как минимум, мб на других просто еще не выявлено) абилке практически в каждой игре наблюдается такой побочный эффект.
В один из кастов (не обязательно СРАЗУ после изменения ее ренджа, через какой угодно промежуток времени, но абсолютно точно, что это происходит ПОСЛЕ изменения ее ренджа) - кулдаун этой абилки не начинается.
При этом применить ее невозможно - она типа на перезарядке. Однако индикатор кулдауна (импортированный как в эвиксе) показывает цифру 0.00, т. е., что абила вроде как почти перезарядилась и вот-вот будет готова.
Но готова она не становится.
Тестировалось с изменениями кулдаунов абилки до и после и без изменений - действительные изменения кулдаунов на эту ситуацию никак ни в какую сторону не влияют, ничего не меняется.
В процессе игры, если есть чем себе заклинания зарефрешить, абилка обновляется успешно. Если кастануть где-то 1-5 раз ее после таких рефрешей (закономерности выявить не удалось, иногда сразу лечится, а иногда пять раз вот надо), абилка запускает свой кулдаун нормально и дальше уже до самого конца игры не безобразничает.
Есть комментарии, что это и как лечить?
Пока думаю попробовать просто триггерно запускать кулдаун, благо абила все равно триггерная вся, но вдруг еще такие абилы выявлю - с каждой, что ли, так делать...

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

Решение "найдено" - кд абилки 0, при касте и в процессе действия несколько раз ее зарефрешить. В стиле "если не знаешь, почему крокодилы в одном месте падают с небес и не можешь разобраться, поставь против них неиссякаемый запас крокодильей отравы (и автоочистки от трупов)".
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
16
7 лет назад
0
какая основа у абилки? базовый id назови
0
21
7 лет назад
0
Вот сейчас как раз карта открыта, так что все ключевые параметры сюда и скину, пригодятся мб.
Основа - цепная молния орчьего Far Seer. chainlightning.
Число целей 1.
Урона на цель 0.
Перезарядки были целочисленными, что-то вроде 9/8/8/8/7.
Манакост был ОТРИЦАТЕЛЬНЫМ уже с третьего уровня, примерно так: 50/0/-50/-100/-150.
Разрешенные цели - воздушные, враги, друзья, наземные, герои, нейтральные, сам воин (т. е. можно целить онли любых героев, втч себя).
Анимации молний и целей молний убраны.
Ну то есть пустая цепка. Все действия триггерно.
***********
Фризился уже уровень очевидно не меньше третьего, кстати. Потому что ульта на 8 уровне, т. е. это было по автопрокачке 4 уровня первой абилки, 3 уровня второй и ульта, если хотя бы 8 уровень...
0
16
7 лет назад
0
ссср выкладывал версию, где можно запускапть кд на близзард и молниях (они фаталили в первончальной функции), где-то в треде.
блеать
0
21
7 лет назад
Отредактирован ClotPh
0
Ну там было же про буран и целительную, а не чайник... Чайник тоже? Ок. Значит, то ли после какого-то отката у меня та функция вернулась, то ли именно эта абила какая-то в корень двинутая (хотя скорее всего первое, ведь фатал-то шел даже без анлим ренджа).
Ну ладно, с этим при необходимости разберусь, суть-то была не как кд запустить, а почему его фриз происходит. У меня пока принудительный запуск кулдауна, кроме тест-карт, вообще не юзается, так что это сейчас не важно.
0
16
7 лет назад
0
все цепные молнии в варкраафте одинаковые, независимо от эффекта, основа в движке одна.
про диагностику зависания я всё сказал, пока не расчехлишь читенжин, ничего не добьешься, ибо я такого бага не встречал
0
32
7 лет назад
Отредактирован quq_CCCP
0
Вот она самая
    function StartAbilityCooldown takes unit whichUnit, integer abilityId, real cd returns boolean
        local integer pAbility = 0
        
        if whichUnit == null or GetUnitAbilityLevel( whichUnit, abilityId  ) < 1 or cd == 0.00  then
            return false
        endif
        
        set pAbility = GetUnitAbility(whichUnit, abilityId)
        if pAbility < 1 then
            return false
        else
            if ReadRealMemory(pAbility+0x134)==-1 and ReadRealMemory(pAbility+0x138)==-1 then
                call WriteRealMemory(pAbility+0x134,0)
                call WriteRealMemory(pAbility+0x138,0)
            endif
            set Memory[pReserverdIntArg1 / 4] = SetRealIntoMemory(cd)
            call CallThisCallWith2Args( pStartAbilityCD, pAbility, pReserverdIntArg1 )
            return IsAbilityOnCooldown( pAbility )
        endif
        return false
    endfunction
0
21
7 лет назад
0
quq_CCCP, а-а-а, все понятно, у меня и та и та в кастом коде есть, просто поюзана была неправильная. Надо будет потом в тест-карте поменять, а то у меня оттуда применение новых функций начинается.
Ну лан, сейчас пойду тестовую игру играть с перезарядкой 0, посмотрю, зафризится абила или нет. Думаю, 70% вероятности, что нет и 30%, что все-таки да.
**************
ЛОЛ. Зафризилась.
Ну, поскольку теперь уже перезарядка - 0, решение я знаю. После каста ее удалять и сразу же добавлять снова.
local integer level= GetUnitAbilityLevelSwapped('A276', u5)
ОБНОВЛЕНИЕ РУННОЙ ТЮРЬМЫ
call UnitRemoveAbilityBJ('A276', u5)
call UnitAddAbilityBJ('A276', u5)
call SetUnitAbilityLevelSwapped('A276', u5, level)
ОБНОВЛЕНИЕ РУННОЙ ТЮРЬМЫ - ЗАКРЫТО.
0
16
7 лет назад
0
Так ты нашёл решение? Мне аж интересно стало. Технически алгоритм я понимаю.
2
21
7 лет назад
2
Решение "найдено" - кд абилки 0, при касте и в процессе действия несколько раз ее зарефрешить. В стиле "если не знаешь, почему крокодилы в одном месте падают с небес и не можешь разобраться, поставь против них неиссякаемый запас крокодильей отравы (и автоочистки от трупов)".
Принятый ответ
0
21
7 лет назад
Отредактирован ClotPh
0
Кому интересно, история многострадального Райза немного продолжается.
Выяснились некоторые проблемы с решением выше:
  1. т. к. первый раз абилка рефрешила (удалялась и возвращалась) при касте, факт скастовывания абилы не учитывался вообще (все на ее событие каста триггерилось, но потому, что оно триггерное, а вот на факт применения героем некой способности в принципе уже ничего не триггерилось. Будь способность не триггерной, ее эффект бы не применялся).
  2. из-за того, что у абилки нет перезарядки, логично желание применять ее через хоткей несколько раз, но раз в секунду она рефрешилась, и постоянно сбрасывалось наведение, приходилось перенажимать W.
Короче, при касте рефреш был удален, несколько раз дальше тоже был удален и поставлен один рефреш абилки через 0.2 сек. после ее каста. Первая неприятность пропала, вторая практически тоже, но немного вернулся фриз: при тест-игре в такой ситуации абилка все же умудрилась один раз зафризиться (правда, сразу же вылечиться после первого же рефреша через предмет).
Попробую 0.2 сек. поменять на 0.4...
**********************
Есть!!! Вот только что в игре ясно прям глазами было видно, как на долю секунды попытался фриз сделаться и тут же слетел, т. е. спелл где-то через 0.3x секунды пытается зафризиться, теперь уже никак не сможет. ;) Попался, голубчик =)
***********
ВСЁ. РАЙЗ ИДЕАЛЕН. А что модель из папье-маше, так папье-маше даже красивое.
****************
Ох, лол. После сообщения выше продолжаю играть и в какой-то момент (так и не удалось осознать, как, потому что она несколько раз пыталась - моргали цифры 00 и пропадали, т. е. она рефрешилась) абилка все-таки зафризилась. После первого же предметного рефреша, впрочем, вылечилась окончательно. Ладно, мб потом махну 0.4 сек. на 0.44...
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.