Вот тут вы что то напутали:
local str2=string.sub(str1,1,3); --выделяем подстроку со значением
server.Message("номер найден, ",str2);
local str3=string.sub(str1,4); --символ найден - выделяем подстроку с номером
server.Message("значение найдено, val=",str3);
if string.len(str3)<6 then
elem[str3+1]=str2; --вставляем в таблицу полученный элемент
server.Message("вставили элемент в таблицу - ", elem[str3+1]);
end;

str2 - выделяете начало строки, то есть номер, но затем работаете с ним, как будто это значение. Аналогично с str3.