MerchantCamel::MerchantCamel(PlayerCityPtr city, MerchantPtr merchant, int delay)
  : Human( city, walker::merchantCamel ), _d( new Impl )
{
  _d->headId = 0;
  _d->inCaravan = false;
  _d->headLocation = TilePos::invalid();

  if( merchant.isValid() )
  {
    _d->headId = merchant->uniqueId();
    setPos( merchant->pos() );
    setPathway( merchant->pathway() );
    go();
    wait( delay );
  }
}
  void load( const VariantMap& stream )
  {
    if( !route )
    {
      Logger::warning( "WARNING !!!: Merchants::load() route is null" );
      return;
    }

    foreach( it, stream )
    {
      good::Storage sell, buy;
      MerchantPtr m = route->addMerchant( route->beginCity()->name(), sell, buy );

      if( m.isValid() )
      {
        m->load( it->second.toMap() );
      }
      else
      {
        Logger::warning( "WARNING !!!: Merchants::load() cant load merchant index %d for route %s",
                         std::distance( stream.begin(), it ), route->name().c_str() );
      }
    }