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

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

Решение "найдено" - кд абилки 0, при касте и в процессе действия несколько раз ее зарефрешить. В стиле "если не знаешь, почему крокодилы в одном месте падают с небес и не можешь разобраться, поставь против них неиссякаемый запас крокодильей отравы (и автоочистки от трупов)".
3
16
7 лет назад
3
0
21
7 лет назад
0
Вообще ни с кем из героев так трахаться не приходилось, как с этим Райзом (ну это у него ульта делает абилы с анлимитед ренджем). И главное, что после всего этого результат-то ничего особенного собой не представляет - моделька все равно папье-маше, удовольствие от геймплея именно им среднее, только и понт, что ульта ппц оригинально-комбовая. Но уж раз он сделан, надо в достойное состояние приводить =)
DracoL1ch, и что? Ну буду знать, что ты Google Chrome пользуешься. Спасибо, так-то видео интересное, но...
В том и прикол, что действительного изменения к/д абилки НЕ происходит же (то есть может отдельно происходить, но, еще раз, это ничего не меняет). Более того, после ряда действий, никак НЕ использующих функции мемхака (простой рефреш - обычная варовская функция) состояние абилки НОРМАЛИЗУЕТСЯ.
У меня было подозрение, что там как-то адреса в памяти ренджа абилки и чего-то связанного с ее перезарядкой конфликтуют, но подробнее разобраться не могу и все еще не понятно, почему такое именно с этой... У того же героя есть другая абилка, ее перезарядка ниже и ее я тоже постоянно на анлимитед рендж баффаю. Так как перезарядка ниже, то в случае косяков они, очевидно, выявились бы куда быстрее. Но с другой абилкой вообще проблем не наблюдается.
0
16
7 лет назад
0
неважно, что там происходит. ты должен пойти и проверить, что записано в ячейке при зависании, и уже оттуда плясать дальше
0
21
7 лет назад
0
Пока что выяснилась дополнительная причуда абилы: при попытке запустить ее кулдаун через мемхаковскую функцию она фаталит. Все еще думаю, как же извратиться, хочется решить проблему побыстрее и с минимумом энергозатрат.
Проблемная абила - вэшка. Уже была идея даже дать кушке 20% шанс при касте перезарядить вэшку. Это действовало, но как назло, абила морозилась до последнего - если после обычного рефреша она сдавалась и выздоравливала с 1-3 раза, то после таких перезарядок с 4-5. В общем, в итоге профита никакого, а только извращенное усложнение, откатилось все обратно, сижу думаю. Пока буду плясать от того, чтобы как-то абилку перезарядить.
Герой не имба, так что там так-то можно хоть К/Д ноль поставить, только манакост дать тогда; но, чтобы сменить К/Д и манакост в РО, надо карту открывать, а она час открывается...
Башка не варит, а результат получить хочется...
*******************
Пока просто оставлю это здесь, код для рефреша абилки героя (кстати, любой, только равкод махнуть, если кто не знает, вообще надо подобное выносить в функцию)
local integer level= GetUnitAbilityLevelSwapped('A276', u5)
ОБНОВЛЕНИЕ РУННОЙ ТЮРЬМЫ
call UnitRemoveAbilityBJ('A276', u5)
call UnitAddAbilityBJ('A276', u5)
call SetUnitAbilityLevelSwapped('A276', u5, level)
ОБНОВЛЕНИЕ РУННОЙ ТЮРЬМЫ - ЗАКРЫТО.
**************
Короче, пока будет выбран способ, не требующий включения мозгов вообще. Кулдаун абилке будет поставлен 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...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.