Hooks
static bool BeforeCvAIOperationNavalSuperiority_Init(CvAIOperationNavalSuperiority* self, int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int arg3, CvCity* arg4, CvCity* arg5);static void AfterCvAIOperationNavalSuperiority_Init(CvAIOperationNavalSuperiority* self, int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int arg3, CvCity* arg4, CvCity* arg5);static void ReplaceCvAIOperationNavalSuperiority_Init(void (*original)(CvAIOperationNavalSuperiority*, int, PlayerTypes, PlayerTypes, int, CvCity*, CvCity*), CvAIOperationNavalSuperiority* self, int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int arg3, CvCity* arg4, CvCity* arg5);CivRegisterBefore<CivHooks::CvAIOperationNavalSuperiority_Init>(host, &BeforeCvAIOperationNavalSuperiority_Init);CivRegisterAfter<CivHooks::CvAIOperationNavalSuperiority_Init>(host, &AfterCvAIOperationNavalSuperiority_Init);CivRegisterReplace<CivHooks::CvAIOperationNavalSuperiority_Init>(host, &ReplaceCvAIOperationNavalSuperiority_Init);
Code
4167/// Kick off this operation4168void CvAIOperationNavalSuperiority::Init(int iID, PlayerTypes eOwner, PlayerTypes eEnemy, int /*iDefaultArea*/, CvCity* /*pTarget*/, CvCity* /*pMuster*/)4169{4170 Reset();4171 m_eMoveType = AI_OPERATION_MOVETYPE_FREEFORM_NAVAL;4172 m_iID = iID;4173 m_eOwner = eOwner;4174 m_eEnemy = eEnemy;41754176 if(iID != -1 && GetOperationStartCity())4177 {4178 // create the armies that are needed and set the state to ARMYAISTATE_WAITING_FOR_UNITS_TO_REINFORCE4179 CvPlayer& kPlayer = GET_PLAYER(m_eOwner);4180 CvArmyAI* pArmyAI = kPlayer.addArmyAI();4181 if(pArmyAI)4182 {4183 m_viArmyIDs.push_back(pArmyAI->GetID());4184 pArmyAI->Init(pArmyAI->GetID(),m_eOwner,m_iID);4185 pArmyAI->SetArmyAIState(ARMYAISTATE_WAITING_FOR_UNITS_TO_REINFORCE);4186 pArmyAI->SetFormationIndex(GetFormation());41874188 // Figure out the initial rally point4189 CvPlot* pTargetPlot = FindBestTarget();4190 if(pTargetPlot != NULL)4191 {4192 SetTargetPlot(pTargetPlot);4193 pArmyAI->SetGoalPlot(pTargetPlot);4194 if(SelectInitialMusterPoint(pArmyAI) != NULL)4195 {4196 pArmyAI->SetXY(GetMusterPlot()->getX(), GetMusterPlot()->getY());4197 SetDefaultArea(GetMusterPlot()->getArea());41984199 // Find the list of units we need to build before starting this operation in earnest4200 BuildListOfUnitsWeStillNeedToBuild();42014202 // try to get as many units as possible from existing units that are waiting around4203 if(GrabUnitsFromTheReserves(GetMusterPlot(), GetMusterPlot()))4204 {4205 pArmyAI->SetArmyAIState(ARMYAISTATE_WAITING_FOR_UNITS_TO_CATCH_UP);4206 m_eCurrentState = AI_OPERATION_STATE_MOVING_TO_TARGET;4207 }4208 else4209 {4210 m_eCurrentState = AI_OPERATION_STATE_RECRUITING_UNITS;4211 }42124213 LogOperationStart();4214 }4215 else4216 {4217 // No muster point, abort4218 m_eCurrentState = AI_OPERATION_STATE_ABORTED;4219 m_eAbortReason = AI_ABORT_NO_MUSTER;4220 }4221 }42224223 else4224 {4225 // Lost our target, abort4226 m_eCurrentState = AI_OPERATION_STATE_ABORTED;4227 m_eAbortReason = AI_ABORT_LOST_TARGET;4228 }4229 }4230 }4231}