Hooks
static bool BeforeCvCity_canRangeStrikeAt(const CvCity* self, int iX, int iY, bool& result);static void AfterCvCity_canRangeStrikeAt(const CvCity* self, int iX, int iY, bool& result);static bool ReplaceCvCity_canRangeStrikeAt(bool (*original)(const CvCity*, int, int), const CvCity* self, int iX, int iY);CivRegisterBefore<CivHooks::CvCity_canRangeStrikeAt>(host, &BeforeCvCity_canRangeStrikeAt);CivRegisterAfter<CivHooks::CvCity_canRangeStrikeAt>(host, &AfterCvCity_canRangeStrikeAt);CivRegisterReplace<CivHooks::CvCity_canRangeStrikeAt>(host, &ReplaceCvCity_canRangeStrikeAt);
Code
16110bool CvCity::canRangeStrikeAt(int iX, int iY) const16111{16112 VALIDATE_OBJECT16113 if(!canRangeStrike())16114 {16115 return false;16116 }1611716118 const CvPlot* pTargetPlot = GC.getMap().plot(iX, iY);1611916120 if(NULL == pTargetPlot)16121 {16122 return false;16123 }1612416125 if(!pTargetPlot->isVisible(getTeam()))16126 {16127 return false;16128 }1612916130#if defined(MOD_EVENTS_CITY_BOMBARD)16131 bool bIndirectFireAllowed; // By reference, yuck!!!16132 int iAttackRange = getBombardRange(bIndirectFireAllowed);16133 16134 if (iAttackRange == 0) return false;16135#else16136 int iAttackRange = GC.getCITY_ATTACK_RANGE();16137#endif1613816139 if(plotDistance(plot()->getX(), plot()->getY(), pTargetPlot->getX(), pTargetPlot->getY()) > iAttackRange)16140 {16141 return false;16142 }1614316144#if defined(MOD_EVENTS_CITY_BOMBARD)16145 if(!bIndirectFireAllowed)16146#else16147 if(!GC.getCAN_CITY_USE_INDIRECT_FIRE())16148#endif16149 {16150#if defined MOD_BUGFIX_NAVAL_TARGETING16151 if (!plot()->canSeePlot(pTargetPlot, getTeam(), iAttackRange, NO_DIRECTION, DOMAIN_LAND))16152#else16153 if (!plot()->canSeePlot(pTargetPlot, getTeam(), iAttackRange, NO_DIRECTION))16154#endif16155 {16156 return false;16157 }16158 }1615916160 // If it's NOT a city, see if there are any units to aim for16161 if(!pTargetPlot->isCity())16162 {16163 if(!canRangedStrikeTarget(*pTargetPlot))16164 {16165 return false;16166 }16167 }16168 else // I don't want cities attacking each other directly16169 {16170 return false;16171 }1617216173 return true;16174}