-- Абстракция для работы с событиями

EVENTS = {} -- Эта таблица должна уйти в сейв!

-- Проверка наличия. Если передается список, они соединены через И
CHECK = function(s)
        --dprint(s)
        if s==nil then return true end -- пустое событие - всегда да
        if type(s)=='string' then s={s} end 
        for i = 1, #s do 
            if not EVENTS[s[i]] then return false end
            end --for
        return true
        end
-- Добавление. Можно сразу несколько
ADD = function(s)
        if type(s)=='string' then s={s} end 
        for i = 1, #s do 
                EVENTS[s[i]]=true 
                end
        end -- func
-- Удаление. Можно сразу несколько. Есть способ отличить удаленное от не существовавшего через сравнение с nil
DELETE = function(s)
        if type(s)=='string' then s={s} end 
        for i = 1, #s do EVENTS[s[i]]=false end
        end -- func
-- Отладка
EVENTSALLPRINT = function()
        print('Перечень событий из таблицы EVENTS:')
        for k, v in pairs(EVENTS) do print(k, v) end
        end
-- Ключ единократного добавления. Если ключ ранее не передавался, добавляет его и возвращает истину
ONCE = function(s)
        if s==nil then error('В функцию следует передать уникальный ключ-идентификатор срабатывания.') end
        local key = 'once_'..s
        if not EVENTS[key] then EVENTS[key]=true return true else return false end
        end--func
-- Аналогично, но возвращает заданные сроки: для первого и всех остальных вызовов
ONCESTRING = function(s,firstString,otherString)
        if s==nil then error('В функцию следует передать уникальный ключ-идентификатор срабатывания.') end
        local key = 'once_'..s
        if not EVENTS[key] then EVENTS[key]=true 
                           return firstString 
                           else 
                           return otherString 
                           end --if
        end--func
