Только начинаю писать на jass.
Данное событие в ГУИ срабатывает на каждого игрока по своему событию (для 24 игроков - 24 триггера). То есть мне нужно удалять войска ливнувшего игрока, но я не хочу создавать 24 триггера. В теории это должно выглядеть так:
событие: игрок ливает событие, которое я не знаю как сделать
действия: local n = Номер игрока
call func_left (n) функция которую проблем написать не составит
можно ли как-то такое реализовать на jass? если нет, то как лучше поступить? Буду очень благодарен!

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

Можно, создаёте все 24 события лива для одного тригоера. А в действии триггера узнаете ливнувшего игрока с помощью функций: GetTriggeringPlayer(), GetLeavingPlayer().
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
19
5 лет назад
1
Похожие вопросы:

ответ
GetTriggerPlayer()
или TriggeringPlayer в гуи

1
21
5 лет назад
1
Можно, создаёте все 24 события лива для одного тригоера. А в действии триггера узнаете ливнувшего игрока с помощью функций: GetTriggeringPlayer(), GetLeavingPlayer().
Принятый ответ
0
16
5 лет назад
0
ScopteRectuS:
Можно, создаёте все 24 события лива для одного тригоера. А в действии триггера узнаете ливнувшего игрока с помощью функций: GetTriggeringPlayer(), GetLeavingPlayer().
Это оптимальный вариант?
0
21
5 лет назад
Отредактирован scopterectus
0
TeX13, ну да. Не создавать же под каждое событие ещё один триггер.
0
26
5 лет назад
0
Можно создать триггер без событий, а в триггере инициализации выбрать группу из всех игроков и создать каждому событие в триггере без событий, типа (Picked player) leaves game. Так не придётся 24 события создавать.
0
16
5 лет назад
0
8gabriel8:
Можно создать триггер без событий, а в триггере инициализации выбрать группу из всех игроков и создать каждому событие в триггере без событий, типа (Picked player) leaves game. Так не придётся 24 события создавать.
с точки зрения оптимизации, сильно ли ваш способ влияет?
2
21
5 лет назад
2
TeX13, с точки зрения оптимизации станет лишь хуже, потому что события также будут создаваться для всех 24 игроков, но только это будет делаться через ForForce( ), которая будет создавать те же события для каждого игрока, запуская для каждого отдельный поток. А если делать через GUI, то еще и утечки подъедут.
1
26
5 лет назад
1
Влияет лишь на оптимизацию твоих усилий, для игры это всё равно будет так, как если бы 24 события вручную вбивал.
ScopteRectuS, в данном случае некритично, потому что исполняется лишь один раз при инициализации, а не каждую 0.01 секунду.
0
28
5 лет назад
0
ScopteRectuS, зачем ForForce(), когда можно просто циклом от 1 до 24?
0
21
5 лет назад
0
типа (Picked player) leaves game
PT153, потому что это делаетcя через ForForce() .
0
26
5 лет назад
0
Надо проверять, конечно, но какие-то манипуляции проводил с Группой Игроков, так мне по каким-то причинам показалось, что действие создаёт события только для задействованных игроков. Но мне всё равно очень редко требуется такое событие, потому не стал в тот момент внимания обращать.
0
16
5 лет назад
0
8gabriel8:
Надо проверять, конечно, но какие-то манипуляции проводил с Группой Игроков, так мне по каким-то причинам показалось, что действие создаёт события только для задействованных игроков. Но мне всё равно очень редко требуется такое событие, потому не стал в тот момент внимания обращать.
Ребят, а такой момент. Я решил подключать 24 события (для каждого игрока), но регистрируя события мы можем использовать циклы? (loop от 0 до A), как мы делаем в действиях (actions)
Этот комментарий удален
0
16
5 лет назад
0
8gabriel8:
Честно говоря, не совсем понял смысл, но всё, что используешь в обычном GUI доступно на jass+ещё больше.
знаю эти редакторы, но сейчас довольно частые обновления выходят в варкрафте официальном и х обновления для меня более ценные
8gabriel8:
посмотри, пожалуйста, этот фрагмент:
событие лива
function InitTrig_zi1 takes nothing returns nothing
set gg_trg_zi1 = CreateTrigger( )
set a = 1
set b = 24
loop
exitwhen a > b
call TriggerRegisterPlayerEventLeave( gg_trg_zi1, Player(a) )
set a = a + 1
endloop
call TriggerAddAction( gg_trg_zi1, function player_left )
endfunction
3
28
5 лет назад
3
событие лива
function InitTrig_zi1 takes nothing returns nothing
    local integer a = 0
    set gg_trg_zi1 = CreateTrigger( )
    call TriggerAddAction( gg_trg_zi1, function player_left )
    loop
        call TriggerRegisterPlayerEventLeave( gg_trg_zi1, Player(a) )
        set a = a + 1
        exitwhen a == bj_MAX_PLAYERS
    endloop
endfunction
0
16
5 лет назад
0
PT153, спасибо, я упрощено написал, главная суть - что такая структура и при инициализации триггера возможна
Чтобы оставить комментарий, пожалуйста, войдите на сайт.