bool CLatentEffect::Deactivate() { if (IsActivated()) { //remove the modifier from weapon, not player if (GetModValue() == Mod::ADDITIONAL_EFFECT || GetModValue() == Mod::DMG) { CCharEntity* PChar = (CCharEntity*)m_POwner; CItemWeapon* weapon = (CItemWeapon*)PChar->getEquip((SLOTTYPE)GetSlot()); int16 modPower = GetModPower(); if (weapon != nullptr && (weapon->isType(ITEM_ARMOR) || weapon->isType(ITEM_WEAPON))) { if (GetModValue() == Mod::ADDITIONAL_EFFECT) { for (uint8 i = 0; i < weapon->modList.size(); ++i) { //ensure the additional effect is fully removed from the weapon if (weapon->modList.at(i).getModID() == Mod::ADDITIONAL_EFFECT) { weapon->modList.at(i).setModAmount(0); } } } else { weapon->addModifier(CModifier(GetModValue(), -modPower)); } } } else { m_POwner->delModifier(m_ModValue, m_ModPower); } m_Activated = false; //printf("LATENT DEACTIVATED: %d\n", m_ModValue); return true; } return false; }
CRAFTING_NAMESPACE CPointsModifier::CPointsModifier( int speedPoints, int efficiencyPoints, int qualityPoints, PointFunction speedFn, PointFunction efficiencyFn, PointFunction qualityFn) { speedFn = speedFn ? speedFn : CPointsModifier::defaultSpeedCalc; efficiencyFn = efficiencyFn ? efficiencyFn : CPointsModifier::defaultEffCalc; qualityFn = qualityFn ? qualityFn : CPointsModifier::defaultQualityCalc; m_speed = speedFn(speedPoints); m_efficiency = efficiencyFn(efficiencyPoints); m_quality = qualityFn(qualityPoints); for (int i = 0; i < kNumMods; i++) { const float value = m_quality * kStatSigns[i]; const ModifierType type = static_cast<ModifierType>(i); addModifier(CModifier(type, value)); } }
bool CLatentEffect::Activate() { if (!IsActivated()) { //additional effect/dmg latents add mod to weapon, not player if (GetModValue() == Mod::ADDITIONAL_EFFECT || GetModValue() == Mod::DMG) { CCharEntity* PChar = (CCharEntity*)m_POwner; CItemWeapon* weapon = (CItemWeapon*)PChar->getEquip((SLOTTYPE)GetSlot()); weapon->addModifier(CModifier(GetModValue(), GetModPower())); } else { m_POwner->addModifier(m_ModValue, m_ModPower); } m_Activated = true; //printf("LATENT ACTIVATED: %d, Current value: %d\n", m_ModValue, m_POwner->getMod(m_ModValue)); return true; } return false; }