Bazaar developer reference

CvTacticalAI::AssignTacticalMove(CvTacticalMove)

Defined in
CvTacticalAI.cpp, line 1718
Class
CvTacticalAI
Hook name
CivHooks::CvTacticalAI_AssignTacticalMove

Hooks

static bool BeforeCvTacticalAI_AssignTacticalMove(CvTacticalAI* self, CvTacticalMove move);static void AfterCvTacticalAI_AssignTacticalMove(CvTacticalAI* self, CvTacticalMove move);static void ReplaceCvTacticalAI_AssignTacticalMove(void (*original)(CvTacticalAI*, CvTacticalMove), CvTacticalAI* self, CvTacticalMove move);CivRegisterBefore<CivHooks::CvTacticalAI_AssignTacticalMove>(host, &BeforeCvTacticalAI_AssignTacticalMove);CivRegisterAfter<CivHooks::CvTacticalAI_AssignTacticalMove>(host, &AfterCvTacticalAI_AssignTacticalMove);CivRegisterReplace<CivHooks::CvTacticalAI_AssignTacticalMove>(host, &ReplaceCvTacticalAI_AssignTacticalMove);

Code

1717/// Choose which tactics to run and assign units to it1718void CvTacticalAI::AssignTacticalMove(CvTacticalMove move)1719{1720#pragma warning ( push )1721#pragma warning ( disable : 6011 ) // Dereferencing NULL pointer1722	AI_PERF_FORMAT("AI-perf-tact.csv", ("Move Type: %s (%d), Turn %03d, %s", GC.getTacticalMoveInfo(move.m_eMoveType)->GetType(), (int)move.m_eMoveType, GC.getGame().getElapsedGameTurns(), m_pPlayer->getCivilizationShortDescription()) );1723#pragma warning ( pop )17241725	if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_MOVE_NONCOMBATANTS_TO_SAFETY])1726	{1727		PlotMovesToSafety(false /*bCombatUnits*/);1728	}1729	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_CAPTURE_CITY])1730	{1731		PlotCaptureCityMoves();1732	}1733	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_DAMAGE_CITY])1734	{1735		PlotDamageCityMoves();1736	}1737	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_DESTROY_HIGH_UNIT])1738	{1739		PlotDestroyUnitMoves(AI_TACTICAL_TARGET_HIGH_PRIORITY_UNIT, true);1740	}1741	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_DESTROY_MEDIUM_UNIT])1742	{1743		PlotDestroyUnitMoves(AI_TACTICAL_TARGET_MEDIUM_PRIORITY_UNIT, true);1744	}1745	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_DESTROY_LOW_UNIT])1746	{1747		PlotDestroyUnitMoves(AI_TACTICAL_TARGET_LOW_PRIORITY_UNIT, true);1748	}1749	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_TO_SAFETY])1750	{1751		PlotMovesToSafety(true /*bCombatUnits*/);1752	}1753	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_ATTRIT_HIGH_UNIT])1754	{1755		PlotDestroyUnitMoves(AI_TACTICAL_TARGET_HIGH_PRIORITY_UNIT, false);1756	}1757	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_ATTRIT_MEDIUM_UNIT])1758	{1759		PlotDestroyUnitMoves(AI_TACTICAL_TARGET_MEDIUM_PRIORITY_UNIT, false);1760	}1761	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_ATTRIT_LOW_UNIT])1762	{1763		PlotDestroyUnitMoves(AI_TACTICAL_TARGET_LOW_PRIORITY_UNIT, false);1764	}1765	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_REPOSITION])1766	{1767		PlotRepositionMoves();1768	}1769	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_BARBARIAN_CAMP])1770	{1771		PlotBarbarianCampMoves();1772	}1773	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_PILLAGE_CITADEL])1774	{1775		PlotPillageMoves(AI_TACTICAL_TARGET_CITADEL, true /*bFirstPass*/);1776	}1777	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_PILLAGE_RESOURCE])1778	{1779		PlotPillageMoves(AI_TACTICAL_TARGET_IMPROVEMENT_RESOURCE, true /*bFirstPass*/);1780	}1781	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_PILLAGE])1782	{1783		PlotPillageMoves(AI_TACTICAL_TARGET_IMPROVEMENT, true /*bFirstPass*/);1784	}1785	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_PILLAGE_CITADEL_NEXT_TURN])1786	{1787		PlotPillageMoves(AI_TACTICAL_TARGET_CITADEL, false /*bFirstPass*/);1788	}1789	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_PILLAGE_RESOURCE_NEXT_TURN])1790	{1791		PlotPillageMoves(AI_TACTICAL_TARGET_IMPROVEMENT_RESOURCE, false /*bFirstPass*/);1792	}1793	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_PILLAGE_NEXT_TURN])1794	{1795		PlotPillageMoves(AI_TACTICAL_TARGET_IMPROVEMENT, false /*bFirstPass*/);1796	}1797	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_PLUNDER_TRADE_UNIT])1798	{1799		PlotPlunderTradeUnitMoves(DOMAIN_LAND);1800		PlotPlunderTradeUnitMoves(DOMAIN_SEA);1801	}1802	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_PARK_ON_TRADE_ROUTE])1803	{1804		PlotPlunderTradePlotMoves(DOMAIN_LAND);1805		PlotPlunderTradePlotMoves(DOMAIN_SEA);1806	}1807	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_ATTACK_VERY_HIGH_PRIORITY_CIVILIAN])1808	{1809		PlotCivilianAttackMoves(AI_TACTICAL_TARGET_VERY_HIGH_PRIORITY_CIVILIAN);1810	}1811	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_ATTACK_HIGH_PRIORITY_CIVILIAN])1812	{1813		PlotCivilianAttackMoves(AI_TACTICAL_TARGET_HIGH_PRIORITY_CIVILIAN);1814	}1815	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_ATTACK_MEDIUM_PRIORITY_CIVILIAN])1816	{1817		PlotCivilianAttackMoves(AI_TACTICAL_TARGET_MEDIUM_PRIORITY_CIVILIAN);1818	}1819	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_ATTACK_LOW_PRIORITY_CIVILIAN])1820	{1821		PlotCivilianAttackMoves(AI_TACTICAL_TARGET_LOW_PRIORITY_CIVILIAN);1822	}1823	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_SAFE_BOMBARDS])1824	{1825		PlotSafeBombardMoves();1826	}1827	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_HEAL])1828	{1829		PlotHealMoves();1830	}1831	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_ANCIENT_RUINS])1832	{1833		PlotAncientRuinMoves(1);1834	}1835	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_GARRISON_TO_ALLOW_BOMBARD])1836	{1837		PlotGarrisonMoves(1, true /*bMustAllowRangedAttack*/);1838	}1839	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_GARRISON_ALREADY_THERE])1840	{1841		PlotGarrisonMoves(0);1842	}1843	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_BASTION_ALREADY_THERE])1844	{1845		PlotBastionMoves(0);1846	}1847	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_GUARD_IMPROVEMENT_ALREADY_THERE])1848	{1849		PlotGuardImprovementMoves(0);1850	}1851	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_GARRISON_1_TURN])1852	{1853		PlotGarrisonMoves(1);1854	}1855	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_BASTION_1_TURN])1856	{1857		PlotBastionMoves(1);1858	}1859	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_GUARD_IMPROVEMENT_1_TURN])1860	{1861		PlotGuardImprovementMoves(1);1862	}1863	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_AIR_INTERCEPT])1864	{1865		PlotAirInterceptMoves();1866	}1867	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_AIR_SWEEP])1868	{1869#if defined(MOD_AI_SMART_V3)1870		if (!MOD_AI_SMART_V3)1871#endif1872		PlotAirSweepMoves();1873	}1874	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_POSTURE_SIT_AND_BOMBARD])1875	{1876		PlotSitAndBombardMoves();1877	}1878	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_POSTURE_ATTRIT_FROM_RANGE])1879	{1880		PlotAttritFromRangeMoves();1881	}1882	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_POSTURE_EXPLOIT_FLANKS])1883	{1884		PlotExploitFlanksMoves();1885	}1886	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_POSTURE_STEAMROLL])1887	{1888		PlotSteamrollMoves();1889	}1890	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_POSTURE_SURGICAL_CITY_STRIKE])1891	{1892		PlotSurgicalCityStrikeMoves();1893	}1894	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_POSTURE_HEDGEHOG])1895	{1896		PlotHedgehogMoves();1897	}1898	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_POSTURE_COUNTERATTACK])1899	{1900		PlotCounterattackMoves();1901	}1902	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_POSTURE_WITHDRAW])1903	{1904		PlotWithdrawMoves();1905	}1906	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_POSTURE_SHORE_BOMBARDMENT])1907	{1908		PlotShoreBombardmentMoves();1909	}1910	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_CLOSE_ON_TARGET])1911	{1912		PlotCloseOnTarget(true /*bCheckDominance*/);1913	}1914	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_MOVE_OPERATIONS])1915	{1916		PlotOperationalArmyMoves();1917	}1918	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_EMERGENCY_PURCHASES])1919	{1920		PlotEmergencyPurchases();1921	}1922	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_DEFENSIVE_AIRLIFT])1923	{1924		PlotDefensiveAirlifts();1925	}1926	else if(move.m_eMoveType == (TacticalAIMoveTypes)m_CachedInfoTypes[eTACTICAL_ESCORT_EMBARKED_UNIT])1927	{1928		PlotEscortEmbarkedMoves();1929	}1930}

Calls

Called by