Сделал инвентарь питомцев, а они выстраиваются не так: сначала обычные, потом редкие, хотя хочется наоборот — чтобы самые редкие были сверху. Знакомая боль. Проблема почти всегда в одном-единственном знаке в коде сортировки, и чинится она за минуту. Разберём, как работает table.sort в Roblox, как развернуть порядок петов от редких к обычным одним символом и как собрать полный рабочий скрипт. Плюс частые ошибки, из-за которых сортировка молчит.

Пара слов не по коду. Если для своей игры с питомцами тебе нужно пополнить робуксы — на тесты, геймпассы или ассеты, — а карта РФ не проходит, выручает SUB.SUP (Telegram, ВКонтакте). А теперь к сортировке.

Петы идут от редкого к обычному, а надо наоборот

Сначала о симптоме, чтобы точно опознать твою ситуацию. У тебя есть список питомцев, у каждого — редкость: числом или текстом вроде Common, Rare, Epic. Ты сортируешь список, но порядок получается «не тот»: редкие внизу, обычные вверху, или наоборот. Значит, направление сортировки задано неверно — и лечится это одним разворотом сравнения, без переписывания всего кода.

Ключевая мысль, которую стоит усвоить: сортировка сама по себе работает правильно, ошибка не в ней, а в том, в какую именно сторону ты велел ей выстраивать элементы. Поменяем направление — и петы встанут как надо.

Roblox Studio: как отсортировать петов от редких к обычным — фото 1

Как работает table.sort

В Roblox для сортировки массивов используют функцию table.sort. Ей передают сам список и функцию сравнения — компаратор, который для любых двух элементов a и b говорит, кто из них должен идти раньше. Если компаратор возвращает true, значит, a стоит перед b.

Вот в этом компараторе и живёт направление. Сравниваешь по возрастанию — пишешь `a < b`, и мелкие идут первыми. Сравниваешь по убыванию — пишешь `a > b`, и первыми идут крупные. Для питомцев «редкость» обычно задаётся числом: чем больше число, тем реже пет. Значит, чтобы редкие были сверху, сравнивать надо по убыванию — знаком «больше». Важно понимать, что table.sort меняет сам массив на месте, а не возвращает новый, — после вызова твой список уже отсортирован. И ещё: компаратор должен быть последовательным, то есть для одних и тех же a и b всегда давать одинаковый ответ, иначе сортировка может выдать ошибку. Для чисел это всегда так, а вот с текстом или смешанными типами и возникают сюрпризы, о которых ниже. Ещё пара слов про сам компаратор, чтобы он перестал быть магией. Roblox передаёт в него пары элементов и по твоему ответу решает, кто выше. Ты не обязан сравнивать сами объекты — сравнивай любое их свойство: редкость, уровень, цену, дату получения. Именно поэтому одна и та же table.sort умеет строить список хоть по редкости, хоть по силе пета — всё решает то, что ты написал внутри функции сравнения. Понял это — и сортировка перестаёт пугать.