Bazaar developer reference

BuildRouteValid(CvAStarNode *, CvAStarNode *, int, const void *, CvAStar *)

Defined in
CvAStar.cpp, line 2658
Hook name
CivHooks::BuildRouteValid

Hooks

static bool BeforeBuildRouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static void AfterBuildRouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder, int& result);static int ReplaceBuildRouteValid(int (*original)(CvAStarNode*, CvAStarNode*, int, const void*, CvAStar*), CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder);CivRegisterBefore<CivHooks::BuildRouteValid>(host, &BeforeBuildRouteValid);CivRegisterAfter<CivHooks::BuildRouteValid>(host, &AfterBuildRouteValid);CivRegisterReplace<CivHooks::BuildRouteValid>(host, &ReplaceBuildRouteValid);

Code

2657/// Build Route path finder - check validity of a coordinate2658int BuildRouteValid(CvAStarNode* parent, CvAStarNode* node, int data, const void* pointer, CvAStar* finder)2659{2660	CvPlot* pNewPlot;26612662	if(parent == NULL)2663	{2664		return TRUE;2665	}26662667	int iFlags = finder->GetInfo();2668	PlayerTypes ePlayer = (PlayerTypes)(iFlags & 0xFF);26692670	CvPlayer& thisPlayer = GET_PLAYER(ePlayer);2671	bool bThisPlayerIsMinor = thisPlayer.isMinorCiv();26722673	pNewPlot = GC.getMap().plotUnchecked(node->m_iX, node->m_iY);2674	if(!bThisPlayerIsMinor && !(pNewPlot->isRevealed(thisPlayer.getTeam())))2675	{2676		return FALSE;2677	}26782679	if(pNewPlot->isWater())2680	{2681		return FALSE;2682	}26832684	if(pNewPlot->isImpassable() || pNewPlot->isMountain())2685	{2686		return FALSE;2687	}26882689	PlayerTypes ePlotOwnerPlayer = pNewPlot->getOwner();2690	if(ePlotOwnerPlayer != NO_PLAYER && !pNewPlot->IsFriendlyTerritory(ePlayer))2691	{2692		PlayerTypes eMajorPlayer = NO_PLAYER;2693		PlayerTypes eMinorPlayer = NO_PLAYER;2694		bool bPlotOwnerIsMinor = GET_PLAYER(ePlotOwnerPlayer).isMinorCiv();2695		if(bThisPlayerIsMinor && !bPlotOwnerIsMinor)2696		{2697			eMajorPlayer = ePlotOwnerPlayer;2698			eMinorPlayer = ePlayer;2699		}2700		else if(bPlotOwnerIsMinor && !bThisPlayerIsMinor)2701		{2702			eMajorPlayer = ePlayer;2703			eMinorPlayer = ePlotOwnerPlayer;2704		}2705		else2706		{2707			return FALSE;2708		}27092710		if(!GET_PLAYER(eMinorPlayer).GetMinorCivAI()->IsActiveQuestForPlayer(eMajorPlayer, MINOR_CIV_QUEST_ROUTE))2711		{2712			return FALSE;2713		}2714	}27152716	return TRUE;2717}

Calls

Called by