Начнём с того, что изначальный метод сортировки невалиден для table.sort, т.к. не учитывал все возможные варианты напрямую. Да, нативный sort в этом плане слегка туповат:
Также рискну предположить, что вывод игроков на экран был хаотичным из-за использования for k, v in pairs вместо for i = 1, #array (который, к слову, еще и быстрее). Поэтому вот:
local members = {
{
name = "Vasya",
online = false,
playtime = 10,
offline_time = 2
},
{
name = "Petya",
online = true,
playtime = 14,
offline_time = 2
},
{
name = "Sanya",
online = true,
playtime = 15,
offline_time = 2
},
{
name = "Igor",
online = false,
playtime = 1,
offline_time = 3
},
{
name = "Dima",
online = false,
playtime = 1,
offline_time = 8
},
}
table.sort(members, function(ply1, ply2)
if ply1.online and ply2.online then
return ply1.playtime > ply2.playtime
elseif ply1.online and not ply2.online then
return true
elseif not ply1.online and ply2.online then
return false
else
return ply1.offline_time < ply2.offline_time
end
end)
for i = 1, #members do
print(members[i].name)
end
Результат: