Перейти к контенту

Язык Lua. Общие вопросы программирования


Malandrinus

Рекомендуемые сообщения

Помогите, нужно написать следующий скрипт:

Есть две таблици. Одна наполнена строками, другая пустая. Нужно, чтоб при определенном действии отсылалось рандомно сообщение из таблици, если это действие повторяется, опять отсылается рандомное сообщение, но не тоже самое, другое сообщение. Все использованные строки записываются в пустую таблицу, чтоб если отправились все строки, все началось по новому кругу. Это я реализую так:

 

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()" отправляет сообщение

 

Результат - безлоговый вылет :-(

Подскажите, как написать этот скрипт.

Изменено пользователем ColR_iT

Поделиться этим сообщением


Ссылка на сообщение

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, это конечно не вылетает, но сообщения отправляются целым бардаком.

Поделиться этим сообщением


Ссылка на сообщение

Сделал упрощенный вариант, при котором за весь проход массива сообщение не повторяется не разу:

 

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)

Не подскажите, в чем я ошибся?

Изменено пользователем proger_Dencheek

Поделиться этим сообщением


Ссылка на сообщение

ColR_iT, вообще Artos правильно понял замысел, нужно чтоб во время прохода по массиву, отсылались рандомно все сообщения, и чтоб они не повторялись. Если строки в массиве закончились, начинаем все заново. Скрипт от Gun12 пробовал, там отсылаются все сообщения, но они повторяются.

А если так сделать:

arhiv = {}
for k,v in pairs(tbl) do
 table.insert(arhiv, k, v)
end

, то массив скопируется?

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...