Пытаюсь в массиве создать 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

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

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