Traitor Pass (adapted)

I am using this adapted traitor pass for a while but sometimes people saying that they don’t get traitor but the traitor pass is removed.
Did I something wrong in this code?

I don’t know exactly but most of the time this code seems to work



function ITEM:OnEquip(ply, modifications)
hook.Add("TTTBeginRound", ply:UniqueID() .. "_traitor", function()

if ply:GetRole() == ROLE_INNOCENT then
    ply:SetRole(ROLE_TRAITOR)
    ply:AddCredits(GetConVarNumber("ttt_credits_starting"))
    ply:PS_TakeItem(self.ID)
    ply:PS_Notify('You have received your reward and been set to traitor!')

elseif ply:GetRole() != ROLE_INNOCENT then
    ply:PS_Notify('You will receive traitor on the next round!')
end