public bool CanArrestFor( Pawn pawn ) { if( pawn.IsSlaveOfColony() ) { return arrestSlaves; } if( pawn.IsGuestOfColony() ) { return arrestGuests; } if( pawn.IsColonist ) { return arrestColonists; } return false; }
public override bool PawnCanOpen( Pawn p, bool isEscaping ) { if( cachedRooms.Count == 0 ) { UpdateCompStatus(); } if( isEscaping ) { // Escaping pawns don't care about restrictions return true; } if( this.parent.IsForbiddenToPass( p ) ) { // Other factions don't care about forbidden doors //Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} IsForbiddenToPass", this.parent.ThingID, p.NameStringShort ) ); return false; } // Check animals if( ( p.RaceProps.Animal )&& ( !AllowAnimals ) ) { return false; } // Check colonists if( ( p.IsColonist )&& ( !AllowColonists )&& ( !p.IsPrisonerOfColony )&& ( !p.Drafted )&& ( !p.workSettings.WorkIsActive( WorkTypeDefOf.Warden ) )&& ( !p.workSettings.WorkIsActive( WorkTypeDefOf.Doctor ) ) ) { // Colonists have been told not to use this door return false; } if( ( ( p.IsColonist )|| ( p.Faction == Faction.OfPlayer ) )&& ( !p.IsPrisoner ) ) { // Colonists & colony animals //Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} IsColonist or Faction.OfPlayer", this.parent.ThingID, p.NameStringShort ) ); return true; } // Check non-prisoner guests if( p.IsGuestOfColony() ) { if( AllowGuests ) { // Guests can use this door //Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} IsAllowedGuest", this.parent.ThingID, p.NameStringShort ) ); return true; } // Guests can't use this door //Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} IsNotAllowedGuest", this.parent.ThingID, p.NameStringShort ) ); return false; } if( cachedRooms.NullOrEmpty() ) { // No room cache, can't check //Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} cachedRooms is null", this.parent.ThingID, p.NameStringShort ) ); return false; } var pawnRoom = p.GetRoom(); bool checkPrisoners = p.IsPrisonerOfColony; bool checkSlaves = p.IsSlaveOfColony(); // Slaves supercede prisoners checkPrisoners &= !checkSlaves; // Check on prisoners if( ( AllowPrisoners )&& ( checkPrisoners ) ) { foreach( var room in cachedRooms ) { // Don't worry about room pawn is leaving if( room == pawnRoom ) { continue; } if( !room.isPrisonCell ) { // Prisoners are only valid for prison cells //Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} isPrisoner, room {2} !isPrisoncell", this.parent.ThingID, p.NameStringShort, room.ID ) ); return false; } } // Room is valid for prisoners //Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} isPrisoner, all rooms are prison cells", this.parent.ThingID, p.NameStringShort ) ); return true; } // Check on slaves if( ( AllowSlaves )&& ( checkSlaves ) ) { foreach( var room in cachedRooms ) { // Don't worry about room pawn is leaving if( room == pawnRoom ) { continue; } if( !room.IsSlaveWorkArea() ) { // Room isn't a valid slave work area //Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} isSlave, room {2} !IsSlaveWorkArea()", this.parent.ThingID, p.NameStringShort, room.ID ) ); return false; } } // Room is valid for slaves //Log.Message( string.Format( "\tCompRestrictedDoor: door {0}, pawn {1} isSlave, all rooms are slave work areas", this.parent.ThingID, p.NameStringShort ) ); return true; } // Room is not valid for pawn //Log.Message( string.Format( "\tCompRestrictedDoor: door {0} is not valid for pawn {1}", this.parent.ThingID, p.NameStringShort ) ); return false; }