ICCItem *CArmorClass::GetItemProperty (CItemCtx &Ctx, const CString &sName) // GetItemProperty // // Returns armor property { CCodeChain &CC = g_pUniverse->GetCC(); if (strEquals(sName, PROPERTY_BLINDING_IMMUNE)) return CC.CreateBool(IsBlindingDamageImmune(Ctx)); else if (strEquals(sName, PROPERTY_COMPLETE_HP)) return CC.CreateInteger(GetMaxHP(Ctx, true)); else if (strEquals(sName, PROPERTY_DEVICE_DAMAGE_IMMUNE)) return CC.CreateBool(IsDeviceDamageImmune(Ctx)); else if (strEquals(sName, PROPERTY_DEVICE_DISRUPT_IMMUNE)) return CC.CreateBool(IsDeviceDamageImmune(Ctx)); else if (strEquals(sName, PROPERTY_DISINTEGRATION_IMMUNE)) return CC.CreateBool(IsDisintegrationImmune(Ctx)); else if (strEquals(sName, PROPERTY_EMP_IMMUNE)) return CC.CreateBool(IsEMPDamageImmune(Ctx)); else if (strEquals(sName, PROPERTY_HP)) return CC.CreateInteger(GetMaxHP(Ctx)); else if (strEquals(sName, PROPERTY_RADIATION_IMMUNE)) return CC.CreateBool(IsRadiationImmune(Ctx)); else if (strEquals(sName, PROPERTY_SHATTER_IMMUNE)) return CC.CreateBool(IsShatterImmune(Ctx)); else if (m_pItemType) return CreateResultFromDataField(CC, m_pItemType->GetDataField(sName)); else return CC.CreateNil(); }
CString CArmorClass::GetReference (CItemCtx &Ctx, int iVariant) // GetReference // // Returns a string that describes the basic attributes // of this armor. // // Example: // // 30 hp; laser-resistant; impact-resistant { int i; CString sReference; // Get modifications int iLevel = m_pItemType->GetLevel(); const CItemEnhancement &Mods = Ctx.GetMods(); // Radiation if (m_fRadiationImmune || Mods.IsRadiationImmune()) { if (iLevel < RADIATION_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("radiation-immune")); } else if (iLevel >= RADIATION_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("radiation-vulnerable")); // If we're immune to blinding/EMP/device damage, then collapse // it all under a single entry bool bCheckedBlind = false; bool bCheckedEMP = false; bool bCheckedDevice = false; if ((m_iBlindingDamageAdj == 0 || Mods.IsBlindingImmune()) && (m_iEMPDamageAdj == 0 || Mods.IsEMPImmune()) && (m_iDeviceDamageAdj < 100 || Mods.IsDeviceDamageImmune())) { if (iLevel < DEVICE_DAMAGE_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("ion effect-immune")); bCheckedBlind = true; bCheckedEMP = true; bCheckedDevice = true; } // Collapse blind and EMP resistance else if ((m_iBlindingDamageAdj == 0 || Mods.IsBlindingImmune()) && (m_iEMPDamageAdj == 0 || Mods.IsEMPImmune())) { if (iLevel < EMP_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("blind-, EMP-immune")); bCheckedBlind = true; bCheckedEMP = true; } else if ((m_iBlindingDamageAdj < 100) && (iLevel < BLIND_IMMUNE_LEVEL) && (m_iEMPDamageAdj < 100)) { AppendReferenceString(&sReference, CONSTLIT("blind-, EMP-resistant")); bCheckedBlind = true; bCheckedEMP = true; } // Otherwise, treat each separate // // Blindness if (!bCheckedBlind) { if (m_iBlindingDamageAdj == 0 || Mods.IsBlindingImmune()) { if (iLevel < BLIND_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("blind-immune")); } else if (m_iBlindingDamageAdj < 100) { if (iLevel < BLIND_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("blind-resistant")); else AppendReferenceString(&sReference, CONSTLIT("blind-vulnerable")); } else if (iLevel >= BLIND_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("blind-vulnerable")); } // EMP if (!bCheckedEMP) { if (m_iEMPDamageAdj == 0 || Mods.IsEMPImmune()) { if (iLevel < EMP_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("EMP-immune")); } else if (m_iEMPDamageAdj < 100) { if (iLevel < EMP_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("EMP-resistant")); else AppendReferenceString(&sReference, CONSTLIT("EMP-vulnerable")); } else if (iLevel >= EMP_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("EMP-vulnerable")); } // Device damage if (!bCheckedDevice) { if (m_iDeviceDamageAdj < 100 || Mods.IsDeviceDamageImmune()) { if (iLevel < DEVICE_DAMAGE_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("device-protect")); } else if (iLevel >= DEVICE_DAMAGE_IMMUNE_LEVEL) AppendReferenceString(&sReference, CONSTLIT("device-vulnerable")); } // Disintegration if (m_fDisintegrationImmune || Mods.IsDisintegrationImmune()) AppendReferenceString(&sReference, CONSTLIT("disintegrate-immune")); // Shatter if (IsShatterImmune(Ctx)) AppendReferenceString(&sReference, CONSTLIT("shatter-immune")); // Shield interference if (m_fShieldInterference || Mods.IsShieldInterfering()) AppendReferenceString(&sReference, CONSTLIT("no-shields")); // Photo repair if (m_fPhotoRepair || Mods.IsPhotoRegenerating()) AppendReferenceString(&sReference, CONSTLIT("photo-repair")); // Solar power if (m_fPhotoRecharge || Mods.IsPhotoRecharge()) AppendReferenceString(&sReference, CONSTLIT("solar")); // Regeneration if ((!m_Regen.IsEmpty() && !m_fPhotoRepair) || Mods.IsRegenerating()) AppendReferenceString(&sReference, CONSTLIT("regenerate")); // Decay if (!m_Decay.IsEmpty() || Mods.IsDecaying()) AppendReferenceString(&sReference, CONSTLIT("decay")); // Reflection for (i = 0; i < damageCount; i++) { if (m_Reflective.InSet((DamageTypes)i) || (Mods.IsReflective() && Mods.GetDamageType() == i)) AppendReferenceString(&sReference, strPatternSubst(CONSTLIT("%s-reflecting"), GetDamageShortName((DamageTypes)i))); } // Done return sReference; }