Code
5933void CvUnit::DoAttrition()5934{5935 CvPlot* pPlot = plot();5936 CvString strAppendText;59375938 if(!IsInFriendlyTerritory())5939 {5940 if(isEnemy(pPlot->getTeam(), pPlot) && getEnemyDamageChance() > 0 && getEnemyDamage() > 0)5941 {5942 if(GC.getGame().getJonRandNum(100, "Enemy Territory Damage Chance") < getEnemyDamageChance())5943 {5944 strAppendText = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WAS_DAMAGED_ATTRITION");5945#if defined(MOD_API_UNIT_STATS)5946 changeDamage(getEnemyDamage(), NO_PLAYER, -1, 0.0, &strAppendText);5947#else5948 changeDamage(getEnemyDamage(), NO_PLAYER, 0.0, &strAppendText);5949#endif5950 }5951 }5952 else if(getNeutralDamageChance() > 0 && getNeutralDamage() > 0)5953 {5954 if(GC.getGame().getJonRandNum(100, "Neutral Territory Damage Chance") < getNeutralDamageChance())5955 {5956 strAppendText = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WAS_DAMAGED_ATTRITION");5957#if defined(MOD_API_UNIT_STATS)5958 changeDamage(getNeutralDamage(), NO_PLAYER, -1, 0.0, &strAppendText);5959#else5960 changeDamage(getNeutralDamage(), NO_PLAYER, 0.0, &strAppendText);5961#endif5962 }5963 }5964 }59655966#if defined(MOD_API_PLOT_BASED_DAMAGE)5967 if (MOD_API_PLOT_BASED_DAMAGE) {5968 int iDamage = plot()->getTurnDamage(ignoreTerrainDamage(), ignoreFeatureDamage(), extraTerrainDamage(), extraFeatureDamage());5969 if (0 != iDamage) {5970 if (iDamage > 0) {5971 // CUSTOMLOG("Applying terrain/feature damage (of %i) for player/unit %i/%i at (%i, %i)", iDamage, getOwner(), GetID(), plot()->getX(), plot()->getY());5972 CvString strAppendText = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WAS_DAMAGED_ATTRITION");5973#if defined(MOD_API_UNIT_STATS)5974 changeDamage(iDamage, NO_PLAYER, -1, 0.0, &strAppendText);5975#else5976 changeDamage(iDamage, NO_PLAYER, 0.0, &strAppendText);5977#endif5978 } else {5979 // CUSTOMLOG("Applying terrain/feature healing (of %i) for player/unit %i/%i at (%i, %i)", iDamage, getOwner(), GetID(), plot()->getX(), plot()->getY());5980#if defined(MOD_API_UNIT_STATS)5981 changeDamage(iDamage, NO_PLAYER, -1);5982#else5983 changeDamage(iDamage, NO_PLAYER);5984#endif5985 }5986 }5987 } else {5988#endif5989 // slewis - helicopters take attrition when ending their turn over mountains.5990 if(getDomainType() == DOMAIN_LAND && pPlot->isMountain() && !canMoveAllTerrain())5991 {5992 strAppendText = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WAS_DAMAGED_ATTRITION");5993#if defined(MOD_API_UNIT_STATS)5994 changeDamage(50, NO_PLAYER, -1, 0.0, &strAppendText);5995#else5996 changeDamage(50, NO_PLAYER, 0.0, &strAppendText);5997#endif5998 }5999#if defined(MOD_API_PLOT_BASED_DAMAGE)6000 }6001#endif60026003#if defined(MOD_UNITS_MAX_HP)6004 if(getDamage() >= GetMaxHitPoints())6005#else6006 if(getDamage() >= GC.getMAX_HIT_POINTS())6007#endif6008 {6009 CvString strBuffer;6010 CvNotifications* pNotification = GET_PLAYER(getOwner()).GetNotifications();6011 if(pNotification)6012 {6013 strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WAS_DESTROYED_ATTRITION", getNameKey());6014 Localization::String strSummary = Localization::Lookup("TXT_KEY_UNIT_LOST");6015 pNotification->Add(NOTIFICATION_UNIT_DIED, strBuffer, strSummary.toUTF8(), getX(), getY(), (int)getUnitType(), getOwner());6016 }6017 }60186019 TeamTypes eOwnerTeam = pPlot->getTeam();60206021 if (eOwnerTeam != NO_TEAM)6022 {6023 CvTeam &kTeam = GET_TEAM(eOwnerTeam);6024 if (!kTeam.isMinorCiv() && eOwnerTeam != getTeam() && !kTeam.IsAllowsOpenBordersToTeam(getTeam()))6025 {6026 int iReligiousStrengthLoss = GetReligiousStrengthLossRivalTerritory();6027 if (iReligiousStrengthLoss > 0)6028 {6029 int iStrength = GetReligionData()->GetReligiousStrength();6030 int iStrengthLoss = (getUnitInfo().GetReligiousStrength() * iReligiousStrengthLoss) / 100;60316032 if ((iStrength - iStrengthLoss) <= 0)6033 {6034 CvString strBuffer;6035 CvNotifications* pNotification = GET_PLAYER(getOwner()).GetNotifications();6036 if(pNotification)6037 {6038 strBuffer = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WAS_DESTROYED_ATTRITION", getNameKey());6039 Localization::String strSummary = Localization::Lookup("TXT_KEY_UNIT_LOST");6040 pNotification->Add(NOTIFICATION_UNIT_DIED, strBuffer, strSummary.toUTF8(), getX(), getY(), (int)getUnitType(), getOwner());6041 }60426043 kill(false);6044 }6045 else6046 {6047 GetReligionData()->SetReligiousStrength(iStrength - iStrengthLoss);6048 if (pPlot && pPlot->GetActiveFogOfWarMode() == FOGOFWARMODE_OFF)6049 {6050 Localization::String string = GetLocalizedText("TXT_KEY_MISC_YOU_UNIT_WAS_DAMAGED_ATTRITION");60516052 char text[256];6053 sprintf_s (text, "%s [COLOR_WHITE]-%d [ICON_PEACE][ENDCOLOR]", string.toUTF8(), iStrengthLoss);6054#if defined(SHOW_PLOT_POPUP)6055 SHOW_PLOT_POPUP(plot(), getOwner(), text, 0.0f);6056#else6057 float fDelay = 0.0f;6058 DLLUI->AddPopupText(getX(), getY(), text, fDelay);6059#endif6060 }6061 }6062 }6063 }6064 }6065}