pCapital = gc.getPlayer(caster.getOwner()).getCapitalCity()
if not pCapital.isNone():
pPlot = caster.plot()
iX = pPlot.getX()
iY = pPlot.getY()
pNearestCity = CyMap().findCity(iX, iY, PlayerTypes.NO_PLAYER, TeamTypes.NO_TEAM, true, false, TeamTypes.NO_TEAM, DirectionTypes.NO_DIRECTION, pCapitalCity)
if (pNearestCity.isNone() or plotDistance(iX, iY, pNearestCity.getX(), pNearestCity.getY()) > plotDistance(iX, iY, pCapitalCity.getX(), pCapitalCity.getY())):
pPlot = pCapitalCity.plot()
else:
pPlot = pNearestCity.plot()
caster.setXY(pPlot.getX(), pPlot.getY(), false, true, true)