bool CShieldClass::FindDataField (const CString &sField, CString *retsValue) // FindDataField // // Returns meta-data { int i; if (strEquals(sField, FIELD_HP)) *retsValue = strFromInt(m_iHitPoints); else if (strEquals(sField, FIELD_EFFECTIVE_HP)) { int iHP; int iHPbyDamageType[damageCount]; GetReferenceDamageAdj(NULL, NULL, &iHP, iHPbyDamageType); *retsValue = strFromInt(::CalcEffectiveHP(GetLevel(), iHP, iHPbyDamageType)); } else if (strEquals(sField, FIELD_REGEN)) *retsValue = strFromInt((int)m_Regen.GetHPPer180()); else if (strEquals(sField, FIELD_ADJUSTED_HP)) { int iHP; int iHPbyDamageType[damageCount]; GetReferenceDamageAdj(NULL, NULL, &iHP, iHPbyDamageType); CString sResult; for (i = 0; i < damageCount; i++) { if (i > 0) sResult.Append(CONSTLIT("\t")); sResult.Append(strFromInt(iHPbyDamageType[i])); } *retsValue = sResult; } else if (strEquals(sField, FIELD_DAMAGE_ADJ)) { retsValue->Truncate(0); for (i = 0; i < damageCount; i++) { if (i > 0) retsValue->Append(CONSTLIT("\t")); retsValue->Append(strFromInt(m_DamageAdj.GetAdj((DamageTypes)i))); } } else if (strEquals(sField, FIELD_POWER)) *retsValue = strFromInt(m_iPowerUse * 100); else if (strEquals(sField, FIELD_HP_BONUS)) { CString sResult; for (i = 0; i < damageCount; i++) { if (i > 0) sResult.Append(CONSTLIT(", ")); int iBonus = m_DamageAdj.GetHPBonus((DamageTypes)i); if (iBonus == -100) sResult.Append(CONSTLIT("***")); else sResult.Append(strPatternSubst(CONSTLIT("%3d"), iBonus)); } *retsValue = sResult; } else if (strEquals(sField, FIELD_BALANCE)) *retsValue = strFromInt(CalcBalance()); else if (strEquals(sField, FIELD_WEAPON_SUPPRESS)) { if (m_WeaponSuppress.IsEmpty()) *retsValue = NULL_STR; else { *retsValue = CONSTLIT("=("); bool bNeedSeparator = false; for (i = 0; i < damageCount; i++) if (m_WeaponSuppress.InSet(i)) { if (bNeedSeparator) retsValue->Append(CONSTLIT(" ")); retsValue->Append(::GetDamageType((DamageTypes)i)); bNeedSeparator = true; } retsValue->Append(CONSTLIT(")")); } } else return false; return true; }
bool CArmorClass::FindDataField (const CString &sField, CString *retsValue) // FindDataField // // Returns meta-data { int i; if (strEquals(sField, FIELD_HP)) *retsValue = strFromInt(m_iHitPoints); else if (strEquals(sField, FIELD_BALANCE)) *retsValue = strFromInt(CalcBalance()); else if (strEquals(sField, FIELD_EFFECTIVE_HP)) { int iHP; int iHPbyDamageType[damageCount]; GetReferenceDamageAdj(NULL, NULL, &iHP, iHPbyDamageType); *retsValue = strFromInt(::CalcEffectiveHP(m_pItemType->GetLevel(), iHP, iHPbyDamageType)); } else if (strEquals(sField, FIELD_ADJUSTED_HP)) { int iHP; int iHPbyDamageType[damageCount]; GetReferenceDamageAdj(NULL, NULL, &iHP, iHPbyDamageType); CString sResult; for (i = 0; i < damageCount; i++) { if (i > 0) sResult.Append(CONSTLIT("\t")); sResult.Append(strFromInt(iHPbyDamageType[i])); } *retsValue = sResult; } else if (strEquals(sField, FIELD_DAMAGE_ADJ)) { retsValue->Truncate(0); for (i = 0; i < damageCount; i++) { if (i > 0) retsValue->Append(CONSTLIT("\t")); retsValue->Append(strFromInt(m_DamageAdj.GetAdj((DamageTypes)i))); } } else if (strEquals(sField, FIELD_HP_BONUS)) { CString sResult; for (i = 0; i < damageCount; i++) { if (i > 0) sResult.Append(CONSTLIT(", ")); int iBonus = m_DamageAdj.GetHPBonus((DamageTypes)i); if (iBonus == -100) sResult.Append(CONSTLIT("***")); else sResult.Append(strPatternSubst(CONSTLIT("%3d"), iBonus)); } *retsValue = sResult; } else if (strEquals(sField, FIELD_REPAIR_COST)) *retsValue = strFromInt(m_iRepairCost); else if (strEquals(sField, FIELD_REGEN)) *retsValue = strFromInt((int)m_Regen.GetHPPer180()); else if (strEquals(sField, FIELD_INSTALL_COST)) *retsValue = strFromInt(m_iInstallCost); else if (strEquals(sField, FIELD_SHIELD_INTERFERENCE)) { if (m_fShieldInterference) *retsValue = CONSTLIT("True"); else *retsValue = NULL_STR; } else return false; return true; }
bool CShieldClass::FindDataField (const CString &sField, CString *retsValue) // FindDataField // // Returns meta-data { int i; if (strEquals(sField, FIELD_HP)) *retsValue = strFromInt(m_iHitPoints, TRUE); else if (strEquals(sField, FIELD_EFFECTIVE_HP)) { int iHP; int iHPbyDamageType[damageCount]; GetReferenceDamageAdj(NULL, NULL, &iHP, iHPbyDamageType); *retsValue = strFromInt(::CalcEffectiveHP(GetLevel(), iHP, iHPbyDamageType)); } else if (strEquals(sField, FIELD_REGEN)) { if (m_iRegenRate == 0) *retsValue = CONSTLIT("0"); else *retsValue = strFromInt(m_iRegenHP * 180 / m_iRegenRate, TRUE); } else if (strEquals(sField, FIELD_ADJUSTED_HP)) { int iHP; int iHPbyDamageType[damageCount]; GetReferenceDamageAdj(NULL, NULL, &iHP, iHPbyDamageType); CString sResult; for (i = 0; i < damageCount; i++) { if (i > 0) sResult.Append(CONSTLIT("\t")); sResult.Append(strFromInt(iHPbyDamageType[i])); } *retsValue = sResult; } else if (strEquals(sField, FIELD_DAMAGE_ADJ)) { retsValue->Truncate(0); for (i = 0; i < damageCount; i++) { if (i > 0) retsValue->Append(CONSTLIT("\t")); retsValue->Append(strFromInt(m_iDamageAdj[i])); } } else if (strEquals(sField, FIELD_POWER)) *retsValue = strFromInt(m_iPowerUse * 100, TRUE); else if (strEquals(sField, FIELD_HP_BONUS)) { CString sResult; for (i = 0; i < damageCount; i++) { if (!sResult.IsBlank()) sResult.Append(CONSTLIT(", ")); int iStdAdj = g_StdDamageAdj[GetLevel() - 1][i]; if (m_iDamageAdj[i] > 0) { int iBonus = (int)((100.0 * (iStdAdj - m_iDamageAdj[i]) / m_iDamageAdj[i]) + 0.5); // Prettify. Because of rounding-error, sometimes a bonus of +25 or -25 comes out as // +24 or -24. This is because we store a damage adjustment not the bonus. if (((iBonus + 1) % 25) == 0) iBonus++; else if (((iBonus - 1) % 25) == 0) iBonus--; else if (iBonus == 48) iBonus = 50; sResult.Append(strPatternSubst(CONSTLIT("%3d"), iBonus)); } else if (iStdAdj > 0) sResult.Append(CONSTLIT("***")); else sResult.Append(CONSTLIT(" 0")); } *retsValue = sResult; } else if (strEquals(sField, FIELD_BALANCE)) *retsValue = strFromInt(CalcBalance()); else return false; return true; }