Ejemplo n.º 1
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (defaultValueCase_ == DefaultValueOneofCase.Id)
            {
                hash ^= Id.GetHashCode();
            }
            if (defaultValueCase_ == DefaultValueOneofCase.FeatureId)
            {
                hash ^= FeatureId.GetHashCode();
            }
            if (defaultValueCase_ == DefaultValueOneofCase.Bval)
            {
                hash ^= Bval.GetHashCode();
            }
            if (defaultValueCase_ == DefaultValueOneofCase.Lval)
            {
                hash ^= Lval.GetHashCode();
            }
            if (defaultValueCase_ == DefaultValueOneofCase.Sval)
            {
                hash ^= Sval.GetHashCode();
            }
            if (defaultValueCase_ == DefaultValueOneofCase.Fval)
            {
                hash ^= pbc::ProtobufEqualityComparers.BitwiseSingleEqualityComparer.GetHashCode(Fval);
            }
            hash ^= (int)defaultValueCase_;
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
        private float BaseNpDamage(PartyMember partyMember, EnemyMob enemy, Sval svalNp)
        {
            int npValue             = svalNp.Value;
            int targetBonusNpDamage = 0;

            // Add additional NP damage if there is a special target ID
            if (svalNp.Target > 0)
            {
                string traitName = _traitEnumInfo.Property(svalNp.Target.ToString())?.Value.ToString() ?? "";

                if (enemy.Traits.Contains(traitName))
                {
                    targetBonusNpDamage = svalNp.Correction;
                }
            }

            float constantAttackRate = _constantRate.GetAttackMultiplier("ATTACK_RATE");
            float classModifier      = _classAttackRate.GetAttackMultiplier(partyMember.ServantNiceInfo.ClassName);
            float npTypeModifier     = _constantRate.GetAttackMultiplier($"ENEMY_ATTACK_RATE_{partyMember.NoblePhantasm.Card}");

            // Base NP damage = ATTACK_RATE * Servant total attack * Class modifier * NP type modifier * (20% bonus if undead enemy) * NP damage
            float baseNpDamage = constantAttackRate
                                 * partyMember.TotalAttack
                                 * classModifier
                                 * npTypeModifier
                                 * (npValue / 1000.0f);

            if (targetBonusNpDamage != 0)
            {
                baseNpDamage *= targetBonusNpDamage / 1000.0f;
            }

            return(baseNpDamage);
        }