Hooks
static bool BeforeCvPlayerEspionage_MoveSpyTo(CvPlayerEspionage* self, CvCity* pCity, uint uiSpyIndex, bool bAsDiplomat, bool& result);static void AfterCvPlayerEspionage_MoveSpyTo(CvPlayerEspionage* self, CvCity* pCity, uint uiSpyIndex, bool bAsDiplomat, bool& result);static bool ReplaceCvPlayerEspionage_MoveSpyTo(bool (*original)(CvPlayerEspionage*, CvCity*, uint, bool), CvPlayerEspionage* self, CvCity* pCity, uint uiSpyIndex, bool bAsDiplomat);CivRegisterBefore<CivHooks::CvPlayerEspionage_MoveSpyTo>(host, &BeforeCvPlayerEspionage_MoveSpyTo);CivRegisterAfter<CivHooks::CvPlayerEspionage_MoveSpyTo>(host, &AfterCvPlayerEspionage_MoveSpyTo);CivRegisterReplace<CivHooks::CvPlayerEspionage_MoveSpyTo>(host, &ReplaceCvPlayerEspionage_MoveSpyTo);
Code
1440/// MoveSpyTo - Move a spy into this city1441bool CvPlayerEspionage::MoveSpyTo(CvCity* pCity, uint uiSpyIndex, bool bAsDiplomat)1442{1443 CvAssertMsg(uiSpyIndex < m_aSpyList.size(), "iSpyIndex is out of bounds");1444 if(uiSpyIndex >= m_aSpyList.size())1445 {1446 return false;1447 }14481449 if(!CanMoveSpyTo(pCity, uiSpyIndex, bAsDiplomat))1450 {1451 return false;1452 }14531454 CvCity* pOldCity = NULL;14551456 if(IsSpyInCity(uiSpyIndex))1457 {1458 pOldCity = GetCityWithSpy(uiSpyIndex);1459 // trying to move into a city where the spy is already at1460 if(pCity == pOldCity)1461 {1462 return true;1463 }14641465 if(!ExtractSpyFromCity(uiSpyIndex))1466 {1467 CvAssertMsg(false, "Failed to extract spy");1468 return false;1469 }1470 }14711472 if(pCity)1473 {1474 CvCityEspionage* pCityEspionage = pCity->GetCityEspionage();1475 CvAssertMsg(pCityEspionage, "Could not get CvCityEspionage from pCity");1476 if(!pCityEspionage)1477 {1478 return false;1479 }14801481 m_aSpyList[uiSpyIndex].m_iCityX = pCity->getX();1482 m_aSpyList[uiSpyIndex].m_iCityY = pCity->getY();1483 pCityEspionage->m_aiSpyAssignment[m_pPlayer->GetID()] = uiSpyIndex;1484#if defined(MOD_API_ESPIONAGE)1485 m_aSpyList[uiSpyIndex].SetSpyState(m_pPlayer->GetID(), uiSpyIndex, SPY_STATE_TRAVELLING);1486#else1487 m_aSpyList[uiSpyIndex].m_eSpyState = SPY_STATE_TRAVELLING;1488#endif1489 m_aSpyList[uiSpyIndex].m_bIsDiplomat = bAsDiplomat;1490 int iRate = CalcPerTurn(SPY_STATE_TRAVELLING, pCity, uiSpyIndex);1491 int iGoal = CalcRequired(SPY_STATE_TRAVELLING, pCity, uiSpyIndex);1492 pCityEspionage->SetActivity(m_pPlayer->GetID(), 0, iRate, iGoal);1493 }14941495 if(GC.getLogging())1496 {1497 CvString strMsg;1498 strMsg.Format("Moving spy, %d,", uiSpyIndex);1499#if defined(MOD_BUGFIX_SPY_NAMES)1500 strMsg += GetLocalizedText(m_aSpyList[uiSpyIndex].GetSpyName(m_pPlayer));1501#else1502 strMsg += GetLocalizedText(m_pPlayer->getCivilizationInfo().getSpyNames(m_aSpyList[uiSpyIndex].m_iName));1503#endif1504 strMsg += ",";1505 if(pOldCity)1506 {1507 strMsg += GET_PLAYER(pOldCity->getOwner()).getCivilizationShortDescription();1508 strMsg += ",";1509 strMsg += pOldCity->getName();1510 }1511 else1512 {1513 strMsg += "Unassigned";1514 strMsg += ",";1515 }1516 strMsg += ",";15171518 if(pCity)1519 {1520 strMsg += GET_PLAYER(pCity->getOwner()).getCivilizationShortDescription();1521 strMsg += ",";1522 strMsg += pCity->getName();1523 }1524 else1525 {1526 strMsg += "Unassigned";1527 strMsg += ",";1528 }1529 strMsg += ",";15301531 if (bAsDiplomat)1532 {1533 strMsg += "Diplomat";1534 }1535 strMsg += ",";15361537 LogEspionageMsg(strMsg);1538 }15391540 return true;1541}