Hooks
static bool BeforeCvPlayerTrade_CreateTradeRoute(CvPlayerTrade* self, CvCity* pOriginCity, CvCity* pDestCity, DomainTypes eDomain, TradeConnectionType eConnectionType, bool& result);static void AfterCvPlayerTrade_CreateTradeRoute(CvPlayerTrade* self, CvCity* pOriginCity, CvCity* pDestCity, DomainTypes eDomain, TradeConnectionType eConnectionType, bool& result);static bool ReplaceCvPlayerTrade_CreateTradeRoute(bool (*original)(CvPlayerTrade*, CvCity*, CvCity*, DomainTypes, TradeConnectionType), CvPlayerTrade* self, CvCity* pOriginCity, CvCity* pDestCity, DomainTypes eDomain, TradeConnectionType eConnectionType);CivRegisterBefore<CivHooks::CvPlayerTrade_CreateTradeRoute>(host, &BeforeCvPlayerTrade_CreateTradeRoute);CivRegisterAfter<CivHooks::CvPlayerTrade_CreateTradeRoute>(host, &AfterCvPlayerTrade_CreateTradeRoute);CivRegisterReplace<CivHooks::CvPlayerTrade_CreateTradeRoute>(host, &ReplaceCvPlayerTrade_CreateTradeRoute);
Code
2908bool CvPlayerTrade::CreateTradeRoute(CvCity* pOriginCity, CvCity* pDestCity, DomainTypes eDomain, TradeConnectionType eConnectionType)2909{2910 int plotsX[MAX_PLOTS_TO_DISPLAY], plotsY[MAX_PLOTS_TO_DISPLAY];29112912 CvGameTrade* pTrade = GC.getGame().GetGameTrade();2913 int iRouteID = -1;2914 bool bResult = pTrade->CreateTradeRoute(pOriginCity, pDestCity, eDomain, eConnectionType, iRouteID);2915 if (!bResult)2916 {2917 return false;2918 }29192920 int iRouteIndex = pTrade->GetIndexFromID(iRouteID);2921 if (iRouteIndex != -1)2922 {2923 int nPlots = pTrade->m_aTradeConnections[iRouteIndex].m_aPlotList.size();2924 if (nPlots > 0) {2925 if (nPlots > MAX_PLOTS_TO_DISPLAY)2926 nPlots = MAX_PLOTS_TO_DISPLAY;2927 for (uint ui = 0; ui < (uint)nPlots; ui++) 2928 {2929 plotsX[ui] = pTrade->m_aTradeConnections[iRouteIndex].m_aPlotList[ui].m_iX;2930 plotsY[ui] = pTrade->m_aTradeConnections[iRouteIndex].m_aPlotList[ui].m_iY;2931 }2932 gDLL->TradeVisuals_NewRoute(iRouteIndex, m_pPlayer->GetID(),pTrade->m_aTradeConnections[iRouteIndex].m_eConnectionType, nPlots, plotsX, plotsY);2933 gDLL->TradeVisuals_UpdateRouteDirection(iRouteIndex, pTrade->m_aTradeConnections[iRouteIndex].m_bTradeUnitMovingForward);2934 }2935 }29362937#if !defined(NO_ACHIEVEMENTS)2938 if (m_pPlayer->isHuman() && !GC.getGame().isGameMultiPlayer())2939 {2940 bool bConnectedToArabs = false;2941 bool bConnectedToPersia = false;2942 bool bConnectedToMongols = false;2943 bool bConnectedToChina = false;2944 bool bConnectedToIndia = false;29452946 CvGameTrade* pGameTrade = GC.getGame().GetGameTrade();2947 for (uint ui = 0; ui < pGameTrade->m_aTradeConnections.size(); ui++)2948 {2949 if (pGameTrade->IsTradeRouteIndexEmpty(ui))2950 {2951 continue;2952 }29532954 TradeConnection kConnection = pGameTrade->m_aTradeConnections[ui];2955 if (kConnection.m_eOriginOwner != m_pPlayer->GetID())2956 {2957 continue;2958 }29592960 if (kConnection.m_eDomain != DOMAIN_LAND)2961 {2962 continue;2963 }29642965 if (strcmp(GET_PLAYER(kConnection.m_eDestOwner).getCivilizationTypeKey(), "CIVILIZATION_ARABIA") == 0)2966 {2967 bConnectedToArabs = true;2968 }2969 else if (strcmp(GET_PLAYER(kConnection.m_eDestOwner).getCivilizationTypeKey(), "CIVILIZATION_PERSIA") == 0)2970 {2971 bConnectedToPersia = true;2972 }2973 else if (strcmp(GET_PLAYER(kConnection.m_eDestOwner).getCivilizationTypeKey(), "CIVILIZATION_MONGOL") == 0)2974 {2975 bConnectedToMongols = true;2976 }2977 else if (strcmp(GET_PLAYER(kConnection.m_eDestOwner).getCivilizationTypeKey(), "CIVILIZATION_CHINA") == 0)2978 {2979 bConnectedToChina = true;2980 }2981 else if (strcmp(GET_PLAYER(kConnection.m_eDestOwner).getCivilizationTypeKey(), "CIVILIZATION_INDIA") == 0)2982 {2983 bConnectedToIndia = true;2984 }2985 }29862987 if (bConnectedToArabs && bConnectedToPersia && bConnectedToMongols && bConnectedToChina && bConnectedToIndia)2988 {2989 gDLL->UnlockAchievement(ACHIEVEMENT_XP2_29);2990 }2991 }2992#endif29932994 return true;2995}