Переменный в событиях - Wc3-Maps Форум













[ Главная · Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: Strateg, Melissa  
Переменный в событиях
-
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% для дальнего.
 
  • Страница 1 из 1
  • 1
Поиск:
Рейтинг@Mail.ru
Яндекс.Метрика

Copyright © 2010-2017
Вакансии :: Контакты
Мобильная версия сайта
chat