Нужно для упрощения триггера, чтоб не создавать для каждого игрока по условию и действию.

Принятый ответ

Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
21
6 лет назад
2
Загруженные файлы
Принятый ответ
0
17
6 лет назад
0
ScopteRectuS, Но это в действиях, а как в событии это сделать, или нет альтернативы кроме как сделать кучу событий для каждого игрока?
0
21
6 лет назад
0
GetTriggerPlayer( ) - это функция, которая возвращает ( в данном случае ) написавшего в чат игрока. То есть игрок уже написал в чат и мы этой функцией ловим этого игрока. А как в событии отловить написавшего в чат игрока, если это событие и создаётся для того, чтобы отловить написавшего в чат игрока?
0
18
6 лет назад
Отредактирован Maniac_91
0
Alexey103, если нужно не прописывать события по одному, то альтернатива есть - цикл в другом триггере.
Для переменной А от 1 до 12 (ну или сколько игроков-человек) действие: добавить событие в нужный триггер - Игрок А напечатал сообщение.
2
32
6 лет назад
2
Alexey103, неужели не хватило соображалки что в одном триггере столько событий что игрок написал в чат сообщение, сколько есть игроков.
Тот на кого сработал триггер и есть - GetTriggerPlayer()
0
17
6 лет назад
0
Maniac_91, Ну нет спасибо это как перелазить через забор когда калитка открыта)
ScopteRectuS, Было бы прикольно если бы было событие просто любой игрок написал сообщение, ведь во многих случаях именно она и нужна, Хотя вроде события же не производять операций так что это чисто для удобства.
0
18
6 лет назад
Отредактирован Maniac_91
0
Alexey103, ну если тебе проще вручную прописывать каждое событие - можешь так и делать )
Цикл быстрее и удобнее, по идее. Особенно если игроков много
Копировать все события, меняя только игрока или один раз написать событие плюс один цикл? Мой выбор - цикл.
0
17
6 лет назад
0
Maniac_91, Почему-же каждый раз, я просто делаю на каждое событие по одному триггеру, остальное можно через ифы после прописать, так что такой набор только в одном триггере. А добавление событий имеет смысл разве что в детекторе урона на гуи.
2
21
6 лет назад
2
- Видимо, автор хотел сделать вместо вот этого:
- Вот так в целях оптимизации:
- Но поверьте, на JASS это никакая не оптимизация, и то, что вы видите на втором скрине преобразуется в тоже самое, что и на первом скрине. Вот во что:
ScopteRectuS, Было бы прикольно если бы было событие просто любой игрок написал сообщение, ведь во многих случаях именно она и нужна, Хотя вроде события же не производять операций так что это чисто для удобства.
Такой функции даже на JASS нету. Несмотря на то, что это есть в GUI ( как на втором скрине ). Cобытия добавляются для каждого игрока отдельно.
Загруженные файлы
2
18
6 лет назад
Отредактирован Maniac_91
2
Alexey103, если триггеров будет много (если планируется карта со сложными системами), то некоторые из них могут не срабатывать. То есть я предлагаю сделать один общий триггер на события чата, а в нём уже условиями работать (Например, "Entered chat string = .....").
Я стараюсь все триггеры с похожими событиями объединять в один. Допустим, тот же "Юнит умирает"
Если тип юнита = зомби, то дать игроку-владельцу убивающего юнита 10 золота.
Если умирающий юнит = герой игрока 1, то засчитать игроку 1 поражение.
И т. д.
0
17
6 лет назад
0
ScopteRectuS, В точку именно это и имел в виду)
Maniac_91, Я тоже стараюсь, но убрать его потом не выйдет, и во вторых уменьшать кол-во триггеров добавлением новых триггеров да ещё и с циклами, это оригинальное решение. Я о том что возможно я просто не встречался с необходимостью именно его применения.
0
21
6 лет назад
Отредактирован scopterectus
0
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
0
18
6 лет назад
0
ScopteRectuS, интересное решение. Мне однажды Sergey105 его показал. Но всё же как-то неудобно пролистывать весь триггер в поисках нужного места (я ж на GUI, в основном работаю - там нормального поиска по тексту нет; у меня редактор иногда из-за поиска вылетает), а триггеры у меня получаются огромные из-за сложных систем.
0
17
6 лет назад
0
Maniac_91, Можно их метить при помощи комментариев. Там же все ифы в действиях, туда и суёшь комменты, а сами триггеры можно распихать по папочкам и опять же комментариями поотгораживать. Долго, но зато помогает.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.