Пытаюсь в массиве создать 24 триггера, к этим 24 триггерам добавляю действие, но не задача, ругается и говорит мол лишняя скобка, когда я пытаюсь передать целочисленный параметр в функцию. Посмотрите, пожалуйста:
function mk takes integer i returns nothing
    set udg_kills_m[i] = 0
endfunction

//===========================================================================
function InitTrig_mk1 takes nothing returns nothing
    local trigger array trig
    local integer a = 0
    set trig[0] = null
    set a =1
    loop
          set trig[a] = CreateTrigger(  )
          call TriggerRegisterTimerExpireEventBJ( trig[a], udg_kills_t[a] )
          call TriggerAddAction(trig[a], function mk(a))
          set a = a + 1
          exitwhen a ==24+1
    endloop
    set a = 0  
endfunction

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

В жассе нельзя передавать параметры в функции-каллбеки.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
24
5 лет назад
0
TeX13, еще раз повторюсь, таймеры-триггеры штука корявая, вместо этого нормальные люди пользуются CreateTimer и TimerStart.
3
29
5 лет назад
3
как я понимаю для отлова реального времени, мне надо будет переводить игровое время в реальное
Зачем?
в плане реализации 24 триггера гораздо проще и приятнее
24 таймера в 24 раза больше чем один таймер, который довольно просто реализовать. А если вам приятней использовать кривой подход, то я уже и незнаю...

Чтоб не мучаться, можете вообще взять готовую систему.
0
16
5 лет назад
0
prog, я прислушился. Это получается мне нужно при старте создать счетчик, который каждую секунду отсчитывает по 1 секунде? И такой вопрос можно ли повлияеть на время (знаю есть такая функция: добавить время таймеру), через которое выполнится действие в TimerStart?
NazarPunk, ну меня готовое не интересует, все не настроишь в конфиге, надо под себя делать)) тем более так ничему и не научишься
1
24
5 лет назад
Отредактирован prog
1
TeX13, если делать на одном таймере - идея в том чтобы считать время от старта и запоминать его при килах, чтобы было с чем сравнить при следующем киле - если разница меньше чем предел времени между килами для серии, увеличиваем серию, если больше - начинаем новую серию. Все становится чуть сложнее если за успешную серию нужно выдавать какие-то бонусы в конце серии т.к. такой подход не подразумевает простого детекта того что кил был последним в серии, но если достаточно действий после каждого кила, то это один из оптимальных подходов, имхо.
Если же держать по таймеру на каждую начатую серию, то нужно решить несколько проблем
  • привязка номера игрока к таймеру, чтобы таймер знал на кого он работает. В жассе это только через хештаблицы по хендлу таймера делается. В Lua на 1.31 все проще и есть несколько способов это сделать.
  • Продление времени после кила. Если я правильно помню, то можно просто заново сделать TimerStart на том-же таймере, но могу ошибаться т.к. очень давно не делал ничего где мне нужно было бы менять таймер между итерациями
2
29
5 лет назад
2
Все становится чуть сложнее если за успешную серию нужно выдавать какие-то бонусы в конце серии т.к. такой подход не подразумевает простого детекта того что кил был последним в серии
Вообще-то подразумевает. Заводим ещё один массив по индексу игрока и и инкрементим там значение за каждый кил. В момент истечения времени продолжения серии, сбрасываем переменную и выдаём награду за количество килов.
1
24
5 лет назад
1
NazarPunk, я и говорю чуть сложнее становится - нужно перебирать всех игроков для которых активна серия и проверять не пора ли для них закончить серию. Самая простая реализация не требует даже циклов, только проверку времени после каждого кила.
0
16
5 лет назад
0
prog, гораздо легче можно решить. Создаем массив отсчета секунд для 24 игроков second[n]. При старте карты запускаем счетчик секунд и по циклу проверяем все 24, как только у одного игрока счетчик доходит до 30секунд (время на стрик), мы обнуляем переменную, отвечающую за его комбо. А при совершнии нового убийства игроком мы просто обнуляем счетчик его таймера. Так норм?
6
24
5 лет назад
Отредактирован prog
6
TeX13, это один из самых кривых вариантов, но так тоже можно.
Я обычно пользуюсь другим способом:
  • счетчик секунд в одной переменной, без цикла и массива
  • массив lastKill в котором по [номеру игрока] записывается время последнего кила и по [номеру игрока +24] записывается длина серии
  • при киле идет проверка сколько прошло времени с последнего кила, если больше 30, то в длину серии записывается 1, время последнего кила выставляется на текущее значение счетчика
  • если времени прошло меньше 30, то на 1 увеличивается длина серии и время последнего кила выставляется на текущее значение счетчика
  • награда за серию выдается частями, при каждом киле смотрится текущая длина серии и выдается соответствующая часть награды, так чтобы суммарная награда за всю серию достигала того значения которое мне нужно
1
16
5 лет назад
1
prog, у меня в голове была такая последовательность, спасибо за развернутый ответ, сделаю так
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.