public float priorityFor(Actor actor) {
    if (GameSettings.hardCore && ! hasNeeded()) return 0 ;
    //
    //  Don't work on this outside your shift (or at least make it more
    //  casual.)
    final int shift = venue.personnel.shiftFor(actor) ;
    if (shift == Venue.OFF_DUTY) return 0 ;
    if (shift == Venue.SECONDARY_SHIFT) return IDLE ;
    final boolean hasNeeded = hasNeeded() ;
    float competition = begun() ? 0 : venue.personnel.assignedTo(this) ;
    //
    //  Vary priority based on how qualified to perform the task you are.
    final Conversion c = conversion ;
    float chance = 1.0f ;
    for (int i = c.skills.length ; i-- > 0 ;) {
      chance *= actor.traits.chance(
        c.skills[i], c.skillDCs[i] - checkBonus
      ) ;
    }
    chance = (chance + 1) / 2f ;
    ///I.sayAbout(actor, "Chance: "+chance+" for "+this) ;
    float impetus = (URGENT * chance) + priorityMod - competition ;
    if (! hasNeeded) impetus /= 2 ;
    return Visit.clamp(impetus, IDLE, URGENT) ;
  }