Hooks
static bool BeforeCvAIOperationNavalBombardment_Init(CvAIOperationNavalBombardment* self, int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int arg3, CvCity* arg4, CvCity* arg5);static void AfterCvAIOperationNavalBombardment_Init(CvAIOperationNavalBombardment* self, int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int arg3, CvCity* arg4, CvCity* arg5);static void ReplaceCvAIOperationNavalBombardment_Init(void (*original)(CvAIOperationNavalBombardment*, int, PlayerTypes, PlayerTypes, int, CvCity*, CvCity*), CvAIOperationNavalBombardment* self, int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int arg3, CvCity* arg4, CvCity* arg5);CivRegisterBefore<CivHooks::CvAIOperationNavalBombardment_Init>(host, &BeforeCvAIOperationNavalBombardment_Init);CivRegisterAfter<CivHooks::CvAIOperationNavalBombardment_Init>(host, &AfterCvAIOperationNavalBombardment_Init);CivRegisterReplace<CivHooks::CvAIOperationNavalBombardment_Init>(host, &ReplaceCvAIOperationNavalBombardment_Init);
Code
3925/// Kick off this operation3926void CvAIOperationNavalBombardment::Init(int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int /*iDefaultArea*/, CvCity* /*pTarget*/, CvCity* /*pMuster*/)3927{3928 Reset();3929 m_eMoveType = AI_OPERATION_MOVETYPE_ENEMY_TERRITORY;3930 m_iID = iID;3931 m_eOwner = eOwner;3932 m_eEnemy = eEnemy;39333934 if(iID != -1 && GetOperationStartCity())3935 {3936 // create the armies that are needed and set the state to ARMYAISTATE_WAITING_FOR_UNITS_TO_REINFORCE3937 CvPlayer& kPlayer = GET_PLAYER(m_eOwner);3938 CvArmyAI* pArmyAI = kPlayer.addArmyAI();3939 if(pArmyAI)3940 {3941 m_viArmyIDs.push_back(pArmyAI->GetID());3942 pArmyAI->Init(pArmyAI->GetID(),m_eOwner,m_iID);3943 pArmyAI->SetArmyAIState(ARMYAISTATE_WAITING_FOR_UNITS_TO_REINFORCE);3944 pArmyAI->SetFormationIndex(GetFormation());39453946 // Figure out the initial rally point3947 CvPlot* pTargetPlot = FindBestTarget();3948 if(pTargetPlot != NULL)3949 {3950 SetTargetPlot(pTargetPlot);3951 pArmyAI->SetGoalPlot(pTargetPlot);3952 if(SelectInitialMusterPoint(pArmyAI) != NULL)3953 {3954 pArmyAI->SetXY(GetMusterPlot()->getX(), GetMusterPlot()->getY());3955 SetDefaultArea(GetMusterPlot()->getArea());39563957 // Find the list of units we need to build before starting this operation in earnest3958 BuildListOfUnitsWeStillNeedToBuild();39593960 // try to get as many units as possible from existing units that are waiting around3961 if(GrabUnitsFromTheReserves(GetMusterPlot(), GetMusterPlot()))3962 {3963 pArmyAI->SetArmyAIState(ARMYAISTATE_WAITING_FOR_UNITS_TO_CATCH_UP);3964 m_eCurrentState = AI_OPERATION_STATE_GATHERING_FORCES;3965 }3966 else3967 {3968 m_eCurrentState = AI_OPERATION_STATE_RECRUITING_UNITS;3969 }39703971 LogOperationStart();3972 }3973 else3974 {3975 // No muster point, abort3976 m_eCurrentState = AI_OPERATION_STATE_ABORTED;3977 m_eAbortReason = AI_ABORT_NO_MUSTER;3978 }3979 }39803981 else3982 {3983 // Lost our target, abort3984 m_eCurrentState = AI_OPERATION_STATE_ABORTED;3985 m_eAbortReason = AI_ABORT_LOST_TARGET;3986 }3987 }3988 }3989}