|  | @@ -317,16 +317,11 @@ bool CRewardableObject::wasVisited(PlayerColor player) const
 | 
	
		
			
				|  |  |  		case VISIT_UNLIMITED:
 | 
	
		
			
				|  |  |  		case VISIT_BONUS:
 | 
	
		
			
				|  |  |  			return false;
 | 
	
		
			
				|  |  | -		case VISIT_ONCE: // FIXME: hide this info deeper and return same as player?
 | 
	
		
			
				|  |  | -			for (auto & visit : info)
 | 
	
		
			
				|  |  | -			{
 | 
	
		
			
				|  |  | -				if (visit.numOfGrants != 0)
 | 
	
		
			
				|  |  | -					return true;
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -		case VISIT_HERO:
 | 
	
		
			
				|  |  | -			return false;
 | 
	
		
			
				|  |  | +		case VISIT_ONCE:
 | 
	
		
			
				|  |  |  		case VISIT_PLAYER:
 | 
	
		
			
				|  |  |  			return vstd::contains(cb->getPlayer(player)->visitedObjects, ObjectInstanceID(id));
 | 
	
		
			
				|  |  | +		case VISIT_HERO:
 | 
	
		
			
				|  |  | +			return false;
 | 
	
		
			
				|  |  |  		default:
 | 
	
		
			
				|  |  |  			return false;
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -826,12 +821,16 @@ void CGOnceVisitable::initObj(CRandomGenerator & rand)
 | 
	
		
			
				|  |  |  			onEmpty.addTxt(MetaString::ADVOB_TXT, 38);
 | 
	
		
			
				|  |  |  			soundID = soundBase::MYSTERY;
 | 
	
		
			
				|  |  |  			blockVisit = true;
 | 
	
		
			
				|  |  | +			info.resize(1);
 | 
	
		
			
				|  |  |  			if(rand.nextInt(99) < 20)
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  | -				info.resize(1);
 | 
	
		
			
				|  |  |  				loadRandomArtifact(rand, info[0], 10, 10, 10, 0);
 | 
	
		
			
				|  |  |  				info[0].message.addTxt(MetaString::ADVOB_TXT, 37);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +			else
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				info[0].message.addTxt(MetaString::ADVOB_TXT, 38);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		break;
 | 
	
		
			
				|  |  |  	case Obj::LEAN_TO:
 |