Есть такое понятие - весовой рандом.
У каждого айтема есть вес. При генерации - веса суммируются, генерируется число от 0 до суммы, и дальше последовательно проходим по всем айтемам суммируя их веса, пока сумма не станет больше сгенерированного рандома. На каком айтеме это произошло - тот и выпал. Описание немного корявое, но можете загуглить "весовой рандом".