Code
5873void CvGame::setWinner(TeamTypes eNewWinner, VictoryTypes eNewVictory)5874{5875 if((getWinner() != eNewWinner) || (getVictory() != eNewVictory))5876 {5877 m_eWinner = eNewWinner;5878 m_eVictory = eNewVictory;5879 SetWinningTurn(getElapsedGameTurns());58805881 // Reset UN countdown if necessary5882 SetUnitedNationsCountdown(0);58835884 if(getVictory() != NO_VICTORY && !IsStaticTutorialActive())5885 {5886 CvVictoryInfo* pkVictoryInfo = GC.getVictoryInfo(getVictory());5887 CvAssert(pkVictoryInfo);5888 if(pkVictoryInfo == NULL)5889 return;58905891 const char* szVictoryTextKey = pkVictoryInfo->GetTextKey();58925893 if(getWinner() != NO_TEAM)5894 {5895 const PlayerTypes winningTeamLeaderID = GET_TEAM(getWinner()).getLeaderID();5896 CvPlayerAI& kWinningTeamLeader = GET_PLAYER(winningTeamLeaderID);5897 const char* szWinningTeamLeaderNameKey = kWinningTeamLeader.getNameKey();58985899 Localization::String localizedText = Localization::Lookup("TXT_KEY_GAME_WON");5900 localizedText << GET_TEAM(getWinner()).getName().GetCString() << szVictoryTextKey;5901 addReplayMessage(REPLAY_MESSAGE_MAJOR_EVENT, winningTeamLeaderID, localizedText.toUTF8(), -1, -1);59025903 //Notify everyone of the victory5904 localizedText = Localization::Lookup("TXT_KEY_NOTIFICATION_VICTORY_WINNER");5905 localizedText << szWinningTeamLeaderNameKey << szVictoryTextKey;59065907 Localization::String localizedSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_SUMMARY_VICTORY_WINNER");5908 localizedSummary << szWinningTeamLeaderNameKey;59095910 for(int iNotifyLoop = 0; iNotifyLoop < MAX_MAJOR_CIVS; ++iNotifyLoop){5911 PlayerTypes eNotifyPlayer = (PlayerTypes) iNotifyLoop;5912 CvPlayerAI& kCurNotifyPlayer = GET_PLAYER(eNotifyPlayer);5913 CvNotifications* pNotifications = kCurNotifyPlayer.GetNotifications();5914 if(pNotifications){5915 pNotifications->Add(NOTIFICATION_VICTORY, localizedText.toUTF8(), localizedSummary.toUTF8(), -1, -1, -1);5916 }5917 }59185919#if !defined(NO_ACHIEVEMENTS)5920 //--Start Achievements5921 //--Don't allow most in multiplayer so friends can't achieve-whore it up together5922 if(!GC.getGame().isGameMultiPlayer() && kWinningTeamLeader.isHuman() && kWinningTeamLeader.isLocalPlayer())5923 {5924 const bool bUsingDLC1Scenario = gDLL->IsModActivated(CIV5_DLC_01_SCENARIO_MODID);5925 const bool bUsingDLC2Scenario = gDLL->IsModActivated(CIV5_DLC_02_SCENARIO_MODID) || gDLL->IsModActivated(CIV5_COMPLETE_SCENARIO1_MODID);5926 const bool bUsingDLC3Scenario = gDLL->IsModActivated(CIV5_DLC_03_SCENARIO_MODID);5927 const bool bUsingDLC4Scenario = gDLL->IsModActivated(CIV5_DLC_04_SCENARIO_MODID);5928 const bool bUsingDLC5Scenario = gDLL->IsModActivated(CIV5_DLC_05_SCENARIO_MODID);5929 const bool bUsingDLC6Scenario = gDLL->IsModActivated(CIV5_DLC_06_SCENARIO_MODID);59305931 const bool bUsingXP1Scenario1 = gDLL->IsModActivated(CIV5_XP1_SCENARIO1_MODID);5932 const bool bUsingXP1Scenario2 = gDLL->IsModActivated(CIV5_XP1_SCENARIO2_MODID);5933 const bool bUsingXP1Scenario3 = gDLL->IsModActivated(CIV5_XP1_SCENARIO3_MODID);59345935 const bool bUsingXP2Scenario1 = gDLL->IsModActivated(CIV5_XP2_SCENARIO1_MODID);5936 const bool bUsingXP2Scenario2 = gDLL->IsModActivated(CIV5_XP2_SCENARIO2_MODID);59375938 const VictoryTypes eVictorySpaceRace = static_cast<VictoryTypes>(1);5939 const VictoryTypes eVictoryDomination = static_cast<VictoryTypes>(2);5940 const VictoryTypes eVictoryCultural = static_cast<VictoryTypes>(3);5941 const VictoryTypes eVictoryDiplomatic = static_cast<VictoryTypes>(4);59425943 const PolicyBranchTypes ePolicyBranchFreedom = static_cast<PolicyBranchTypes>(9);5944 const PolicyBranchTypes ePolicyBranchOrder = static_cast<PolicyBranchTypes>(10);5945 const PolicyBranchTypes ePolicyBranchAutocracy = static_cast<PolicyBranchTypes>(11);59465947 const HandicapTypes eHandicapDeity = static_cast<HandicapTypes>(7);59485949 //Games Won Stat5950 gDLL->IncrementSteamStat(ESTEAMSTAT_TOTAL_WINS);59515952 //Victory on Map Sizes5953 WorldSizeTypes winnerMapSize = GC.getMap().getWorldSize();5954 switch(winnerMapSize)5955 {5956 case WORLDSIZE_DUEL:5957 gDLL->UnlockAchievement(ACHIEVEMENT_MAPSIZE_DUEL);5958 break;5959 case WORLDSIZE_TINY:5960 gDLL->UnlockAchievement(ACHIEVEMENT_MAPSIZE_TINY);5961 break;5962 case WORLDSIZE_SMALL:5963 gDLL->UnlockAchievement(ACHIEVEMENT_MAPSIZE_SMALL);5964 break;5965 case WORLDSIZE_STANDARD:5966 if(!bUsingXP2Scenario2 && !bUsingXP2Scenario1)5967 {5968 gDLL->UnlockAchievement(ACHIEVEMENT_MAPSIZE_STANDARD);5969 }5970 break;5971 case WORLDSIZE_LARGE:5972 gDLL->UnlockAchievement(ACHIEVEMENT_MAPSIZE_LARGE);5973 break;5974 case WORLDSIZE_HUGE:5975 gDLL->UnlockAchievement(ACHIEVEMENT_MAPSIZE_HUGE);5976 break;5977 default:5978 OutputDebugString("Playing on some other kind of world size.");5979 }59805981 //Victory on Map Types5982 CvString winnerMapName = CvPreGame::mapScriptName();5983 //OutputDebugString(winnerMapName);5984 //OutputDebugString("\n");59855986 if(winnerMapName == "Assets\\Maps\\Continents.lua")5987 gDLL->UnlockAchievement(ACHIEVEMENT_MAPTYPE_CONTINENTS);5988 else if(winnerMapName == "Assets\\Maps\\Pangaea.lua")5989 gDLL->UnlockAchievement(ACHIEVEMENT_MAPTYPE_PANGAEA);5990 else if(winnerMapName == "Assets\\Maps\\Archipelago.lua")5991 gDLL->UnlockAchievement(ACHIEVEMENT_MAPTYPE_ARCHIPELAGO);5992 else if(winnerMapName == "Assets\\Maps\\Earth_Duel.Civ5Map" || winnerMapName == "Assets\\Maps\\Earth_Huge.Civ5Map"5993 || winnerMapName == "Assets\\Maps\\Earth_Large.Civ5Map" || winnerMapName == "Assets\\Maps\\Earth_Small.Civ5Map"5994 || winnerMapName == "Assets\\Maps\\Earth_Standard.Civ5Map" || winnerMapName == "Assets\\Maps\\Earth_Tiny.Civ5Map")5995 gDLL->UnlockAchievement(ACHIEVEMENT_MAPTYPE_EARTH);5996 else5997 OutputDebugString("\n Playing some other map. \n\n");599859996000 //Victory on Difficulty Levels6001 HandicapTypes winnerHandicapType = getHandicapType();6002 if(!bUsingXP2Scenario1 && !bUsingXP2Scenario2) 6003 {6004 switch(winnerHandicapType)6005 {6006 case 0:6007 gDLL->UnlockAchievement(ACHIEVEMENT_DIFLEVEL_SETTLER);6008 break;6009 case 1:6010 gDLL->UnlockAchievement(ACHIEVEMENT_DIFLEVEL_CHIEFTAIN);6011 break;6012 case 2:6013 gDLL->UnlockAchievement(ACHIEVEMENT_DIFLEVEL_WARLORD);6014 break;6015 case 3:6016 gDLL->UnlockAchievement(ACHIEVEMENT_DIFLEVEL_PRINCE);6017 break;6018 case 4:6019 gDLL->UnlockAchievement(ACHIEVEMENT_DIFLEVEL_KING);6020 break;6021 case 5:6022 gDLL->UnlockAchievement(ACHIEVEMENT_DIFLEVEL_EMPEROR);6023 break;6024 case 6:6025 gDLL->UnlockAchievement(ACHIEVEMENT_DIFLEVEL_IMMORTAL);6026 break;6027 case 7:6028 gDLL->UnlockAchievement(ACHIEVEMENT_DIFLEVEL_DEITY);6029 break;6030 default:6031 OutputDebugString("Playing on some non-existant dif level.");6032 }6033 }60346035 //Different Victory Win Types6036 if(!bUsingXP2Scenario1 && !bUsingXP2Scenario2)6037 {6038 switch(eNewVictory)6039 {6040 case 0:6041 OutputDebugString("No current Achievement for a time victory");6042 break;6043 case 1:6044 gDLL->UnlockAchievement(ACHIEVEMENT_VICTORY_SPACE);6045 break;6046 case 2:6047 {6048 if(!bUsingXP1Scenario1)6049 {6050 gDLL->UnlockAchievement(ACHIEVEMENT_VICTORY_DOMINATION);6051 }6052 }6053 break;6054 case 3:6055 gDLL->UnlockAchievement(ACHIEVEMENT_VICTORY_CULTURE);6056 break;6057 case 4:6058 gDLL->UnlockAchievement(ACHIEVEMENT_VICTORY_DIPLO);6059 break;6060 default:6061 OutputDebugString("Your l33t victory skills allowed you to win in some other way.");6062 }6063 }606460656066 //Victory with Specific Leaders6067 CvString pLeader = kWinningTeamLeader.getLeaderTypeKey();60686069 if(!bUsingDLC6Scenario && pLeader == "LEADER_ALEXANDER")6070 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_ALEXANDER);6071 else if(pLeader == "LEADER_WASHINGTON" && !bUsingXP2Scenario1)6072 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_WASHINGTON);6073 else if(!bUsingXP1Scenario3 && !bUsingDLC4Scenario && !bUsingXP2Scenario1 && pLeader == "LEADER_ELIZABETH")6074 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_ELIZABETH);6075 else if(!bUsingXP1Scenario2 && !bUsingXP1Scenario3 && !bUsingDLC4Scenario && pLeader == "LEADER_NAPOLEON")6076 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_NAPOLEON);6077 else if(!bUsingXP1Scenario2 && !bUsingXP1Scenario3 && !bUsingDLC4Scenario && pLeader == "LEADER_BISMARCK")6078 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_BISMARCK);6079 else if(!bUsingXP1Scenario3 && pLeader == "LEADER_CATHERINE")6080 {6081 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_CATHERINE);60826083 if(bUsingXP1Scenario1 && winnerHandicapType >= 5)6084 {6085 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_42);6086 }6087 }6088 else if(!bUsingXP1Scenario2 && !bUsingXP2Scenario2 && pLeader == "LEADER_AUGUSTUS")6089 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_CAESAR);6090 else if(!bUsingDLC6Scenario && pLeader == "LEADER_RAMESSES")6091 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_RAMESSES);6092 else if(!bUsingXP1Scenario2 && !bUsingXP1Scenario1 && pLeader == "LEADER_ASKIA")6093 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_ASKIA);6094 else if(!bUsingXP1Scenario1 && !bUsingDLC6Scenario && pLeader == "LEADER_HARUN_AL_RASHID")6095 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_HARUN);6096 else if(!bUsingDLC6Scenario && pLeader == "LEADER_DARIUS")6097 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_DARIUS);6098 else if(!bUsingDLC3Scenario && pLeader == "LEADER_GANDHI")6099 {6100 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_GANDHI);6101 if(eNewVictory == 3 && kWinningTeamLeader.getNumCities() <= 3) //Bollywood6102 gDLL->UnlockAchievement(ACHIEVEMENT_SPECIAL_BOLLYWOOD);6103 }6104 else if(pLeader == "LEADER_RAMKHAMHAENG")6105 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_RAMKHAMHAENG);6106 else if(!bUsingDLC5Scenario && pLeader == "LEADER_WU_ZETIAN")6107 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_WU);6108 else if(!bUsingDLC5Scenario && pLeader == "LEADER_ODA_NOBUNAGA")6109 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_ODA);6110 else if(!bUsingDLC3Scenario && pLeader == "LEADER_HIAWATHA")6111 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_HIAWATHA);6112 else if(!bUsingDLC3Scenario && pLeader == "LEADER_MONTEZUMA")6113 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_MONTEZUMA);6114 else if(!bUsingXP1Scenario1 && !bUsingDLC6Scenario && pLeader == "LEADER_SULEIMAN")6115 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_SULEIMAN);6116 else if(pLeader == "LEADER_NEBUCHADNEZZAR")6117 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_NEBUCHADNEZZAR);6118 else if(!bUsingDLC5Scenario && pLeader == "LEADER_GENGHIS_KHAN")6119 {6120 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_GENGHIS);6121 }6122 else if(pLeader == "LEADER_ISABELLA")6123 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_ISABELLA);6124 else if(pLeader == "LEADER_PACHACUTI")6125 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_PACHACUTI);6126 else if(!bUsingDLC3Scenario && pLeader == "LEADER_KAMEHAMEHA")6127 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_KAMEHAMEHA);6128 else if(pLeader == "LEADER_HARALD")6129 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_BLUETOOTH);6130 else if(!bUsingDLC5Scenario && pLeader == "LEADER_SEJONG")6131 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_SEJONG);6132 else if(pLeader == "LEADER_MARIA")6133 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_01);6134 else if(!bUsingXP1Scenario2 && pLeader == "LEADER_THEODORA")6135 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_02);6136 else if(pLeader == "LEADER_DIDO")6137 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_03);6138 else if(pLeader == "LEADER_BOUDICCA")6139 {6140 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_04);61416142 if(bUsingXP1Scenario1 && winnerHandicapType >= 5)6143 {6144 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_41);6145 }6146 }6147 else if(pLeader == "LEADER_SELASSIE")6148 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_05);6149 else if(pLeader == "LEADER_ATTILA")6150 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_06);6151 else if(pLeader == "LEADER_PACAL")6152 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_07);6153 else if(pLeader == "LEADER_WILLIAM")6154 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_08);6155 else if(!bUsingXP1Scenario3 && pLeader == "LEADER_GUSTAVUS_ADOLPHUS")6156 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_09);6157 else if(pLeader == "LEADER_ASHURBANIPAL" )6158 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_01);6159 else if(pLeader == "LEADER_PEDRO")6160 {6161 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_02);61626163 //Diplomatic Victory6164 if(eNewVictory == eVictoryDiplomatic)6165 {6166 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_20);6167 }6168 }6169 else if(pLeader == "LEADER_GAJAH_MADA" )6170 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_03);6171 else if(pLeader == "LEADER_AHMAD_ALMANSUR")6172 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_04);6173 else if(pLeader == "LEADER_CASIMIR")6174 {6175 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_05);61766177 //Space Victory6178 if(eNewVictory == eVictorySpaceRace)6179 {6180 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_23);6181 }6182 }6183 else if(pLeader == "LEADER_MARIA_I")6184 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_06);6185 else if(pLeader == "LEADER_POCATELLO")6186 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_07);6187 else if(pLeader == "LEADER_ENRICO_DANDOLO")6188 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_08);6189 else if(pLeader == "LEADER_SHAKA")6190 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_09);6191 else6192 OutputDebugString("\nPlaying with a non-standard leader.\n");61936194 //One City6195 if(kWinningTeamLeader.getNumCities() == 1)6196 {6197 gDLL->UnlockAchievement(ACHIEVEMENT_ONECITY);6198 }61996200 //Uber Achievements for unlocking other achievements6201 if(gDLL->IsAchievementUnlocked(ACHIEVEMENT_MAPSIZE_DUEL) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_MAPSIZE_TINY) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_MAPSIZE_SMALL) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_MAPSIZE_STANDARD) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_MAPSIZE_LARGE) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_MAPSIZE_HUGE) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_MAPTYPE_ARCHIPELAGO) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_MAPTYPE_CONTINENTS) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_MAPTYPE_EARTH) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_MAPTYPE_PANGAEA))6202 {6203 gDLL->UnlockAchievement(ACHIEVEMENT_MAPS_ALL);6204 }6205 if(gDLL->IsAchievementUnlocked(ACHIEVEMENT_VICTORY_CULTURE) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_VICTORY_SPACE) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_VICTORY_DIPLO) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_VICTORY_DOMINATION))6206 {6207 gDLL->UnlockAchievement(ACHIEVEMENT_VICTORY_ALL);6208 }6209 if(gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_WASHINGTON) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_ELIZABETH) && gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_NAPOLEON)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_BISMARCK)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_CATHERINE)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_CAESAR)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_ALEXANDER)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_RAMESSES)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_ASKIA)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_HARUN)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_DARIUS)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_GANDHI)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_RAMKHAMHAENG)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_WU)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_ODA)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_HIAWATHA)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_MONTEZUMA)&& gDLL->IsAchievementUnlocked(ACHIEVEMENT_WIN_SULEIMAN))6210 {6211 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_ALLBASELEADERS);6212 }62136214 //Victory/Ideology Achievements6215 const PolicyBranchTypes eBranch =kWinningTeamLeader.GetPlayerPolicies()->GetLateGamePolicyTree();6216 if(eBranch != NO_POLICY_BRANCH_TYPE)6217 {6218 if(eNewVictory == eVictorySpaceRace)6219 {6220 if(eBranch == ePolicyBranchFreedom)6221 {6222 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_10);6223 }6224 else if(eBranch == ePolicyBranchOrder)6225 {6226 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_11);6227 }6228 }6229 else if(eNewVictory == eVictoryDomination)6230 {6231 if(eBranch == ePolicyBranchOrder)6232 {6233 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_17);6234 }6235 else if(eBranch == ePolicyBranchAutocracy)6236 {6237 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_18);6238 }6239 }6240 else if(eNewVictory == eVictoryCultural)6241 {6242 if(eBranch == ePolicyBranchFreedom)6243 {6244 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_12);6245 }6246 else if(eBranch == ePolicyBranchOrder)6247 {6248 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_13);6249 }6250 else if(eBranch == ePolicyBranchAutocracy)6251 {6252 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_14);6253 }6254 }6255 else if(eNewVictory == eVictoryDiplomatic)6256 {6257 if(eBranch == ePolicyBranchFreedom)6258 {6259 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_15);6260 }6261 else if(eBranch == ePolicyBranchAutocracy)6262 {6263 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_16);6264 }6265 }6266 }62676268 // World Congress related Achievements6269 if (GetGameLeagues()->GetNumActiveLeagues() > 0)6270 {6271 CvLeague* pLeague = GetGameLeagues()->GetActiveLeague();6272 if (pLeague)6273 {6274 // Diplomatic Victory without ever being host6275 if (eNewVictory == eVictoryDiplomatic)6276 {6277 if (!pLeague->HasMemberEverBeenHost(kWinningTeamLeader.GetID()))6278 {6279 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_43);6280 }6281 }6282 }6283 }62846285 //Check for PSG6286 CvAchievementUnlocker::Check_PSG();62876288 //DLC1 Scenario Win Achievements6289 if(bUsingDLC1Scenario)6290 {6291 if(eNewVictory == 2) //Only win by domination victory6292 {6293 CvString strHandicapType = this->getHandicapInfo().GetType();62946295 //All easier difficulty level achievements are unlocked when you beat it on a harder difficulty level.6296 bool bBeatOnHarderDifficulty = false;62976298 if(strHandicapType == "HANDICAP_DEITY")6299 {6300 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_SCENARIO_01_DEITY);6301 bBeatOnHarderDifficulty = true;6302 }63036304 if(bBeatOnHarderDifficulty || strHandicapType == "HANDICAP_IMMORTAL")6305 {6306 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_SCENARIO_01_IMMORTAL);6307 bBeatOnHarderDifficulty = true;6308 }63096310 if(bBeatOnHarderDifficulty || strHandicapType == "HANDICAP_EMPEROR")6311 {6312 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_SCENARIO_01_EMPEROR);6313 bBeatOnHarderDifficulty = true;6314 }63156316 if(bBeatOnHarderDifficulty || strHandicapType == "HANDICAP_KING")6317 {6318 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_SCENARIO_01_KING);6319 bBeatOnHarderDifficulty = true;6320 }63216322 //Despite it's name, this achievement is for any difficulty.6323 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_SCENARIO_01_PRINCE_OR_BELOW);6324 }6325 }63266327 //DLC2 Scenario Win Achievements6328 if(bUsingDLC2Scenario)6329 {6330 CvString strCivType = kWinningTeamLeader.getCivilizationInfo().GetType();6331 if(strCivType == "CIVILIZATION_SPAIN")6332 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_02_WIN_SPAIN);6333 else if(strCivType == "CIVILIZATION_FRANCE")6334 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_02_WIN_FRANCE);6335 else if(strCivType == "CIVILIZATION_ENGLAND")6336 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_02_WIN_ENGLAND);6337 else if(strCivType == "CIVILIZATION_INCA")6338 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_02_WIN_INCA);6339 else if(strCivType == "CIVILIZATION_AZTEC")6340 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_02_WIN_AZTECS);6341 else if(strCivType == "CIVILIZATION_IROQUOIS")6342 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_02_WIN_IROQUOIS);6343 }63446345 //DLC3 Scenario Win Achievements6346 if(bUsingDLC3Scenario)6347 {6348 CvString strCivType = kWinningTeamLeader.getCivilizationInfo().GetType();6349 if(strCivType == "CIVILIZATION_POLYNESIA")6350 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_03_WIN_HIVA);6351 else if(strCivType == "CIVILIZATION_IROQUOIS")6352 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_03_WIN_TAHITI);6353 else if(strCivType == "CIVILIZATION_INDIA")6354 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_03_WIN_SAMOA);6355 else if(strCivType == "CIVILIZATION_AZTEC")6356 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_03_WIN_TONGA);6357 }63586359 //DLC4 Scenario Win Achievements6360 if(bUsingDLC4Scenario)6361 {6362 CvString strCivType = kWinningTeamLeader.getCivilizationInfo().GetType();6363 if(strCivType == "CIVILIZATION_DENMARK")6364 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_04_WIN_DENMARK);6365 else if(strCivType == "CIVILIZATION_ENGLAND")6366 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_04_WIN_ENGLAND);6367 else if(strCivType == "CIVILIZATION_GERMANY")6368 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_04_WIN_NORWAY);6369 else if(strCivType == "CIVILIZATION_FRANCE")6370 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_04_NORMANDY);63716372 switch(winnerHandicapType)6373 {6374 case 5: // Win scenario on Emperor (any civ) YOU! The Conqueror6375 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_04_WIN_EMPEROR);6376 break;6377 case 6: // Win scenario on Immortal (any civ) Surviving Domesday6378 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_04_WIN_IMMORTAL);6379 break;6380 case 7: // Win scenario on Deity (any civ) Surviving Ragnarok6381 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_04_WIN_DEITY);6382 break;6383 }6384 }63856386 //DLC5 Scenario Win Achievements6387 if(bUsingDLC5Scenario)6388 {6389 // Civilization6390 CvString strCivType = kWinningTeamLeader.getCivilizationInfo().GetType();6391 if(strCivType == "CIVILIZATION_JAPAN")6392 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_05_WIN_JAPAN);6393 else if(strCivType == "CIVILIZATION_KOREA")6394 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_05_WIN_KOREA);6395 else if(strCivType == "CIVILIZATION_CHINA")6396 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_05_WIN_CHINA);6397 else if(strCivType == "CIVILIZATION_MONGOL")6398 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_05_WIN_MANCHU);63996400 // Difficulty6401 switch(winnerHandicapType)6402 {6403 case 5: // Emperor6404 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_05_WIN_EMPEROR);6405 break;6406 case 6: // Immortal6407 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_05_WIN_IMMORTAL);6408 break;6409 case 7: // Deity6410 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_05_WIN_DEITY);6411 break;6412 }64136414 // Win in less than 100 turns6415 if(getGameTurn() >= 0 && getGameTurn() < 100)6416 {6417 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_05_WIN_100TURNS);6418 }64196420 }64216422 //DLC6 Scenario Win Achievements6423 if(bUsingDLC6Scenario)6424 {6425 // Civilization6426 CvString strCivType = kWinningTeamLeader.getCivilizationInfo().GetType();6427 if(strCivType == "CIVILIZATION_OTTOMAN")6428 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_06_WIN_HITTITES);6429 else if(strCivType == "CIVILIZATION_GREECE")6430 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_06_WIN_GREECE);6431 else if(strCivType == "CIVILIZATION_ARABIA")6432 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_06_WIN_SUMER);6433 else if(strCivType == "CIVILIZATION_EGYPT")6434 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_06_WIN_EGYPT);6435 else if(strCivType == "CIVILIZATION_PERSIA")6436 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_06_WIN_PERSIA);64376438 // Difficulty6439 switch(winnerHandicapType)6440 {6441 case 3: // Prince6442 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_06_WIN_PRINCE);6443 break;6444 case 4: // King6445 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_06_WIN_KING);6446 break;6447 case 5: // Emperor6448 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_06_WIN_EMPEROR);6449 break;6450 case 6: // Immortal6451 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_06_WIN_IMMORTAL);6452 break;6453 case 7: // Deity6454 gDLL->UnlockAchievement(ACHIEVEMENT_SCENARIO_06_WIN_DEITY);6455 break;6456 }64576458 }64596460 if(bUsingXP1Scenario1)6461 {6462 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_21);64636464 if(pLeader == "LEADER_HARUN_AL_RASHID" && winnerHandicapType >= 5)6465 {6466 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_43);6467 }6468 }64696470 if(bUsingXP1Scenario2)6471 {6472 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_22);64736474 if(winnerHandicapType >= 7) //Deity or higher6475 {6476 if(pLeader == "LEADER_THEODORA")6477 {6478 typedef std::pair<int,int> Location;6479 typedef std::tr1::array<Location, 27> OriginalCitiesArray;6480 OriginalCitiesArray OriginalCities = {6481 Location(65,6), // Alexandria6482 Location(48,7), // Cyrene6483 Location(71,9), // Caesarea6484 Location(79,13), // Palmyra6485 Location(74,14), // Damascus6486 Location(49,18), // Mistra6487 Location(68,20), // Seleucia6488 Location(73,20), // Antioch6489 Location(63,21), // Attalia6490 Location(76,21), // Edessa6491 Location(51,22), // Athens6492 Location(47,23), // Nicopolis6493 Location(57,23), // Ephesus6494 Location(67,24), // Iconium6495 Location(75,26), // Melitene6496 Location(63,27), // Dorylaeum6497 Location(50,28), // Thessalonica6498 Location(58,29), // Constantinople6499 Location(45,30), // Dyrrachium6500 Location(71,30), // Amasia6501 Location(54,31), // Adrianople6502 Location(64,32), // Amastris6503 Location(78,32), // Theodosiopolis6504 Location(49,34), // Naissus6505 Location(69,34), // Sinope6506 Location(75,34), // Trebizond6507 Location(45,35), // Sirmium 65086509 }; 65106511 CvMap& kMap = GC.getMap();6512 const PlayerTypes eActivePlayer = GC.getGame().getActivePlayer();6513 bool bHasAllCities = true;65146515 //Test if we still own each city.6516 for(OriginalCitiesArray::iterator it = OriginalCities.begin(); it != OriginalCities.end(); ++it)6517 {6518 CvPlot* pkPlot = kMap.plot(it->first, it->second);6519 if(pkPlot != NULL)6520 {6521 CvCity* pkCity = pkPlot->getPlotCity();6522 if(pkCity != NULL)6523 {6524 if(pkCity->getOwner() == eActivePlayer)6525 {6526 continue;6527 }6528 }6529 }65306531 bHasAllCities = false;6532 }65336534 if(bHasAllCities)6535 {6536 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_50);6537 }6538 }6539 else if(pLeader == "LEADER_AUGUSTUS")6540 {6541 typedef std::pair<int,int> Location;6542 typedef std::tr1::array<Location, 29> OriginalCitiesArray;6543 OriginalCitiesArray OriginalCities = {6544 Location(10,16), // Russadir6545 Location(15,18), // Iol Caesarea6546 Location(30,18), // Carthage6547 Location(37,19), // Syracuse6548 Location(4,23), // Gades6549 Location(13,25), // Carthago Nova6550 Location(37,27), // Neapoli6551 Location(41,27), // Brundisium6552 Location(1,29), // Olisipo6553 Location(6,29), // Emerita Augusta6554 Location(15,30), // Tarraco6555 Location(33,31), // Rome6556 Location(14,34), // Caesaraugusta6557 Location(20,36), // Narbo6558 Location(24,36), // Massilia6559 Location(40,36), // Salonae6560 Location(28,37), // Genua6561 Location(34,37), // Ravenna6562 Location(3,39), // Brigantium6563 Location(30,40), // Milan6564 Location(16,42), // Mediolanum6565 Location(22,42), // Lundunum6566 Location(32,45), // Casta Regina6567 Location(41,45), // Carnutum6568 Location(14,47), // Portus Namnetum6569 Location(21,48), // Lutetia6570 Location(26,49), // Trier6571 Location(17,52), // Coriallum6572 Location(22,53) // Gesoriacum6573 };65746575 CvMap& kMap = GC.getMap();6576 const PlayerTypes eActivePlayer = GC.getGame().getActivePlayer();6577 bool bHasAllCities = true;65786579 //Test if we still own each city.6580 for(OriginalCitiesArray::iterator it = OriginalCities.begin(); it != OriginalCities.end(); ++it)6581 {6582 CvPlot* pkPlot = kMap.plot(it->first, it->second);6583 if(pkPlot != NULL)6584 {6585 CvCity* pkCity = pkPlot->getPlotCity();6586 if(pkCity != NULL)6587 {6588 if(pkCity->getOwner() == eActivePlayer)6589 {6590 continue;6591 }6592 }6593 }65946595 bHasAllCities = false;6596 }65976598 if(bHasAllCities)6599 {6600 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_50);6601 }6602 }6603 }6604 }66056606 if(bUsingXP1Scenario3)6607 {6608 gDLL->UnlockAchievement(ACHIEVEMENT_XP1_23);6609 }661066116612 if(bUsingXP2Scenario1)6613 {6614 CvString strCivType = kWinningTeamLeader.getCivilizationInfo().GetType();6615 if(strCivType == "CIVILIZATION_AMERICA")6616 {6617 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_56);6618 }6619 else6620 {6621 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_57);6622 }66236624 // Difficulty6625 if (winnerHandicapType == eHandicapDeity)6626 {6627 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_58);6628 }6629 }66306631 if(bUsingXP2Scenario2)6632 {6633 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_49);66346635 // Difficulty6636 if (winnerHandicapType == eHandicapDeity)6637 {6638 CvString strCivType = kWinningTeamLeader.getCivilizationInfo().GetType();6639 if(strCivType == "CIVILIZATION_AMERICA")6640 {6641 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_50);6642 }6643 else if(strCivType == "CIVILIZATION_OTTOMAN")6644 {6645 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_51);6646 }6647 }6648 }6649 }6650 //Win any multiplayer game6651 if(GC.getGame().isGameMultiPlayer() && kWinningTeamLeader.isHuman() && (GET_PLAYER(GC.getGame().getActivePlayer()).GetID() == kWinningTeamLeader.GetID()))6652 {6653 gDLL->UnlockAchievement(ACHIEVEMENT_WIN_MULTIPLAYER);6654 }6655#endif66566657 }66586659 if((getAIAutoPlay() > 0) || gDLL->GetAutorun())6660 {6661 setGameState(GAMESTATE_EXTENDED);6662 }6663 else6664 {6665 setGameState(GAMESTATE_OVER);6666 }6667 }66686669 GC.GetEngineUserInterface()->setDirty(Center_DIRTY_BIT, true);66706671 GC.GetEngineUserInterface()->setDirty(Soundtrack_DIRTY_BIT, true);6672 }6673}