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

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

Ответ
 
Rvn
Skillful level designer
offline
Опыт: 15,907
Активность:
Дополнительный урон от магии
Возможно ли сделать так, что бы при использовании определенных способностей урон, наносимый ими, увеличивался триггерно и, что важнее, процентно?
Пример.
Есть способность "Fireball", которая наносит выбранной цели 300 урона. Если у героя-кастера есть предмет с бонусом "+10% magic damage", то "Fireball" будет наносит не 300, а 330 урона.
Старый 05.03.2009, 13:18
ExArt

offline
Опыт: 13,634
Активность:
Rvn Сделай изначально триггерный урон. Либо надо использовать систему детекта урона в которой всем юнитам а карте надо будет давать орб эффекты. И уже по наличию бафа от орба на юните определять магический урон или физический.
Старый 05.03.2009, 13:25
alexkill

offline
Опыт: 18,872
Активность:
Для данной способности можно вычислить урон, используя функцию GetEventDamage() (предварительно создав динам. триггер с событием получения урона), и наносить доп. процентный урон триггерно с учетом проверки на наличие предмета.

В крайнем случае можно урон хранить в базе.
Старый 05.03.2009, 13:28
agentex

offline
Опыт: 34,834
Активность:
Цитата:
Rvn Сделай изначально триггерный урон. Либо надо использовать систему детекта урона в которой всем юнитам а карте надо будет давать орб эффекты. И уже по наличию бафа от орба на юните определять магический урон или физический.

способ через орб полный отстой, потому что блокирует остальные орбы у героя. я решил это так: при атаке в БД заношу что атакующий юнит атакует, т.е. true. потом в спец. тригер добавляю событие что атакованный юнит получает повреждения. в этом триггере запускаю таймер с 0 таймаутом, по таймеру выставляется булина что наносящий урон юнит уже не атакует. ну и естесно понадобится еще 1 функция, принимающего DamageSource, и возращающая булину, дамаг ли это от атаки. если возвратит false - это дамаг от спелла.. вот примерно так. А еще, если есть юниты с медленным полетом снаряда, такая система может сбоить, но других вариантов увы нет
Старый 05.03.2009, 13:57
Captain Kuro

offline
Опыт: 430
Активность:
Имо лучший способ - наносить урон триггерно. Чтобы добавить 10% достаточно умножить урон на 1.1. Этот 1.1 занести в переменную с начальной цифрой 1 при изучении абилки, которая даст +10% к маг. урону.
Старый 05.03.2009, 14:00
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
Способ с базой данных отстой:-) только память лишнюю занимает. Не заморачивайте голову парню, если сами не шарите. Автор, делай просто проверку на уровень второй абилки и в зависимости от её уровня увеличивай урон как тебе надо. Функция GetUnitAbilityLevel. Для предметов этот способ тоже работает.
Старый 05.03.2009, 14:11
alexkill

offline
Опыт: 18,872
Активность:
Цитата:
Сообщение от Captain Kuro
Имо лучший способ - наносить урон триггерно. Чтобы добавить 10% достаточно умножить урон на 1.1. Этот 1.1 занести в переменную с начальной цифрой 1 при изучении абилки, которая даст +10% к маг. урону.

Читай посты выше.

Поясню мой вариант конкретнее: в действиях триггера с событием "Юнит приводит способность в действие" создается еще один.

agentex, не понял, зачем в базе хранить буль, когда можно к хэндлу динам. триггера аттачить атакующего воина и проверять в действии этого триггера:
Код:
if GetEventDamageSource()==Unit[handle] then
...

?

Цитата:
Способ с базой данных отстой

не всегда
Старый 05.03.2009, 15:36
NETRAT

offline
Опыт: 83,712
Активность:
Есть способности резиста от магии, подозреваю что они же работают и в обратную сторону - увеличивают урон от магии, тогда задача сводится к определению каста спелла и получению дамага целью.
Старый 05.03.2009, 15:44
agentex

offline
Опыт: 34,834
Активность:
Цитата:
Не заморачивайте голову парню, если сами не шарите. Автор, делай просто проверку на уровень второй абилки и в зависимости от её уровня увеличивай урон как тебе надо. Функция GetUnitAbilityLevel. Для предметов этот способ тоже работает.

омг шарящий ты наш, может ты не будеш никому морочить голову своим бредом? если ты не заметил мы говорим о универсальном способе отследить урон
Цитата:
Способ с базой данных отстой:-) только память лишнюю занимает.

умник, 2 массива почти ничего не занимают, если учесть что в моей системе занятых индексов будет столько, сколько юнитов одновремененно живут и атакуют, т.е. на средней карте гдето штук 30, это вообще занимает 1\100 всей остальной памяти юзающейся в тригерах


ну может побольше, смотря как распределятся хендлы


