Hooks
static bool BeforeCvAIEnemyTerritoryOperation_Init(CvAIEnemyTerritoryOperation* self, int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int arg3, CvCity* arg4, CvCity* arg5);static void AfterCvAIEnemyTerritoryOperation_Init(CvAIEnemyTerritoryOperation* self, int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int arg3, CvCity* arg4, CvCity* arg5);static void ReplaceCvAIEnemyTerritoryOperation_Init(void (*original)(CvAIEnemyTerritoryOperation*, int, PlayerTypes, PlayerTypes, int, CvCity*, CvCity*), CvAIEnemyTerritoryOperation* self, int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int arg3, CvCity* arg4, CvCity* arg5);CivRegisterBefore<CivHooks::CvAIEnemyTerritoryOperation_Init>(host, &BeforeCvAIEnemyTerritoryOperation_Init);CivRegisterAfter<CivHooks::CvAIEnemyTerritoryOperation_Init>(host, &AfterCvAIEnemyTerritoryOperation_Init);CivRegisterReplace<CivHooks::CvAIEnemyTerritoryOperation_Init>(host, &ReplaceCvAIEnemyTerritoryOperation_Init);
Code
1872/// Kick off this operation1873void CvAIEnemyTerritoryOperation::Init(int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int /* iDefaultArea */, CvCity*, CvCity*)1874{1875 Reset();1876 m_eMoveType = AI_OPERATION_MOVETYPE_ENEMY_TERRITORY;1877 m_iID = iID;1878 m_eOwner = eOwner;1879 m_eEnemy = eEnemy;18801881 if(iID != -1)1882 {1883 // create the armies that are needed and set the state to ARMYAISTATE_WAITING_FOR_UNITS_TO_REINFORCE1884 CvPlayer& kPlayer = GET_PLAYER(m_eOwner);1885 CvArmyAI* pArmyAI = kPlayer.addArmyAI();1886 if(pArmyAI)1887 {1888 m_viArmyIDs.push_back(pArmyAI->GetID());1889 pArmyAI->Init(pArmyAI->GetID(),m_eOwner,m_iID);1890 pArmyAI->SetArmyAIState(ARMYAISTATE_WAITING_FOR_UNITS_TO_REINFORCE);1891 pArmyAI->SetFormationIndex(GetFormation());18921893 // Figure out the initial rally point1894 CvPlot* pTargetPlot = FindBestTarget();1895 if(pTargetPlot != NULL)1896 {1897 SetTargetPlot(pTargetPlot);1898 pArmyAI->SetGoalPlot(pTargetPlot);1899 if(SelectInitialMusterPoint(pArmyAI) != NULL)1900 {1901 pArmyAI->SetXY(GetMusterPlot()->getX(), GetMusterPlot()->getY());1902 SetDefaultArea(GetMusterPlot()->getArea());19031904 if (GetDefaultArea() != pTargetPlot->getArea())1905 {1906 pArmyAI->SetGoalPlot(pTargetPlot);1907 }1908 else1909 {1910 CvPlot* pDeployPt;1911 pDeployPt = GC.getStepFinder().GetXPlotsFromEnd(GetOwner(), GetEnemy(), GetMusterPlot(), GetTargetPlot(), (GetDeployRange() / 2), true);1912 if (pDeployPt)1913 {1914 pArmyAI->SetGoalPlot(pDeployPt);1915 }1916 else1917 {1918 // No path, abort1919 m_eCurrentState = AI_OPERATION_STATE_ABORTED;1920 m_eAbortReason = AI_ABORT_LOST_PATH;1921 }1922 }19231924 // Find the list of units we need to build before starting this operation in earnest1925 BuildListOfUnitsWeStillNeedToBuild();19261927 // try to get as many units as possible from existing units that are waiting around1928 if(GrabUnitsFromTheReserves(GetMusterPlot(), pTargetPlot))1929 {1930 pArmyAI->SetArmyAIState(ARMYAISTATE_WAITING_FOR_UNITS_TO_CATCH_UP);1931 m_eCurrentState = AI_OPERATION_STATE_GATHERING_FORCES;1932 }1933 else1934 {1935 m_eCurrentState = AI_OPERATION_STATE_RECRUITING_UNITS;1936 }19371938 LogOperationStart();1939 }1940 else1941 {1942 // No muster point, abort1943 m_eCurrentState = AI_OPERATION_STATE_ABORTED;1944 m_eAbortReason = AI_ABORT_NO_MUSTER;1945 }1946 }19471948 else1949 {1950 // Lost our target, abort1951 m_eCurrentState = AI_OPERATION_STATE_ABORTED;1952 m_eAbortReason = AI_ABORT_LOST_TARGET;1953 }1954 }1955 }1956}