XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > StarCraft (только чтение)> Галактическая академия
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

 
Epselot

offline
Опыт: 3,592
Активность:
Триггер игнорирования урона
Как сделать чтоб при атаке/получении урона, атакованный юнит не получил урон? (предусмотрено что есть вероятность этого)
Возился с "Изменить урон единицы" наверное что то неправильно делаю, но то что хочу не получилось...
Подскажите кто делал=)
Старый 07.12.2012, 08:01
Ancient
Щпаовапа
offline
Опыт: 38,370
Активность:
Тебе надо что-то типа уклонение из вара?
Если да, то это просто.
Проверяешь наличие способности на уклонение/какой нибудь болеан, если да, то генерируешь число от 0 до 100. Потом если число больше меньше твоей вероятности, хилишь юнита на полученый урон. Вот и все.
Старый 07.12.2012, 14:36
Epselot

offline
Опыт: 3,592
Активность:
Ancient, у меня много оружия и единиц с разной бронёй + бонусы у броне, щит, прописывать для каждого вариант триггер... это фактически не реально... (да и юнит может просто умиреть если жизней мало от выстрела даже с уворотом). Нужно именно когда юнит собрался стрелять или уже выстрелил, но до того как урон был нанесён, урон был ликвидирован каким либо способом, только именно на мгновение этой атаки...
Epselot добавил:
События
Единица - Любая боевая единица начинает атаку
Локальные переменные
Условия
Действия
Единица - (Атакующая боевая единица) Взять Нет урона
Общее - Ожидание 0.07 Игровое время сек.
Единица - (Атакующая боевая единица) Взять Полностью урона
Работает, только с 1, но при 0.07 секунд юнит не получает урон только из Винтовки Гаусса, с другим оружием приходится увеличивать время ожидания, Головорез вообще даже поставив 3 секунды с 4-5 раза наносит урон... Если честно понятие не имею как логика у этой штуки работает... Не логично...

Может у кого нить всёж есть мысли по альтернативным вариантам?
Старый 07.12.2012, 16:17
H
hello world
offline
Опыт: 130,376
Активность:
Во первых не используй wait. Твой триггер перестанет работать в потоках.
Во вторых
прописывать для каждого вариант триггер... это фактически не реально...
очень даже реально. Что там у тебя особенного?
Например есть 5 видов брони и 5 видов атак. Сделай из них тип данных и в нем 5 констант. При запуске просто вычисляй нужное значение простой математической функцией.
Насчет лечения плохой вариант. Ты либо вылечишь его раньше чем он будет получен (т.е при фулл хп здоровье все равно потратится), либо наоборот юнит сначала умрет а потом будет вылечен что уже ничего не изменит.
Тебе нужен бехавиор который полностью игнорирует урон определенного типа, и на время атаки дай этот бехавеор цели, а при окончании атаки сними его. Если например там укажешь блокирование более 100%, то юнит будет даже лечится =)
Старый 07.12.2012, 18:06
Epselot

