Esempio n. 1
0
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;
}
Esempio n. 2
0
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));
    }
}
Esempio n. 3
0
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;
}