|  | @@ -1408,6 +1408,9 @@ void CGTownInstance::setPropertyDer(ui8 what, ui32 val)
 | 
	
		
			
				|  |  |  		case 11: //add visitor of town building
 | 
	
		
			
				|  |  |  			bonusingBuildings[val]->setProperty (4, visitingHero->id);
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  | +		case 12:
 | 
	
		
			
				|  |  | +			bonusingBuildings[val]->setProperty (12, 0);
 | 
	
		
			
				|  |  | +			break;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  int CGTownInstance::fortLevel() const //0 - none, 1 - fort, 2 - citadel, 3 - castle
 | 
	
	
		
			
				|  | @@ -1594,7 +1597,7 @@ void CGTownInstance::initObj()
 | 
	
		
			
				|  |  |  		case 2: case 3: case 5: case 6:
 | 
	
		
			
				|  |  |  			bonusingBuildings.push_back (new CTownBonus(23, this));
 | 
	
		
			
				|  |  |  			if (subID == 5)
 | 
	
		
			
				|  |  | -				bonusingBuildings.push_back (new COPWBonus(18, this)); //Vortex
 | 
	
		
			
				|  |  | +				bonusingBuildings.push_back (new COPWBonus(21, this)); //Vortex
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  |  		case 7:
 | 
	
		
			
				|  |  |  			bonusingBuildings.push_back (new CTownBonus(17, this));
 | 
	
	
		
			
				|  | @@ -1604,6 +1607,15 @@ void CGTownInstance::initObj()
 | 
	
		
			
				|  |  |  		removeCapitols (getOwner(), false); // destroy other capitols
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +void CGTownInstance::newTurn() const
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	if (cb->getDate(0)%7 == 1) //reset on new week
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		for (std::vector<CGTownBuilding*>::const_iterator i = bonusingBuildings.begin(); i!=bonusingBuildings.end(); i++)
 | 
	
		
			
				|  |  | +			cb->setObjProperty (id, 12, 0); //reset visitors for Mana Vortex
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  int3 CGTownInstance::getSightCenter() const
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	return pos - int3(2,0,0);
 | 
	
	
		
			
				|  | @@ -1987,7 +1999,7 @@ void COPWBonus::setProperty(ui8 what, ui32 val)
 | 
	
		
			
				|  |  |  		case 4:
 | 
	
		
			
				|  |  |  			visitors.insert(val);
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  | -		case 11:
 | 
	
		
			
				|  |  | +		case 12:
 | 
	
		
			
				|  |  |  			visitors.clear();
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  |  	}
 | 
	
	
		
			
				|  | @@ -1999,23 +2011,27 @@ void COPWBonus::onHeroVisit (const CGHeroInstance * h) const
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  |  		InfoWindow iw;
 | 
	
		
			
				|  |  |  		iw.player = h->tempOwner;
 | 
	
		
			
				|  |  | -		switch (ID)
 | 
	
		
			
				|  |  | +		switch (town->subID)
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  | -			case 18: //Mana Vortex
 | 
	
		
			
				|  |  | -				if (visitors.size())
 | 
	
		
			
				|  |  | -				{
 | 
	
		
			
				|  |  | -					cb->setObjProperty (town->id, 11, id); //add to visitors
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				break;
 | 
	
		
			
				|  |  | -			case 21: //Stables
 | 
	
		
			
				|  |  | +			case 0: //Stables
 | 
	
		
			
				|  |  |  				if (!h->getBonus(HeroBonus::OBJECT, 94)) //no advMap Stables
 | 
	
		
			
				|  |  |  				{
 | 
	
		
			
				|  |  |  					GiveBonus gb;
 | 
	
		
			
				|  |  |  					gb.bonus = HeroBonus(HeroBonus::ONE_WEEK, HeroBonus::LAND_MOVEMENT, HeroBonus::OBJECT, 600, 94, VLC->generaltexth->arraytxt[100]);
 | 
	
		
			
				|  |  |  					gb.hid = heroID;
 | 
	
		
			
				|  |  |  					cb->giveHeroBonus(&gb);
 | 
	
		
			
				|  |  | -					iw.text << std::pair<ui8,ui32>(11, 137);
 | 
	
		
			
				|  |  | +					iw.text << VLC->generaltexth->allTexts[580];
 | 
	
		
			
				|  |  | +					cb->showInfoDialog(&iw);
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				break;
 | 
	
		
			
				|  |  | +			case 5: //Mana Vortex
 | 
	
		
			
				|  |  | +				if (visitors.find(heroID) == visitors.end() && h->mana <= h->manaLimit())
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					cb->setManaPoints (heroID, 2 * h->manaLimit()); 
 | 
	
		
			
				|  |  | +					cb->setObjProperty (id, 5, true);
 | 
	
		
			
				|  |  | +					iw.text << VLC->generaltexth->allTexts[579];
 | 
	
		
			
				|  |  |  					cb->showInfoDialog(&iw);
 | 
	
		
			
				|  |  | +					cb->setObjProperty (town->id, 11, id); //add to visitors
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  				break;
 | 
	
		
			
				|  |  |  		}
 | 
	
	
		
			
				|  | @@ -2038,7 +2054,7 @@ void CTownBonus::onHeroVisit (const CGHeroInstance * h) const
 | 
	
		
			
				|  |  |  	if ((town->builtBuildings.find(ID) != town->builtBuildings.end()) && (visitors.find(heroID) == visitors.end()))
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  |  		InfoWindow iw;
 | 
	
		
			
				|  |  | -		int what, val;
 | 
	
		
			
				|  |  | +		int what, val, mid;
 | 
	
		
			
				|  |  |  		switch (ID)
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  |  			case 23:
 | 
	
	
		
			
				|  | @@ -2047,21 +2063,25 @@ void CTownBonus::onHeroVisit (const CGHeroInstance * h) const
 | 
	
		
			
				|  |  |  					case 2: //wall
 | 
	
		
			
				|  |  |  						what = 3;
 | 
	
		
			
				|  |  |  						val = 1;
 | 
	
		
			
				|  |  | +						mid = 581;
 | 
	
		
			
				|  |  |  						iw.components.push_back (Component(Component::PRIM_SKILL, 3, 1, 0));
 | 
	
		
			
				|  |  |  						break;
 | 
	
		
			
				|  |  |  					case 3: //order of fire
 | 
	
		
			
				|  |  |  						what = 2;
 | 
	
		
			
				|  |  |  						val = 1;
 | 
	
		
			
				|  |  | +						mid = 582;
 | 
	
		
			
				|  |  |  						iw.components.push_back (Component(Component::PRIM_SKILL, 2, 1, 0));
 | 
	
		
			
				|  |  |  						break;
 | 
	
		
			
				|  |  |  					case 6://hall of valhalla
 | 
	
		
			
				|  |  |  						what = 0;
 | 
	
		
			
				|  |  |  						val = 1;
 | 
	
		
			
				|  |  | +						mid = 584;
 | 
	
		
			
				|  |  |  						iw.components.push_back (Component(Component::PRIM_SKILL, 0, 1, 0));
 | 
	
		
			
				|  |  |  						break;
 | 
	
		
			
				|  |  |  					case 5://academy of battle scholars
 | 
	
		
			
				|  |  |  						what = 4;
 | 
	
		
			
				|  |  |  						val = 1000;
 | 
	
		
			
				|  |  | +						mid = 583;
 | 
	
		
			
				|  |  |  						iw.components.push_back (Component(Component::EXPERIENCE, 0, 1000, 0));
 | 
	
		
			
				|  |  |  						break;
 | 
	
		
			
				|  |  |  				}
 | 
	
	
		
			
				|  | @@ -2072,13 +2092,14 @@ void CTownBonus::onHeroVisit (const CGHeroInstance * h) const
 | 
	
		
			
				|  |  |  					case 7: //cage of warlords
 | 
	
		
			
				|  |  |  						what = 1;
 | 
	
		
			
				|  |  |  						val = 1;
 | 
	
		
			
				|  |  | +						mid = 585;
 | 
	
		
			
				|  |  |  						iw.components.push_back (Component(Component::PRIM_SKILL, 1, 1, 0));
 | 
	
		
			
				|  |  |  						break;
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  				break;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		iw.player = cb->getOwner(heroID);
 | 
	
		
			
				|  |  | -		iw.text << VLC->generaltexth->buildings[town->subID][ID].second;
 | 
	
		
			
				|  |  | +		iw.text << VLC->generaltexth->allTexts[mid];
 | 
	
		
			
				|  |  |  		cb->showInfoDialog(&iw);
 | 
	
		
			
				|  |  |  		cb->changePrimSkill (heroID, what, val);
 | 
	
		
			
				|  |  |  		cb->setObjProperty (town->id, 11, id); //add to visitors
 |