Сразу говорю, в чём точно ошибка. Когда вы записываете в crearure_positions[k] возврат функции GetObjectPosition, то у вас эоот катый элемент становится числом, а не таблицей из трёх элементов. Поэтому нужно опять: creature_positions[k][1], creature_positions[k][2], creature_positions[k][3] = GetObjectPosition(monster)
И в проверке IsTilePassable нужно сначала в local x y z сохранить соответствующие элементы таблицы, а потом передать в IsTilePassable.
Ну и именно из-за этого ошибка "попытка индексировать число". Ведь creature[k] у вас не что иное, как чиселка