alexkill буль привел для примера, на самом деле у мну двойная проверка
Старый 05.03.2009, 15:47
Rvn
Skillful level designer
offline
Опыт: 15,907
Активность:
NETRAT это наиболее оптимально было бы, остается проверить и решить проблему, что бы иконка добавляемой цели каста спелла не была видна ( вроде где то была наработка по добавлению неограниченного кол-ва "неведимых" предметов )...
Старый 05.03.2009, 16:04
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
agentex, умник, автор спрашивал не про отслеживание урона, а про его увеличение, если у героя есть предмет, я отвечал по существу, а у тебя оффтоп. Тем более мой способ лучше надо всего лишь одно условие добавить. К тому же урон можно и без бд отследить.

Igores добавил:
Rvn, попробуй через буки.
Старый 05.03.2009, 16:16
agentex

offline
Опыт: 34,834
Активность:
В твоем случае при атаке тоже урон увеличится, а автору нужно увеличить только дамаг от спеллов

agentex добавил:
Цитата:
Есть способности резиста от магии, подозреваю что они же работают и в обратную сторону - увеличивают урон от маги

кстати да NT прав, они работают в обратную сторону, в АоНе несколько артов и спелов на этом основано. Так что остается вычислить скорость полета снаряда, за небольшое время до столкновения давать антирезист, потом через секунду к примеру забирать его у цели.
Старый 05.03.2009, 16:19
NETRAT

offline
Опыт: 83,712
Активность:
Rvn в спеллбук абилку запихни и дизебли спеллбук... старо как мир - отследить попадание спелла в цель куда сложнее
ссылка на говносайт у тебя в подписи запрещена
Старый 05.03.2009, 16:22
No-D
Ноуди
offline
Опыт: 5,611
Активность:
А может дать предмету способность "Техника"? Заменяя свой спелл на более сильный? Или я не тру T_T
Старый 05.03.2009, 17:31
Hanabishi
COOL STATUS
offline
Опыт: отключен
я тут подумал...
можно добавлять юниту (на которого нацелено заклинание), способность на основе "Благословления элуны", с количеством "Снижение магического урона", например, 1.5
т.е. юнит получит 150% повреждений
Старый 05.03.2009, 18:03
NETRAT

offline
Опыт: 83,712
Активность:
Цитата:
я тут подумал...

можно добавлять юниту (на которого нацелено заклинание), способность на основе "Благословления элуны", с количеством "Снижение магического урона", например, 1.5
т.е. юнит получит 150% повреждений
где-то в посте #8 написано
Старый 05.03.2009, 18:14
ExArt

offline
Опыт: 13,634
Активность:
Rvn Тебе всё равно придётся отслеживать момент попадания болта во врага. Способ agentex'а баговый, он об этом написал. Тока вот ещё если замахнуться и прекратить атаку булинь станет true, а атаки не произойдёт и каст после этого задетектится как удар, тоже самое с промахами. Хотя если ты делаешь сингл плеер карту, то конечно можно тупо при поднятии предмета дать всем юнитам на карте благословение Элуны) Лучший вариант предложил Void Walker, имхо. Во-первых никаких багов, во-вторых то что заклинание усилилось будет видно в его описаниии, но надо создавать дубликаты для всех дамажащих спелов.
Старый 05.03.2009, 18:20
Rvn
Skillful level designer
offline
Опыт: 15,907
Активность:
ExArt способность "Техника" я уже использовал для системы улучшение спеллов рунами аля как в Diablo 3. Так что этот способ не катит (

Rvn добавил:
Есть идея... если можно отслеживать кол-во ХП на данный момент, то...
При касте спелла сохраняет ХП у цели каста и создаем динам. триггер с событием "юнит получил урон", после чего из сохраненного ХП вычитаем то, что осталось и процент ( если бонус, к примеру, 10%, то вычитаем 90% ) и получившиеся число демажим цели каста. Выходит универсально, так как можно использовать и для демажащих скиллов и для лечащих ( было хп 100, стало 200, бонус 10%... 100-200=-100-90%=-10 в итоге наносим МИНУС 10 урона, т.е. хилл на 10 ХП )
Старый 05.03.2009, 19:34
MegaPhoenix

offline
Опыт: 2,932
Активность:
А почему нельзя делать так:
Событие: Юнит начал применять способность
Условие: У юнита есть предмет (+10 к урону от спеллов)
Действие: (сasting unit) наносит урон (target spell unit) равный (10%)
???
Тут только нужно будет узнать сколько именно урона было нанесено и всё.
Старый 05.03.2009, 19:50
ExArt

offline
Опыт: 13,634
Активность:
Rvn Ну дык а если юнита бьют пока летит нюк. С орб эффектами лучше, тока стандартные орбы придётся переделывать триггерно, зато без багов.
Старый 05.03.2009, 19:56
Ответ

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

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

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

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



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