CustomGames.ru - Dota 2 пользовательские игры

Вопрос к имеющим опыт работы с событиями.(Решено! )

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн xxNpCxx

  • 85
  • Мощь: 0
  • Do it simple bitch
Приветствую. Я уже перепробовал кучу вариантов. Мне нужно чтобы entity ( Область ) реагировала на соприкосновение с ней другой entity(снаряд) .
Важный момент : Этот entity является не героем . Триггеры , которые пробовал : trigger_dota ; trigger_hero . У всех этих триггеров есть события OnStartTouch . Так вот это событие срабатывает только тогда когда в область попадает герой, а мне нужно чтобы оно срабатывало когда туда попадает любой другой entity.

function onHit(trigger)
print("onHit")
end


Добавление проверки на совпадение координат в таймер не предлагать - ресурсозатратно , не красиво , вообще не правильно -)
Маскировку героя под снаряд тоже не предлагать  - слишком накручено.  должен быть другой способ.

Решили вместе с напарником Ильей -)  . Оказалось у триггера ДВОЙНАЯ фильтрация. Изначально выбирается критерий всех активаторов , затем добавляются исключения из них. И если триггер является например "IsRealHero" то автоматически в критерий активаторов попадает только RealHero. Нужно было поменять тип сущности на нужный и делов то. Чтобы в этом разобраться пришлось просмотреть файл dota.fgd и посмотреть как работает фильтрация. gg easy. -)) Всем спасибо!

Вот что помогло разобраться в фильтрации.

Спойлер
@BaseClass base( teamnumber ) = dota_entity_filter_flags
[
   invert_filter_check( boolean ) : "Invert Filter" : "0"

   every_unit( boolean ) : "Every Unit" : "0"

   UnitName( string ) : "Unit Name" : ""

   IsAncient( boolean ) : "IsAncient" : "0"
   IsNeutralUnitType( boolean ) : "IsNeutralUnitType" : "0"
   IsSummoned( boolean ) : "IsSummoned" : "0"
   IsHero( boolean ) : "IsHero" : "0"
   IsRealHero( boolean ) : "IsRealHero" : "1"
   IsTower( boolean ) : "IsTower" : "0"
   IsMechanical( boolean ) : "IsMechanical" : "0"
   IsPhantom( boolean ) : "IsPhantom" : "0"
   IsIllusion( boolean ) : "IsIllusion" : "0"
   IsCreep( boolean ) : "IsCreep" : "0"
   IsLaneCreep( boolean ) : "IsLaneCreep" : "0"
]
[свернуть]
« Последнее редактирование: 17-10-2015, 19:53:26 от xxNpCxx »

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
Хмммм

А что за идея? Может, можно как-то по другому ее реализовать?

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
Ладно, допустим, ты хочешь следующее:

В зону обзора крипа входит другой крип и тогда первый выдает сообщение в игре: "Hello".


Если я уловил смысл, то сойдемся на этом. Подумаю, как можно это реализовать, если никто другой не придумает быстрее.

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
Просмотрев все возможные события, что я знаю, мне на ум ничего не приходит, кроме только варианта с касанием юнита: ну, то есть можно перехватить событие атаки на него и что-то сделать в этот момент.

Оффлайн xxNpCxx

  • 85
  • Мощь: 0
  • Do it simple bitch
Просмотрев все возможные события, что я знаю, мне на ум ничего не приходит, кроме только варианта с касанием юнита: ну, то есть можно перехватить событие атаки на него и что-то сделать в этот момент.

Ладно. Раз недостаточно информации  придется раскрыть карты -) . Задача у меня такова. Отловить событие , когда снаряд попадает в зону. Я думал о том чтобы в таймере встроеном проверять позицию снарядов и сравнивать ее с позицией зоны но это мне показалось слишком ресурсоемким .

Еще есть запасной вариант . Написать свой класс на c++  , который будет использован в качестве триггера этой области(entity) .
Опять же это все нехочется делать по той причине что такое событие обязано уже быть в редакторе. Ну слишком оно простое.

