Хотел бы, чтоб вы помогли с триггером, в котором при получении урона юнит получал бы только - 1 хп. Помогите пожалуйста

Каменные доспехи будут лучшим вариантом, ещё можно попробовать поставить божественную защиту, но она может и 2 урона получить, надо проверять, и есть вариант с отловом урона по глыбе, вручением неуязвимости, таймером 0.00 секунд, снятием неуязвимости и одной жизни.
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
  1. а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
    б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
    В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
    Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.

13
Не понимаю. Мб тебе нужно действие Damage Target?
3
Esea:
Не понимаю. Мб тебе нужно действие Damage Target?
Просто я бы хотел создать глыбу, которую нужно добывать, но чтоб сбалансировать, хочу сделать урон по ней максимум - единица. Как бы это можно провернуть?
27
так понял вы хотите чтобы жертве наносился дамаг, и чтобы при этом ее не убив, оставив 1 хп. Это как у способности чума, там ежесекудно наносят дамаг, и вконце когда остается чуть-чуть, жертве оставляют 2 хп. Тебе тогда надо считать, проверяя сколько хп, и наносить чистый дамаг
3
Steal nerves:
так понял вы хотите чтобы жертве наносился дамаг, и чтобы при этом ее не убив, оставив 1 хп. Это как у способности чума, там ежесекудно наносят дамаг, и вконце когда остается чуть-чуть, жертве оставляют 2 хп. Тебе тогда надо считать, проверяя сколько хп, и наносить чистый дамаг
Не совсем, я бы хотел так: У юнита 10 хп. Каждый удар по нему независимо от кол-ва урона будет наносить единицу, и так до смерти. 0 хп - юнит умер
27

или вам нужно изменить дамаг на 1 единицу? можно сделать 3 способами:
  1. в новом патче есть возможность изменять дамаг
  2. через мем хак, есть даже тема как отловить и изменить
  3. делаем систему урона: можно в момент урона дать макс. запас хп, вам наносится дамаг. потом через 0.00 сек вернуть хп, какое было до этого (триггерами подправляем хп), но на 1 единицу меньше. макс. запас хп убрать. макс. запас обычно даем чтобы юнит не умер, тк дамаг мб больше чем хп
3
Steal nerves:

или вам нужно изменить дамаг на 1 единицу? можно сделать 3 способами:
  1. в новом патче есть возможность изменять дамаг
  2. через мем хак, есть даже тема как отловить и изменить
  3. делаем систему урона: можно в момент урона дать макс. запас хп, вам наносится дамаг. потом через 0.00 сек вернуть хп, какое было до этого (триггерами подправляем хп), но на 1 единицу меньше. макс. запас хп убрать. макс. запас обычно даем чтобы юнит не умер, тк дамаг мб больше чем хп
в новом патче, т.е этого года или патче world editor'а?
27
Daniil37, да. правда сам не пробовап. но читал что можно.
пробуй еще каменные доспехи, они снижают физический дамаг. просто укажи в абиле мин. урон = 1, отклоненный урон = 0
описание
Каменные доспехи 'Assk'/'Ansk' - снижает и отклоняет с шансом наносимый урон. "Минимальный урон" - допустимый урон, наносимый самому себе (вообще-то наносит противник). Можно убить себя за допустимого 9999к урона, если противник нанесет хотя бы единицу урона. А вот за ноль урон обнуляется. Отрицательное значение наносит ущерб врагу. "Отклоненный урон" - просто отклоняет урон (есть указан 12, а враг наносит 15, то носитель доспех получит 3 урона). Отклонить можно 9999к урона. Правда, поле "Отклоненный урон" зависима от "Минимальный урон". Если в минимальном уроне указано 9999к - носитель доспех умрет, а если в минимальном уроне указан ноль, то урон обнуляется, таким образом отклонить ничего не получится. В этой абилке указывают шанс, без шанса не работает отклонение и минимальный урон. Блочит только физический урон (магический не блочит). В каменных доспехах можно указать как блокировать (в ближнем бою, или в дальнем бою). Картечь пробивает каменные доспехи. Каменные доспехи не снижают нанесённый триггерно урон.
20
Дай просто глыбе овермного ед. брони. Например 10000.
26
Каменные доспехи будут лучшим вариантом, ещё можно попробовать поставить божественную защиту, но она может и 2 урона получить, надо проверять, и есть вариант с отловом урона по глыбе, вручением неуязвимости, таймером 0.00 секунд, снятием неуязвимости и одной жизни.
Принятый ответ
28
Daniil37, вот лаунчер последнего патча. Осторожно, если на компе есть другой варик, лаунчер попытается его обновить, потому делай бекапы.
Загруженные файлы
16
8gabriel8, от Силы Тьмы она может и 100 урона получить, а вообще это настраивается в константах.
30
На последнем патче вообще всё просто
do
	local DamageTrigger = CreateTrigger()
	for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
		TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGING) -- До вычета брони
		--TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGED) -- После вычета брони
	end
	TriggerAddAction(DamageTrigger, function()
		local damage = GetEventDamage() -- число урона
		if damage < 1 then return end
		local target = GetTriggerUnit() -- тот кто получил урон
		local caster = GetEventDamageSource() -- тот кто нанёс урон
		
		if GetHandleId(target) == FourCC('Глыба') then
			-- Что-то делаем
		end
	
	end)
