Есть много разных защит от магии, есть способность дриад, например, которая даёт магический иммунитет, есть аналогичная способность у предмета, есть амулет, который раз в 40 секунд блокирует негативное заклинание, есть заговор банши, есть неполная защита, которая уменьшает урон от заклинаний и блокирует некоторые заклинания, есть полная неуязвимость. Мне надо выбрать отряд, где нужно отсеять неуязвимых к магии юнитов, как это сделать?
Вроде как-то видел подобный вопрос, но поиск окончился безуспешно.

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

Джентельмены, очень извиняюсь, рассчитываю, что ваши рекомендации пригодятся мне в будущем, но в данном случае как-то умудрился пропустить, что в условиях boolean comparsion в самом низу начального предложения стоит Неуязвимость к магии. Мне конкретно в данном случае этого достаточно. Ещё раз прошу прощения за потраченное вами время)
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
23
7 лет назад
0
единица будет возврашать 0 так как там возврашает реального число то есть 0.5
2
30
7 лет назад
2
nvc123, там, afaik, не баг, а приведение типов: float приводится к int через отбрасывание дробной части.
А ещё такой проверкой можно убить лоу-хп юнита, который не должен бы умереть.
0
28
7 лет назад
0
Clamp, это баг
т.к. у всего что больше 1 отбрасывание не происходит
хотя если хочешь то можешь называть это фичей)
0
30
7 лет назад
Отредактирован Clamp
0
nvc123, поведение базовых типов диктуется не варкрафтом, а стандартом Си, на котором он написан, зачем ты меня троллируешь, зелёный?!
Тебе что, корма в QA не хватает?!
0
21
7 лет назад
0
Тупой вариант, но понятный любому идиоту и легчайший в импорте, багов минимум
Так можно легко считать магрезист (если он 100% - юнит либо маг иммунный, либо в принципе неуязвимый)
Где-то мне предлагали улучшенный, но усложненный, если надо, сам ищи. А этот - личного изготовления.
function GetUnitMagicResist takes unit u5 returns real
local real magicresist = 100
local real life = GetUnitStateSwap(UNIT_STATE_LIFE, u5)
local real maxlife = GetUnitStateSwap(UNIT_STATE_MAX_LIFE, u5)
if (IsUnitAliveBJ(u5) == true) and ( GetUnitStateSwap(UNIT_STATE_LIFE, u5)) != 0 and (u5 != null) then
call SetUnitLifeBJ( u5, maxlife )
call UnitDamageTargetBJ (u5, u5, 100, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC)
set magicresist = magicresist - (maxlife - GetUnitStateSwap(UNIT_STATE_LIFE, u5))
call SetUnitLifeBJ( u5, life )
else
set magicresist = 0
endif
set u5 = null
return magicresist
endfunction
0
16
7 лет назад
0
ClotPh, а почему оно все на бж? :С
0
21
7 лет назад
0
avuremybe, я же говорю, простой вариант
0
16
7 лет назад
Отредактирован avuremybe
0
ClotPh, я не о сложности. Я об этом:
function GetUnitMagicResist takes unit u returns real
    local real magicresist = 100
    local real life = GetUnitState(u, UNIT_STATE_LIFE)
    local real maxlife = GetUnitState(u, UNIT_STATE_MAX_LIFE)
    if (life > 0.405) and ( IsUnitType(u, UNIT_TYPE_DEAD) == false) and (u != null) then
        call SetUnitState( u, UNIT_STATE_LIFE, maxlife )
        call UnitDamageTarget(u, u, 100, true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, WEAPON_TYPE_WHOKNOWS)
        set magicresist = magicresist - (maxlife - GetUnitState(u, UNIT_STATE_LIFE))
        call SetUnitState( u, UNIT_STATE_LIFE, life )
    else
        set magicresist = 0
    endif
    set u = null
    return magicresist
endfunction
0
26
7 лет назад
0
Джентльмены, вы предлагаете чудесные вещи, только как этим пользоваться для меня загадка. Примерно понять, что и как делает этот Jass-триггер могу, но не знаю, как мне его использовать среди ГУИшных триггеров.
0
21
7 лет назад
0
8gabriel8, надо переместить эту функцию в нестандартный код карты, просто скопировать и всё.
Потом можно будет считывать GetUnitMagicResist(переменная твоего юнита), в гуи, по-моему, через кастом код можно. Лучше возьми вариант ниже, он лучше, хотя суть одинаковая.
То есть один раз поместишь в кастом код - и можно считать магрезист в процентах у любой цели.
Если он >= 100 (хотя > 100 по идее невозможно), значит, цель маг иммунная или неуязвимая.
Только недостатки:
  • Если макс. хп цели не больше 100 и магрезиста нет, она при попытке сосчитать ее магрезист сразу умрёт (ну я обычно только у героев магрезист считаю, хотя вот скоро планирую у юнитов... подумаю... ну это вкрай фиксится добавкой дефолтной предметной способности на макс. хп в начале и убиранием её в конце, только тогда maxlife нужно уже после ее добавки посчитать);
  • Цель дамажит сама себя, что может вызвать побочные эффекты, втч срабатывания каких-то еще триггеров.
А в остальном все очень удобно.
2
16
7 лет назад
Отредактирован avuremybe
2
ClotPh, а зачем тебе именно 100? ХП изменяется до тысячных. Не обязательно измерять это в таких масшатабах.
Срабатывание других триггеров тоже фиксится изи.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.