GetLocalPlayer, это просто исправляется введением функции, которая возвращает максимум хп без учёта этой способности.
function GetUnitMaxHealth takes unit u returns real
local real life = GetWidgetLife(u)
local real maxlife
local boolean removed = UnitRemoveAbility(u, HealthAbility)
set maxlife = GetUnitState(u, UNIT_STATE_MAX_LIFE)
if removed then
call UnitAddAbility(u, HealthAbility)
call SetWidgetLife(u, life)
endif
return maxlife
endfunction
Можно написать иначе, если известно, сколько здоровья абилка даёт.
function GetUnitMaxHealth takes unit u returns real
return GetUnitState(u, UNIT_STATE_MAX_LIFE) - 1000000 * GetUnitAbilityLevel(u, HealthAbility)
endfunction
Эту функцию можно добавить в саму либу, а можно, чтобы юзер её сам написал. Мне пока никто с такими проблемами не обращался, потому что либу никто не юзает.
Уверен, тут может быть много подводных камней, но для начинающих вполне сойдёт, а там дальше они своё напишут, или пересядут на мемхак/1.29+.
Именно по этому в WispTD я сделал своё здоровье, и просто процентно отражал его в реальном здоровье.
установить его текущее здоровье равное здоровью до удаления способности
Достаточно запустить тестовую карту и убедиться, что так работать не будет.
Кратко говоря - во время выполнения функции у юнита может быть ~миллион хп, после удаления способности это превратится в 100% его нормального здоровья. А до всех манипуляций у юнита было 3 хп. Это хорошо видно в тестовой карте, нужно рабочего вниз увести.
rsfghd, GetTriggerUnit - это стандартная функция, есть у всех. А все остальные - просто аналоги, порой кривые, как GetSpellAbilityUnit(). Зачем они - хз.
Desgul, баг-то и в одиночной проявляет себя. Fly123, да хватить цитировать комментарии полностью, да ещё и по нескольку раз.
Если хочешь оставить вейт, то в самом начале заноси нужные GetSpell в локалки.
А на самом деле я не совсем понял
Да допустим у тебя 1 триггер на каст. Он с вейтом. После вейта у тебя идёт обращение к цели каста (GetSpellAbilityTarget).
Срабатывает этот триггер (поток 1), начинается вейт. Тут этот триггер опять срабатывает (поток 2) и уже для этого начинается вейт. Для потока 1 вейт заканчивается, а GetSpellAbilityTarget в этом потоке возвращает null. Почему - потому что близзард. Причём это может быть даже без вейта.
Desgul, мой первый комментарий тут относился не в тебе, а к тс-у.
Во-первых, использовать ждать в триггерах каста строго запрещено.
Во-вторых, условие для группы бред, ты выбираешь всех юнитов, если кастер паладин, и ни одного, если кастер не паладин.
Во-первых, хватит цитировать комментарии полностью.
Во-вторых, сделайте тоже самое на пустой карте, скиньте скриншот, как вы там сделали, скиньте саму карту.
Ред. PT153
» WarCraft 3 / Negate Damage library
Уверен, тут может быть много подводных камней, но для начинающих вполне сойдёт, а там дальше они своё напишут, или пересядут на мемхак/1.29+.
» WarCraft 3 / Нарезалка LoadingScreen'а (теперь с интерфейсом!)
» WarCraft 3 / Как настроить такой триггер?
Ред. PT153
» WarCraft 3 / AI natives
Ред. PT153
» WarCraft 3 / Negate Damage library
» WarCraft 3 / Negate Damage library
» WarCraft 3 / Get Unit Armor
Ред. PT153
» WarCraft 3 / Negate Damage library
» WarCraft 3 / Negate Damage library
Ред. PT153
» WarCraft 3 / Negate Damage library
» WarCraft 3 / Negate Damage library
» H.P.W / H.P.W
» WarCraft 3 / В чём ошибка?
» WarCraft 3 / В чём ошибка?
Fly123, да хватить цитировать комментарии полностью, да ещё и по нескольку раз.
Если хочешь оставить вейт, то в самом начале заноси нужные GetSpell в локалки.
Срабатывает этот триггер (поток 1), начинается вейт. Тут этот триггер опять срабатывает (поток 2) и уже для этого начинается вейт. Для потока 1 вейт заканчивается, а GetSpellAbilityTarget в этом потоке возвращает null. Почему - потому что близзард. Причём это может быть даже без вейта.
» Администрация XGM / Убрать цитирование всего комментария
Вот опять.
» WarCraft 3 / В чём ошибка?
» WarCraft 3 / В чём ошибка?
» WarCraft 3 / В чём ошибка?
Ред. PT153
» WarCraft 3 / В чём ошибка?
Ред. PT153
» WarCraft 3 / Обучение jass
Ред. PT153
» WarCraft 3 / В чём ошибка?
Во-вторых, условие для группы бред, ты выбираешь всех юнитов, если кастер паладин, и ни одного, если кастер не паладин.
» WarCraft 3 / Обучение jass
» WarCraft 3 / JNGP обманывает меня
» WarCraft 3 / JNGP обманывает меня
» WarCraft 3 / JNGP обманывает меня
Во-вторых, сделайте тоже самое на пустой карте, скиньте скриншот, как вы там сделали, скиньте саму карту.