Эффект снижения лечения от Скади, подскажите, пожалуйста, как это можно реализовать?

Эта фишка появилась у скади во второй доте. Так что делать все лечения триггерно. Псевдо гуи будет примерно таким:
Событие Юнит приводит способность в действие
Условие Способность == 'A000' // равкод твоего лечения
Действие 
лечение = УровеньСпособности(unit, 'A000') * 100
Если УровеньСпособности('B000') > 0 Тогда // равкод баффа скади
   лечение = лечение * 0.5 // порезали лечение на 50%
КонецЕсли
// установка хп юнита и спецэффекты ...
Только в доте 2 затрагивает еще и регенерацию, так что объем работ в разы больше
`
ОЖИДАНИЕ РЕКЛАМЫ...
Ответы (1)
21
rsfghd,
Eye of Skadi / Глаз Скади/ ледяная маска, предмет в первой доте. При чем тут лечение - вообще без понятия!
Загруженные файлы
16
Эта фишка появилась у скади во второй доте. Так что делать все лечения триггерно. Псевдо гуи будет примерно таким:
Событие Юнит приводит способность в действие
Условие Способность == 'A000' // равкод твоего лечения
Действие 
лечение = УровеньСпособности(unit, 'A000') * 100
Если УровеньСпособности('B000') > 0 Тогда // равкод баффа скади
   лечение = лечение * 0.5 // порезали лечение на 50%
КонецЕсли
// установка хп юнита и спецэффекты ...
Только в доте 2 затрагивает еще и регенерацию, так что объем работ в разы больше
Принятый ответ
Ответы (3)
17
Эта фишка появилась у скади во второй доте. Так что делать все лечения триггерно. Псевдо гуи будет примерно таким:
Событие Юнит приводит способность в действие
Условие Способность == 'A000' // равкод твоего лечения
Действие 
лечение = УровеньСпособности(unit, 'A000') * 100
Если УровеньСпособности('B000') > 0 Тогда // равкод баффа скади
   лечение = лечение * 0.5 // порезали лечение на 50%
КонецЕсли
// установка хп юнита и спецэффекты ...
Только в доте 2 затрагивает еще и регенерацию, так что объем работ в разы больше
Я понял, если у тебя уже готовый проект на 500+ способностей, это все полностью переделывать надо. Спасибо!
16
TeX13, да, ну или выделить один метод лечения типа UnitHeal(unit u, real amount), где будет проверка
26
TeX13
это все полностью переделывать надо
Нужно сделать отдельную функцию для "лечения", и внедрить её везде.
Внутри этой функции будет идти проверка на бафф, либо вообще на ряд баффов и суммарное изменение эффективности лечения.
Потихоньку все те хилки, где у тебя стоит функция "становить ХП юнита как его ткущее ХП + число" будешь заменять на эту новую, которая внутри будет проверять/считать что нужно и регулировать отхил.
18
Можно в тупую без особого напряга - каждые 1/32 сек проверять хп юнита, и если оно больше чем в прошлой итерации (переменная нужна для хранения значения его текущего хп), то уменьшать его хп на разницу между текущим и прошлым значением, умноженную на коэффициент снижения лечения.
Ответы (16)
25
OVOgenez, не согласен, лучше проверять каждую 1/64 секунды
18
Makeba, (если это не рофл) то может и да, при больших интервалах могут быть заметны скачки хп.
30
Makeba, сколько степеней двойки нужно чтоб проверить прирост хп?
26
OVOgenez:
Можно в тупую без особого напряга - каждые 1/32 сек проверять хп юнита
Ну я ж так делал у себя, только мне там было достаточно и 0.1 секунды
Это та самая абилка которая при понижении ХП возвращала 20/40/60% от потери, и при повышении - докидывала ещё 20/40/60% сверху.
10
Makeba, как это возможно? В wc3 минимальное время - 0.01 сек.
26
human1:
как это возможно? В wc3 минимальное время - 0.01 сек.
Это минимальное которое можно в это окошко вписать, всего-то.
А так ты можешь указать и 0.01 * 0.01, и он тебе посчитает 0.0001
30
Extremator, если что-то нельзя вписать в окошко, то этого не существует.
25
human1, а, ну да, точно, жаль, что 1/64 намного меньше чем 1/100
26
Makeba, смысл не в том что оно меньше (спойлер - оно не меньше), а в том что не нужно вручную забивать все знаки после точки, ибо 1/64 = 0.0158730158...
10
Makeba,
Во первых, 1/64 больше 1/100, а во вторых, 1/64 нельзя выразить в сотых числах, ибо они записывается в десятичной системе счисления как 0,015625. А время в wc3 пишется в сотых числах, то есть минимум - это 0.01 . В wc3 нельзя сделать 0.015 секунд, только 0.01 или 0.02 .
28
В wc3 нельзя сделать 0.015 секунд,
не путай людей, в гуи* нельзя такое вписать
26
human1, можно, я же написал выше пример для GUI - просто юзаешь арифметику, и оно нормально считает результат и задаёт это значение. Для jass ограничение вроде в 10 символов, дальше то ли смысла нет писать, то ли оно просто не выводит результаты конда проверяешь, но считает правильно... Ну там посмотреть самому можно, если тебе прям нужно уточнить эту информацию.
Этот комментарий удален
Чтобы оставить комментарий, пожалуйста, войдите на сайт.