offline
Опыт: 3,592
Активность:
Hellcore, спасибо, сам не додумался бехавиор дать=) Только надо придумать ещё как удалить его сразу после атаки, Надеюсь даваться будет через Единица - Любая боевая единица начинает атаку нормально.
Вот только можешь уточнить:
Твой триггер перестанет работать в потоках.
Я использовал wait много раз и всё работало, объясни что именно может не работать, про что ты говоришь=)
А про делать в ручную каждый вариант триггера, просто прописывать каждое новое оружие ещё и в триггерах, это слишком напряжно и у меня сейчас уже почти 20 пушек х)
Старый 07.12.2012, 21:38
H
hello world
offline
Опыт: 130,376
Активность:
А про делать в ручную каждый вариант триггера, просто прописывать каждое новое оружие ещё и в триггерах, это слишком напряжно и у меня сейчас уже почти 20 пушек х)
нет ты не понял.
Запомни самое главное правило написания любого кода (даже gui'шноко)
don't repeat yourself
Никогда не делай кучи одинаковых триггеров для разных событий. Как я уже и сказал сделай список констант и оружий.
Все это легко делается одним триггером. Для удобства можно сделать парочку своих функций который будут запускать новый поток.
Например действие "Сделать юнита не восприимчивым на следующую атаку." А в код действия уже будет давать и снимать бехавиор. Т.е я бы сделал примерно так:
События
Юнит начинает атаковать
Условия
Тут условия, например атакованный юнит такой то герой. Либо можно сделать скрытую системную абилку-бехавиор и в редакторе объектов дать её тем юнитам, которые должны уклонятся. А тут соответственно проверять имеет ли атакованный юнит такую абилку.
Действия
тип_атаки = атакующий_юнит_тип_атаки. Если у тебя особенные типы сделай им доп. данные.
тип_брони = атакованный юнит_тип_брони. Также можно сделать доп. данные.
Отклонить атаку атакованный-юнит используя тип брони тип_брони.
И сама функция void Отклонить атаку(unit, armor_type) :
if unit_has_behavior(unit,'Системный бехавиор которые должен быть у всех юнитов умеющих отклонять') {
либо другие условия.
Дать юниту unit бехавиор 100% защита.
ждать 0.1 секунду
Отнять у юнита unit бехавиор 100% защита
}
Само сабой unit должен быть локальной переменной.
Если частично или полностью не понятно что я написал, то почитай статьи про типы данных. Я сам писал пару штук:
вот эти статьи будут очень полезны. Еще можешь посмотреть мои карты сделанные еще на бете sc2, и недавнюю xgm.ru/p/sc2/xgm_awake - тут тоже используются типы данных и функции.
Старый 07.12.2012, 22:07
Epselot

offline
Опыт: 3,592
Активность:
С завершением просто сделал:
События
Единица - Любая боевая единица под атакой
Локальные переменные
Условия
Действия
Единица - Удалить 1 * Другое Игнорирование урона из (Запускающая единица) игрока 0
Работает вроде норм, а вот:
События
Единица - Любая боевая единица начинает атаку
Локальные переменные
Условия
Действия
Единица - Добавить 1 * Другое Игнорирование урона к (Атакующая боевая единица) игрока 0
Сильно косячит, на чрезвычайно быстрые атаки оно не успевает среагировать, и на атаки с большой задержкой, тоже не реагирует. Какие есть ещё способы среагировать точно до начала урона а не атаки?
Epselot добавил:
Hellcore, да я понял про что ты говоришь. Я сделал и так бы всё работает, но: "События Единица - Любая боевая единица начинает атаку" очень сильно косячит...
Некоторое оружие пробивает сразу несмотря что вероятность 100% игнора урона, некоторое пробивает с допустим 5-7 выстрела, не понимаю логики...
Конечно это лучше чем нечего, и можно вписать в игру даже нормально, но это всего лишь триггер, хочется логичности...
А случаем нет нечего что может зафиксировать момент до факта воздействия эффекта урона?
Или сделать эффект урона как то так чтоб его можно было отследить?
Старый 07.12.2012, 22:40
Epselot

offline
Опыт: 3,592
Активность:
Проделал много тестов, сделал вывод, триггер не способен уловить момент перед нанесением урона...
Это печально, придётся извращаться...
Старый 08.12.2012, 10:30
yellyex

offline
Опыт: 4,667
Активность:
Прочитав тему я не понял, что нужно автору. Где конкретное действие того, чего он хочет получить?
Каким образом надо, чтобы атакованная единица не получила урон?
Есть события Единица атакует или атакована и Единица получает урон.
Если надо, чтобы урон не наносился просто от атаки, то можно после того, как единица атакована или получает урон (смотря, что нужно) вешать алгоритм с поглощением урона на 100% и сразу после атаки снимать его.
Если надо, чтобы урон самой атаки был 0, то это с другой стороны юнит атакует вешать на атакующего юнита алгоритм с уменьшением урона на 100%.
Старый 08.12.2012, 21:55
Харгард
Epic
offline
Опыт: 7,829
Активность:
Это легко делается при помощи валидаторов в эффектах, наносящих урон.
Да, это может сделать способности сложнее, но это повод пересмотреть подход к их проектированию.
Старый 08.12.2012, 23:39
Epselot

offline
Опыт: 3,592
Активность:
Харгард, да я знаю что через эффекты делается всё идеально, вот только, хотелось сделать вероятность попадания в зависимости от расстояния, алгоритмов на атакующем и атакуемом юнита, от оружия, очень много факторов, а эффект как триггер не пропишешь... + У меня и так на оружии эффектов прилично... Правда я совсем не знаю о возможностях прописи в XML, не хочу трогать оружие, хочу попробовать на атакуемом юните сделать защиту, потому что 20 эффектов на 1 оружии это не гуд...
Старый 09.12.2012, 08:28

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:16.