Проблема в том, что ваша таблица очищается после каждого вызова Wave.Это потому, что вы делаете arrayNames = {}
внутри своей функции, поэтому каждый раз, когда она запускается, таблица устанавливается на новую пустую таблицу.Вы можете определить arrayNames
вне вашей функции Wave
или изменить его на arrayNames = arrayNames or {}
Второй параметр установит arrayNames
равным arrayNames
, когда он определен, или новой таблице, если она не определена.
Дополнительно
Ваш код проверяет, существует ли name
в массиве по определенному индексу, а не проверяет весь массив.Если индекс игрока может измениться, то вы, скорее всего, будете приветствовать его снова, используя этот метод.
Вам также нужно будет просмотреть весь массив, чтобы быть уверенным, что вы еще не поприветствовали этого человека.Это означает, что по мере того, как вы будете приветствовать все больше и больше людей, проверка будет становиться все длиннее и длиннее
Вместо использования массива я предлагаю использовать набор:
if yards < 10 and not arrayNames[name] then -- if name isnt in set already?
arrayNames[name] = true -- trying to add the name to set
print(name)
break
end
просто добавьте в таблицу, используяname
в качестве ключа и установка значения true
. Это обеспечит производительность O (1) для вашего чека.
Вот дополнительная информация о наборах: https://en.wikipedia.org/wiki/Set_(abstract_data_type)
В информатике набор - это абстрактный тип данных, который может хранить уникальные значения без какого-либо определенного порядка.Это компьютерная реализация математической концепции конечного множества.В отличие от большинства других типов коллекций, вместо извлечения определенного элемента из набора обычно проверяется значение для членства в наборе.