proger_Dencheek 6 Опубликовано 27 Октября 2012 (изменено) Помогите, нужно написать следующий скрипт: Есть две таблици. Одна наполнена строками, другая пустая. Нужно, чтоб при определенном действии отсылалось рандомно сообщение из таблици, если это действие повторяется, опять отсылается рандомное сообщение, но не тоже самое, другое сообщение. Все использованные строки записываются в пустую таблицу, чтоб если отправились все строки, все началось по новому кругу. Это я реализую так: local aa = { "Строка1", "Строка2", "Строка3", "Строка4", "Строка5",} local bb = {} if bb == nil then local cc = math.random(#aa) den.sms(aa[cc]) bb[#aa] = aa[cc] aa[cc] = nil elseif aa == nil then local cc = math.random(#bb) den.sms(bb[cc]) aa[#bb] = bb[cc] bb[cc] = nil end --Функция "den.sms()" отправляет сообщение Результат - безлоговый вылет :-( Подскажите, как написать этот скрипт. Изменено 27 Октября 2012 пользователем ColR_iT Поделиться этим сообщением Ссылка на сообщение
proger_Dencheek 6 Опубликовано 30 Октября 2012 Atros, спасибо за помощь. Но есть одна недоработка. Делаю вот так: local aa = { "строка1", "строка2", "строка3", "строка4", "строка5"} local bb = {} local col, col2 = 1, 1 if next(aa) then local cc = math.random(#aa) den.sms(aa[cc]) table.insert(bb, col, aa[cc]) table.remove(aa, cc) col = col + 1 col2 = 1 elseif next(bb) then local cc = math.random(#bb) den.sms(bb[cc]) table.insert(aa, col2, bb[cc2] table.remove(bb, cc2) col2 = col2 + 1 col = 1 end По первому кругу все работает нормально - рандомно отсылается сообщение, одни и те-же сообщения подряд не отсылаются. Но если сообщения в таблице закончатся, то начинают отсылатся одни и те-же, подряд. Gun12, это конечно не вылетает, но сообщения отправляются целым бардаком. Поделиться этим сообщением Ссылка на сообщение
proger_Dencheek 6 Опубликовано 30 Октября 2012 (изменено) Сделал упрощенный вариант, при котором за весь проход массива сообщение не повторяется не разу: local tbl = {"msg1","msg2","msg3","msg4","msg5"} local arhiv = tbl if not next(tbl) then for k,v in pairs(arhiv) do table.insert(tbl, k, v) end end local key = math.random(#tbl) den.sms(tbl[key]) table.remove(tbl, key) За весь проход по массиву сообщения не повторяются, но когда пять раз произойдет событие, т.е. прошли по массиву, то вылетает: LUA error: STALKER\gamedata\scripts\den.script:319: bad argument #1 to 'random' (interval is empty) Не подскажите, в чем я ошибся? Изменено 30 Октября 2012 пользователем proger_Dencheek Поделиться этим сообщением Ссылка на сообщение
proger_Dencheek 6 Опубликовано 30 Октября 2012 ColR_iT, вообще Artos правильно понял замысел, нужно чтоб во время прохода по массиву, отсылались рандомно все сообщения, и чтоб они не повторялись. Если строки в массиве закончились, начинаем все заново. Скрипт от Gun12 пробовал, там отсылаются все сообщения, но они повторяются. А если так сделать: arhiv = {} for k,v in pairs(tbl) do table.insert(arhiv, k, v) end , то массив скопируется? Поделиться этим сообщением Ссылка на сообщение