Переменный в событиях
|
|
-
Icepriest | Дата: Понедельник, 08-08-2016, 11:24:34 | Сообщение # 1 |
Темный рыцарь
загрузка наград ...
Группа: Проверенные
Сообщений: 213
Репутация: 477
Статус: Не на сайте
|
Проблема в том, что почему-то переменные в событиях не юзаются, в события можно впихнуть только выбранный объект через карту, но мне это совершенно не подходит(( Хелп! (сейчас проблема со специфическим событием отряда)
У меня настолько известный город в котором я живу, что у меня все время спрашивают "А где это?"
|
| | |
-
doompeter | Дата: Понедельник, 08-08-2016, 13:15:32 | Сообщение # 2 |
Раб
загрузка наград ...
Группа: Пользователи
Сообщений: 2
Репутация: 6
Статус: Не на сайте
|
Icepriest, вероятно используешь GUI? В стандартных триггерах невозможно выбрать для таких событий переменную, созданную в редакторе переменных. Единственный выход - перевести триггер в программный код и прописать в нужный параметр глобальную переменную, отвечающую отслеживаемому объекту. У меня так работают триггеры на проверку,получил ли определенный юнит урон. Скорее всего важно, что бы при регистрации события триггера переменная уже имела ненулевое значение.
|
| | |
-
Icepriest | Дата: Понедельник, 08-08-2016, 13:25:46 | Сообщение # 3 |
Темный рыцарь
загрузка наград ...
Группа: Проверенные
Сообщений: 213
Репутация: 477
Статус: Не на сайте
|
Ясно, я понял, спасибо
У меня настолько известный город в котором я живу, что у меня все время спрашивают "А где это?"
|
| | |
-
Extremator | Дата: Четверг, 11-08-2016, 17:16:38 | Сообщение # 4 |
Темный рыцарь
загрузка наград ...
Группа: Проверенные
Сообщений: 241
Репутация: 244
Статус: Не на сайте
|
Цитата doompeter ( ) Единственный выход - перевести триггер в программный код и прописать в нужный параметр глобальную переменную, отвечающую отслеживаемому объекту. Это ошибочный ответ. Если не сказать что вообще не верный... Наверно ты просто не смог правильно выразить то, что хотел. Ибо написанное - не верно.
События в GUI не ссылаются на GUI-переменные, потому что все события обычно регистрируются при старте карты. Следовательно можно указать только тот объект, который уже существует, в момент перед регистрацией этого события. Поэтому для отлова урона нужно динамически добавлять события на получение урона в нужный триггер - триггер будет иметь много событий, на получение урона каждым из зарегистрированных юнитом
Полагаю, что ты хотел просто провести регистрацию переменной, а потом записывать в неё нужного юнита = событие для него. Так сделать не получится. Почему? - потому что игра работает с объектами, а это юниты. А переменная не является объектом. Переменная хранит ссылку на юнита. И когда ты регистрируешь событие с переменной (как ответили тебе выше), то ты регистрируешь не саму переменную, а того юнита который в неё сейчас записан. Если переменную перезаписать/обнулить - регистрация не пострадает.
Вывод - динамически создавай события.
Например: юнит атакован -> если он её не зарегистрирован -> зарегистрировать его Теперь атакуя его ты сможешь получать урон... даже от скиллов, но скилл не вызовет регистрацию Поэтому можно добавить триггер который будет отлавливать касты и регистрировать юнитов... А так же можно сделать с приказами... но атакуя самостоятельно юнит не отдаёт приказа (тут юнит атакован) Делать много триггеров на регистрацию? - не удобно, не практично, но... возможно даже более правильно чем это.....
Обычно все регистрируют юнитов при их появлении на карте Событие - юнит вошёл в область (игровая карта) -> он ещё не регистрировался (*) -> регистрировать получение урона * - важно для героев, т.к. они могут умирать и возвращаться на карту (или за её пределы), поэтому нельзя сказать что какой-либо юнит не войдёт на игровую карту 2-й раз
Плюс добавление всех юнитов, которые находятся на карте уже на старте (следовательно - не войдут на неё в течении игры).
. . .
Есть инфа что все такие события остаётся висеть в памяти игры, и хрен что ты с ними сделаешь, даже если юнит будет удалён. Поэтому считаю не рациональным добавлять всех подряд юнитов.
Лично я делаю так - нужно для определённого скилла отловить урон по определённому юниту - для него это и сделаю.
Пример 1: СоулКетчер (2й скилл) Шадоу Демона (из Доты) - увеличивает урон по врагу на 20/30/40/50% (один случайный из области). Ловим юнита, регистрируем (если нужно), даём ему бафф. Дальше если у него есть бафф (он под действие скилла, в-первый раз или в очередной - не важно), то наносим ему дополнительно [ 0.2/.3/.4/.5 * урон ] - (повтор ивента обходим отключением триггера / либо хитрым фильтром)
Пример 2: ШалловГрейв (крест Дазла из Доты) - не даёт юниту умереть при получении урона, оставляя минимально 1 хп. Отлавливается урон по конкретнорму юниту, на которого применяется скилл. При получении им урона, если он (урон) больше чем текущее хп героя + 1. , то устанавливаем хп на [ урон + 1. ] Но только в том случаи всё это делаем, если в начале прошло условие "юнит имеет бафф [крест дазла] == Да"
|
| | |
-
doompeter | Дата: Четверг, 11-08-2016, 19:23:41 | Сообщение # 5 |
Раб
загрузка наград ...
Группа: Пользователи
Сообщений: 2
Репутация: 6
Статус: Не на сайте
|
Extremator, я согласен с тем, что ты здесь написал на весь экран. И да, я не полностью описал сам процесс оформления отлова юнита, обычно мне лень переписывать статьи по динамическим триггерам. Но в большинстве случаев я обрабатываю юнита только тогда, когда он непосредственно может принять участие во взаимодействии, например, если что-то связанное с атакой, то при замашке героя создаю триггер на получение целью урона, который и реализует взаимодействие. Есть, конечно вариант, не делать такой карусели с триггерами, но займет больше памяти. А как считаешь ты? Что лучше: всегда наново делать триггер и потом удалять, сделать один триггер и удалить при смерти юнита или сделать триггер на всех юнитов игрока и проверять наличие цели в группе зарегистрированных юнитов? Скорее всего в разных случаях нужен разный подход.
|
| | |
-
Extremator | Дата: Пятница, 12-08-2016, 00:30:56 | Сообщение # 6 |
Темный рыцарь
загрузка наград ...
Группа: Проверенные
Сообщений: 241
Репутация: 244
Статус: Не на сайте
|
Создавать ивент для одной атаки по юниту - не лучший вариант однозначно (хотя в доте именно так сделано). Лучше него будет создание разового ивента к юниту, и удаление триггера при смерти юнита (если это не герой). Брать всех сразу и постоянно добавлять новых - вариант хуже всех, думаю.
Я предпочитаю брать для регистрации только тех юнитов, урон по которым мне придётся получать. И делаю это так, как если я добавлял каждого нового юнита на карте (в один триггер, в одну группу).
У меня на этом построена триггерная аура вампиризма для всех юнитов (ближний и дальний бой). Если юнит пытается атаковать имея ауру - он получает абилку для проверки урона с руки. Если юнита пытаются атаковать с такой абилкой - он регистрируется на получение урона (если ещё не был). В итоге у меня есть "Костяные колокольчики", которые отхиливают не только на 15% воинов ближнего боя, но и на 10% для дальнего. А так же "Повелители Ужаса", которые дают ауру вампиризма - 15/30/45% для ближнего боя, и 10/20/30% для дальнего.
|
| | |