Действительно интересно . Почему trigger_dota жестко отлавливает только героев. Есть же другой триггер , который называется trigger_hero....

Еще на ум пришла мысль о том чтобы снаряды сделать героями , но с соответствующей моделью снаряда , запретить выделение снаряда и убрать HUD с верхней панели героев при создании снаряда. Но опять же зачем так усложнять если скорее всего в редакторе должен быть более простой способ.
« Последнее редактирование: 16-10-2015, 22:14:41 от xxNpCxx »

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
Я тоже думал, что должна быть галочка у вещей на их дроп, подобно рапире, а нефига подобного.


Слушай, может тебе кнопку в том месте сделать просто?

Оффлайн xxNpCxx

  • 85
  • Мощь: 0
  • Do it simple bitch
Я тоже думал, что должна быть галочка у вещей на их дроп, подобно рапире, а нефига подобного.


Слушай, может тебе кнопку в том месте сделать просто?

А кнопка включается если в ее области появляется снаряд ? или юнит , неважно что лиж бы не герой. ?
так то мне неважно чем будет являться эта область , я ее все равно маскирую в игре. А на ее месте выставляю декорации.

А что касается рапиры , да. вальв как-то не логично к этому вопросу подошли . взяли забили жестко эту особенность предмета в его описание в текстовом файле. И выходит так что предмет изначально либо выпадает либо нет , а игровые события никак не влияют на это. Я посмотрел твою тему. Мне понравилось решение. И таблицу с моделью с множественным наследованием entity я себе сохранил -) Полезную вещ ты заметил -)

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
А кнопка включается если в ее области появляется снаряд ? или юнит , неважно что лиж бы не герой. ?
так то мне неважно чем будет являться эта область , я ее все равно маскирую в игре. А на ее месте выставляю декорации.


Да, но ты, вроде бы, как раз это и пытался сделать :D

Просто, смотрел сегодня эту тему, показалось, что может быть тебе полезна.

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
Если не найдешь возможности активации кнопки по любому касанию, чтобы не только для героев, то я вот сейчас продумываю, как бы замутить пассивку entity, которая отслеживала бы ее координаты.   Это, все же, лучше счетчика, если такое возможно.

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
Тут тоже про кнопку, но, похоже она не на земле, а на панели персонажа.

Оффлайн xxNpCxx

  • 85
  • Мощь: 0
  • Do it simple bitch
Тут тоже про кнопку, но, похоже она не на земле, а на панели персонажа.

Не. Так не получается -) . Я же в начале написал что пробовал уже триггер trigger_hero , и point_teleport . -) Они тоже только героев телепортируют.

Оффлайн Илья

  • Супермодератор
  • 1904
  • Мощь: 16
А у тебя там одна команда игроков или несколько?

Оффлайн xxNpCxx

  • 85
  • Мощь: 0
  • Do it simple bitch
Если не найдешь возможности активации кнопки по любому касанию, чтобы не только для героев, то я вот сейчас продумываю, как бы замутить пассивку entity, которая отслеживала бы ее координаты.   Это, все же, лучше счетчика, если такое возможно.

Можешь не трудиться. Я все равно так врятли сделаю. Это слишком затратный способ. У меня в игре будет куча снарядов , и нужно следить за каждым. Представь сколько тиков будет каждую сотую секунды.

Оффлайн xxNpCxx

  • 85
  • Мощь: 0
  • Do it simple bitch
А у тебя там одна команда игроков или несколько?
2 команды. А как это влияет на вопрос ? Разве что мне нужно будет узнать владельца снаряда при попадании в область. Ну это не проблема.

Оффлайн xxNpCxx

  • 85
  • Мощь: 0
  • Do it simple bitch
Илья, Мне главное чтобы эта область реагировала на любой entity, а там уже не сложно определить по условию конкретно снаряд.