end
32
NazarPunk, ты знаешь, это на любой версии вара не сложно, но раз автор спрашивает, боюсь что он начинающий гуишник и ему очень не просто понять о чем тут речь. Пре хил по событию урона довольно старое, простое, работоспособное решение.
30
Пре хил по событию урона довольно старое, простое, работоспособное решение.
Ну не такое и простое
  • запомнить хп до нанесения урона
  • дать абилку на макс хп
  • вернуть хп обратно
  • перенанести нужный урон
10
NazarPunk:
Пре хил по событию урона довольно старое, простое, работоспособное решение.
Ну не такое и простое
  • запомнить хп до нанесения урона
  • дать абилку на макс хп
  • вернуть хп обратно
  • перенанести нужный урон
А скачок хп не будет заметен?
10
PT153:
ArchOracle, если сделать всё верно, то нет.
И как верно? (Можно ссылкой на статью, если есть актуальные и без мемхака, с мемхаком концептуально просто и ясно - напрямую меняешь урон)
28
ArchOracle, какой патч?
На 1.26а нужно владение JASS и знание хештаблиц.
26
Что-то сложненькое)
Достаточно же таймера на 0.00 секунд.
28
8gabriel8, а как ты перенесёшь в коллбек таймера юнита и нужный урон? Можно через глобалки, но хешем надёжнее.
26
На основе предмета, который прибавляет здоровье (Камень Жизни), делаешь способность на +100500 хп. Когда герой получает урон, сохраняешь текущее значение здоровья, даёшь способность, восстанавливаешь здоровье до 100% и запускаешь таймер на 0.00 секунд. Когда таймер истечёт, запоминаешь разницу в здоровье, забираешь способность и устанавливаешь здоровье на прошлое минус разница.
Но хешем действительно надёжнее в ситуациях, когда есть больше одного героя, у которого отлавливаем урон, потому что может быть ситуация, когда враг атакует, например, атакой по площади, в итоге несколько пострадавших получит способность на прибавление здоровья, но снимется она лишь у одного.
И ещё триггер на отлов урона надо при срабатывании выключать, а при истечении таймера включать. Потому что будут лаги со способностями, которые вешают бафф. Сначала герой получает 0 урона от баффа, а потом урон от способности. Например, кинут в героя Молот Бурь, у него запоминается здоровье, выдаётся прибавка здоровья, восстанавливается до 100% и запускается таймер, но в тот же момент он получает урон от молотка, у него уже полно здоровья, оно перезаписывается в переменную, опять восстанавливается до 100% и таймер перезапускается. По истечении таймера у героя будет полное здоровье минус урон от молотка, если он был при смерти, то его это вылечит.
Кстати, если на карте одновременно нет способностей, которые наносят больше урона, чем максимальное здоровье героя, и нет защитных способностей от них на основе рунных браслетов, то можешь не делать способность +100500 хп, а просто до 100% здоровье восстанавливать.
То есть не самой способности на основе рунных браслетов, а её триггерной имитации.
28
И ещё триггер на отлов урона надо при срабатывании выключать, а при истечении таймера включать. Потому что будут лаги со способностями, которые вешают бафф. Сначала герой получает 0 урона от баффа, а потом урон от способности. Например, кинут в героя Молот Бурь, у него запоминается здоровье, выдаётся прибавка здоровья, восстанавливается до 100% и запускается таймер, но в тот же момент он получает урон от молотка, у него уже полно здоровья, оно перезаписывается в переменную, опять восстанавливается до 100% и таймер перезапускается. По истечении таймера у героя будет полное здоровье минус урон от молотка, если он был при смерти, то его это вылечит.
Если триггер отключается, то зачем тогда хеш? Проще всего поставить условие, что получаемый урон больше 0.

А любой способ ерунда.
При одновременном нанесении урона в способе 8gabriel8 нанесётся только первый урон (для остальных триггер просто не сработает), а в моём, из-за того, что у каждого таймера сохранено одинаковое хп, нанесётся лишь последний урон.
Проверить это легко: задайте лучнице в очередь 5 раз скастовать Q на раба. Без триггеров юнит умрёт, с триггерами - нет.
В загруженной карте реализован способ 8gabriel8. Чтобы сделать мой, откомментируйте call DisableTrigger(gg_trg_take) в DoDamage() и закоментируйте в Start().
Загруженные файлы
26
  • Если триггер отлавливает получение урона с нескольких юнитов;
  • Если врагов много, например, когда они управляются человеком, который мышкой двоих юнитов выделит и отдаст приказ группе атаковать героя, то есть их урон может быть нанесён в один момент.
В таком случае мы получим нормальный результат, так как изначальное количество здоровья записано и триггер выключился, а по истечении 0.00 секунд было нанесено несколько уронов, которые вычтем из изначального здоровья. Но если нужно сделать что-то ещё, например, сохранить урон из всех источников, чтобы в мультиборде отображать, кто сколько нанёс, то часть урона потеряется. Уже не помню причину, по которой не использую условие, что урон больше 0, вроде всё нормально для этого случая. Может быть тоже для каких-то эффектов, когда урон не проходит, например, из-за Магического щита, но эффект надо отобразить.
Это было про необходимость хеша.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.