Code
5631/// Handles declarations of War for this AI5632void CvDiplomacyAI::MakeWar()5633{5634 CvWeightedVector<int> playerList;5635 int iWeight;56365637 if((int)m_eTargetPlayer >= (int)DIPLO_FIRST_PLAYER)5638 {5639 DoMakeWarOnPlayer(m_eTargetPlayer);5640 }5641 else5642 {5643 for(int iPlayerLoop = 0; iPlayerLoop < MAX_CIV_PLAYERS; iPlayerLoop++)5644 {5645 PlayerTypes eTarget = (PlayerTypes)iPlayerLoop;5646#if defined(MOD_AI_MP_DIPLOMACY)5647 // JdH: As requests are enqued we can make war with anyone ...5648 if((MOD_AI_MP_DIPLOMACY || IsValidUIDiplomacyTarget(eTarget)) && IsPlayerValid(eTarget))5649#else5650 if(IsValidUIDiplomacyTarget(eTarget) && IsPlayerValid(eTarget))5651#endif5652 {5653 iWeight = (int)GetWarProjection(eTarget) + 1;56545655 // Square the distance enum to make it crucial5656 iWeight *= (1 + (int)GetPlayer()->GetProximityToPlayer(eTarget));5657 iWeight *= (1 + (int)GetPlayer()->GetProximityToPlayer(eTarget));56585659 if(iPlayerLoop < MAX_MAJOR_CIVS)5660 {5661 if(GetMajorCivOpinion(eTarget) == MAJOR_CIV_OPINION_UNFORGIVABLE)5662 {5663 iWeight *= 2;5664 }56655666 iWeight *= 10; // Make sure majors are looked at before city states5667 }56685669 playerList.push_back(iPlayerLoop, iWeight);5670 }5671 }56725673 playerList.SortItems();56745675 for(int iI = 0; iI < playerList.size(); iI++)5676 {5677 DoMakeWarOnPlayer((PlayerTypes)playerList.GetElement(iI));5678 }5679 }56805681 // Increment counters for co-op wars we have agreed to - this may trigger war5682 for(int iPlayerLoop = 0; iPlayerLoop < MAX_CIV_PLAYERS; iPlayerLoop++)5683 {5684 PlayerTypes eLoopPlayer = (PlayerTypes) iPlayerLoop;56855686 if(IsPlayerValid(eLoopPlayer))5687 {5688 if(!GET_PLAYER(eLoopPlayer).isMinorCiv())5689 {5690 for(int iThirdPlayerLoop = 0; iThirdPlayerLoop < MAX_MAJOR_CIVS; iThirdPlayerLoop++)5691 {5692 PlayerTypes eThirdPlayer = (PlayerTypes) iThirdPlayerLoop;5693 if (IsPlayerValid(eThirdPlayer))5694 {5695 if(GetCoopWarCounter(eLoopPlayer, eThirdPlayer) >= 0)5696 {5697 ChangeCoopWarCounter(eLoopPlayer, eThirdPlayer, 1);56985699 // AI players will always declare war at 10 turns, so we simplify things here - humans are handled by DoCoopWarTimeStatement()5700 if(!GET_PLAYER(eLoopPlayer).isHuman())5701 {5702 if(GetCoopWarAcceptedState(eLoopPlayer, eThirdPlayer) == COOP_WAR_STATE_SOON &&5703 GetCoopWarCounter(eLoopPlayer, eThirdPlayer) == /*10*/ GC.getCOOP_WAR_SOON_COUNTER())5704 {5705 // Us5706 SetCoopWarAcceptedState(eLoopPlayer, eThirdPlayer, COOP_WAR_STATE_ACCEPTED);5707 SetCoopWarCounter(eLoopPlayer, eThirdPlayer, 0);5708 DeclareWar(eThirdPlayer);5709 GetPlayer()->GetMilitaryAI()->RequestShowOfForce(eThirdPlayer);57105711 int iLockedTurns = /*15*/ GC.getCOOP_WAR_LOCKED_LENGTH();5712 GET_TEAM(GetPlayer()->getTeam()).ChangeNumTurnsLockedIntoWar(GET_PLAYER(eThirdPlayer).getTeam(), iLockedTurns);5713 }5714 }5715 }5716 }5717 }5718 }5719 }5720 }5721}