Нужно для упрощения триггера, чтоб не создавать для каждого игрока по условию и действию.
`
ОЖИДАНИЕ РЕКЛАМЫ...
17
ScopteRectuS, Но это в действиях, а как в событии это сделать, или нет альтернативы кроме как сделать кучу событий для каждого игрока?
21
GetTriggerPlayer( ) - это функция, которая возвращает ( в данном случае ) написавшего в чат игрока. То есть игрок уже написал в чат и мы этой функцией ловим этого игрока. А как в событии отловить написавшего в чат игрока, если это событие и создаётся для того, чтобы отловить написавшего в чат игрока?
18
Alexey103, если нужно не прописывать события по одному, то альтернатива есть - цикл в другом триггере.
Для переменной А от 1 до 12 (ну или сколько игроков-человек) действие: добавить событие в нужный триггер - Игрок А напечатал сообщение.
32
Alexey103, неужели не хватило соображалки что в одном триггере столько событий что игрок написал в чат сообщение, сколько есть игроков.
Тот на кого сработал триггер и есть - GetTriggerPlayer()
17
Maniac_91, Ну нет спасибо это как перелазить через забор когда калитка открыта)
ScopteRectuS, Было бы прикольно если бы было событие просто любой игрок написал сообщение, ведь во многих случаях именно она и нужна, Хотя вроде события же не производять операций так что это чисто для удобства.
18
Alexey103, ну если тебе проще вручную прописывать каждое событие - можешь так и делать )
Цикл быстрее и удобнее, по идее. Особенно если игроков много
Копировать все события, меняя только игрока или один раз написать событие плюс один цикл? Мой выбор - цикл.
17
Maniac_91, Почему-же каждый раз, я просто делаю на каждое событие по одному триггеру, остальное можно через ифы после прописать, так что такой набор только в одном триггере. А добавление событий имеет смысл разве что в детекторе урона на гуи.
21
- Видимо, автор хотел сделать вместо вот этого:
- Вот так в целях оптимизации:
- Но поверьте, на JASS это никакая не оптимизация, и то, что вы видите на втором скрине преобразуется в тоже самое, что и на первом скрине. Вот во что:
ScopteRectuS, Было бы прикольно если бы было событие просто любой игрок написал сообщение, ведь во многих случаях именно она и нужна, Хотя вроде события же не производять операций так что это чисто для удобства.
Такой функции даже на JASS нету. Несмотря на то, что это есть в GUI ( как на втором скрине ). Cобытия добавляются для каждого игрока отдельно.
Загруженные файлы
18
Alexey103, если триггеров будет много (если планируется карта со сложными системами), то некоторые из них могут не срабатывать. То есть я предлагаю сделать один общий триггер на события чата, а в нём уже условиями работать (Например, "Entered chat string = .....").
Я стараюсь все триггеры с похожими событиями объединять в один. Допустим, тот же "Юнит умирает"
Если тип юнита = зомби, то дать игроку-владельцу убивающего юнита 10 золота.
Если умирающий юнит = герой игрока 1, то засчитать игроку 1 поражение.
И т. д.
17
ScopteRectuS, В точку именно это и имел в виду)
Maniac_91, Я тоже стараюсь, но убрать его потом не выйдет, и во вторых уменьшать кол-во триггеров добавлением новых триггеров да ещё и с циклами, это оригинальное решение. Я о том что возможно я просто не встречался с необходимостью именно его применения.
21
Maniac_91, а я вообще все события пихаю всё в один триггер...))
А какое событие прокнуло проверяю в условии через функции GetTriggerEventId( ) и запускаю соответствующую action-функцию.
раскрыть
	private function conditions takes nothing returns boolean
        if     ( GetTriggerEventId( ) == EVENT_PLAYER_HERO_SKILL ) then
            call onAbilityLearn( GetLearningUnit( ) )

        elseif ( GetTriggerEventId( ) == EVENT_PLAYER_UNIT_ISSUED_ORDER ) then
            call onAutoCast( GetOrderedUnit( ) )

        elseif ( GetTriggerEventId( ) == EVENT_PLAYER_UNIT_ATTACKED ) then
            call onUnitAttacked( GetAttacker( ) )

        elseif ( GetTriggerEventId( ) == EVENT_UNIT_DAMAGED ) then
            call onUnitDamaged( GetEventDamageSource( ), GetTriggerUnit( ) )
        endif

        return false
    endfunction


    globals
        constant  trigger  BATTLE_TRANCE_TRIGGER  =  CreateTrigger( )
    endglobals


    public function Initialization takes nothing returns nothing
        call PreloadAbility( 'A00B' )

        call TriggerRegisterAnyGladiatorEvent  ( BATTLE_TRANCE_TRIGGER, EVENT_PLAYER_HERO_SKILL,        null )
        call TriggerRegisterAnyGladiatorEvent  ( BATTLE_TRANCE_TRIGGER, EVENT_PLAYER_UNIT_ISSUED_ORDER, null )
        call TriggerRegisterAnyGladiatorEvent  ( BATTLE_TRANCE_TRIGGER, EVENT_PLAYER_UNIT_ATTACKED,     null )
        call TriggerRegisterAnyUnitDamagedEvent( BATTLE_TRANCE_TRIGGER )
        call TriggerAddCondition               ( BATTLE_TRANCE_TRIGGER, Condition( function conditions ) )
    endfunction
18
ScopteRectuS, интересное решение. Мне однажды Sergey105 его показал. Но всё же как-то неудобно пролистывать весь триггер в поисках нужного места (я ж на GUI, в основном работаю - там нормального поиска по тексту нет; у меня редактор иногда из-за поиска вылетает), а триггеры у меня получаются огромные из-за сложных систем.
17
Maniac_91, Можно их метить при помощи комментариев. Там же все ифы в действиях, туда и суёшь комменты, а сами триггеры можно распихать по папочкам и опять же комментариями поотгораживать. Долго, но зато помогает.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.