Exemple #1
0
        public static StatExplainer MaxHitpointsExplanation(StatExplainer __result, CharacterObject __instance)
        {
            var bonuses = new CharacterAttributeBonuses(__instance);
            var bonusHP = (int)(__instance.MaxHitPoints() * bonuses.HPMultiplier / (1 + bonuses.HPMultiplier));

            __result.AddLine("Endurance modifier", bonusHP);
            return(__result);
        }
Exemple #2
0
        public static float increaseMoralGain(float dif, MobileParty party)
        {
            if (party.Leader == null)
            {
                return(dif);
            }
            var bonuses = new CharacterAttributeBonuses(party.Leader);
            var bonus   = dif * bonuses.PositiveMoraleMultiplier;

            Logger.Log("Increase morale gain by " + bonus + " for VIG", party.Leader);
            return(dif + bonus);
        }
Exemple #3
0
        public static float decreaseMoralLoss(float dif, MobileParty party)
        {
            if (party.Leader == null)
            {
                return(dif);
            }
            var bonuses = new CharacterAttributeBonuses(party.Leader);
            var bonus   = dif * bonuses.NegativeMoraleMultiplier;

            Logger.Log("Decrased morale loss by " + bonus + " for CON", party.Leader);
            return(dif + bonus);
        }
        public static void InitializeAgentStats(Agent agent, Equipment spawnEquipment, AgentDrivenProperties agentDrivenProperties, AgentBuildData agentBuildData)
        {
            if (!agent.IsHuman)
            {
                return;
            }

            var characterObject = CharacterObject.Find(agent.Character.StringId);
            var speedMultiplier = new CharacterAttributeBonuses(characterObject).MoveSpeedMultiplier;

            Logger.Log("Bonus " + speedMultiplier.ToString("P") + " Movement Speed from END", characterObject);
            agentDrivenProperties.CombatMaxSpeedMultiplier *= 1 + speedMultiplier;
        }
Exemple #5
0
        public static SkillVM CurrentSkill(SkillVM __result, CharacterVM __instance)
        {
            if (__result == null)
            {
                return(__result);
            }
            var bonuses     = new CharacterAttributeBonuses(__instance.Hero.CharacterObject);
            var lerningRate = __result.LearningRate;
            var bonus       = lerningRate * bonuses.XPMultiplier;

            __result.CurrentLearningRateText = "Learning Rate: x " + (lerningRate + bonus).ToString("F2");

            return(__result);
        }
        public static void UpdateAgentStats(Agent agent, AgentDrivenProperties agentDrivenProperties)
        {
            if (!agent.IsHuman)
            {
                return;
            }

            var   characterObject  = CharacterObject.Find(agent.Character.StringId);
            var   characterBonuses = new CharacterAttributeBonuses(characterObject);
            var   weapon           = agent.GetWieldedWeaponInfo(Agent.HandIndex.MainHand);
            var   isMelee          = weapon != null && !weapon.IsRangedWeapon;
            float speedMultiplier  = isMelee
                                ? characterBonuses.MeleeSpeedMultiplier
                : characterBonuses.RangeSpeedMultiplier;

            Logger.Log("Bonus " + speedMultiplier.ToString("P") + " Attack Speed from " + (isMelee ? "VIG" : "CON"), characterObject);
            speedMultiplier++;
            agentDrivenProperties.ThrustOrRangedReadySpeedMultiplier *= speedMultiplier;
            agentDrivenProperties.ReloadSpeed          *= speedMultiplier;
            agentDrivenProperties.SwingSpeedMultiplier *= speedMultiplier;
        }
Exemple #7
0
 public static int CalculateDamage(int __result, ref AttackInformation attackInformation, ref AttackCollisionData collisionData, WeaponComponentData weapon)
 {
     if (!attackInformation.IsVictimAgentNull &&
         !attackInformation.IsAttackerAgentNull &&
         attackInformation.IsAttackerAgentHuman &&
         attackInformation.IsVictimAgentHuman &&
         !collisionData.IsFallDamage &&
         attackInformation.AttackerAgentCharacter is CharacterObject atacker &&
         attackInformation.VictimAgentCharacter is CharacterObject &&
         !collisionData.IsAlternativeAttack)
     {
         var   bonuses          = new CharacterAttributeBonuses(atacker);
         var   isMelee          = weapon != null && !weapon.IsRangedWeapon && !weapon.IsAmmo && !weapon.IsConsumable;
         float damageMultiplier = isMelee
             ? bonuses.MeleeDamageMultiplier
             : bonuses.RangeDamageMultiplier;
         var bonusDamage = (int)(__result * damageMultiplier);
         Logger.Log("Bonus " + bonusDamage + " damage from " + (isMelee ? "VIG" : "CON"), atacker);
         __result += bonusDamage;
     }
     return(__result);
 }
Exemple #8
0
        public static void GetChances(PersuasionOptionArgs optionArgs, ref float successChance, ref float critSuccessChance, ref float critFailChance, ref float failChance, float difficultyMultiplier)
        {
            var attrBonus = new CharacterAttributeBonuses(Hero.MainHero.CharacterObject).PersuadeAddition;

            Logger.Log("Bonus " + attrBonus + "% persuation chance from SOC");
            successChance += attrBonus;
            if (successChance > 1)
            {
                attrBonus    -= successChance - 1;
                successChance = 1;
            }
            critSuccessChance = 0;
            if (optionArgs.GivesCriticalSuccess)
            {
                critSuccessChance = successChance;
                successChance     = 0;
            }
            critFailChance = (critFailChance > attrBonus / 2)
                                ? critFailChance - (attrBonus / 2)
                                : 0;
            failChance = 1 - critSuccessChance - successChance - critFailChance;
        }
        public static void Postfix(CharacterAttributeItemVM __instance, Hero hero, CharacterAttributesEnum currAtt, CharacterVM developerVM, Action <CharacterAttributeItemVM> onInpectAttribute, Action <CharacterAttributeItemVM> onAddAttributePoint)
        {
            var bonuses = new CharacterAttributeBonuses(hero.CharacterObject);
            var text    = "";

            switch (currAtt)
            {
            case CharacterAttributesEnum.Vigor:
                text += bonuses.MeleeDamageMultiplier > 0
                        ? "Increases melee damage by " + bonuses.MeleeDamageMultiplier.ToString("P") + "\n"
                        : "";
                text += bonuses.MeleeSpeedMultiplier > 0
                        ? "Increases melee atack speed by " + bonuses.MeleeSpeedMultiplier.ToString("P") + "\n"
                        : "";
                text += bonuses.PositiveMoraleMultiplier > 0
                        ? "Increases morale gain by " + bonuses.PositiveMoraleMultiplier.ToString("P") + "\n"
                        : "";
                break;

            case CharacterAttributesEnum.Control:
                text += bonuses.RangeDamageMultiplier > 0
                        ? "Increases range damage by " + bonuses.RangeDamageMultiplier.ToString("P") + "\n"
                        : "";
                text += bonuses.RangeSpeedMultiplier > 0
                        ? "Increases range atack speed by " + bonuses.RangeSpeedMultiplier.ToString("P") + "\n"
                        : "";
                text += bonuses.NegativeMoraleMultiplier < 0
                        ? "Decrease morale loss by " + (-bonuses.NegativeMoraleMultiplier).ToString("P") + "\n"
                        : "";
                break;

            case CharacterAttributesEnum.Endurance:
                text += bonuses.HPMultiplier > 0
                        ? "Increases HP by " + bonuses.HPMultiplier.ToString("P") + "\n"
                        : "";
                text += bonuses.MoveSpeedMultiplier > 0
                        ? "Increases move speed by " + bonuses.MoveSpeedMultiplier.ToString("P") + "\n"
                        : "";
                break;

            case CharacterAttributesEnum.Cunning:
                text += bonuses.AttributeEffectMultiplier > 0
                        ? "Increases effect of other attributes by " + (bonuses.AttributeEffectMultiplier - 1).ToString("P") + "\n"
                        : "";
                break;

            case CharacterAttributesEnum.Social:
                text += bonuses.PartySizeMultiplier > 0
                        ? "Increases party size limit by " + bonuses.PartySizeMultiplier.ToString("P") + "\n"
                        : "";
                text += bonuses.PersuadeAddition > 0
                        ? "Increases persuade chance by " + bonuses.PersuadeAddition.ToString("P") + "\n"
                        : "";
                text += bonuses.RenownMultiplier > 0
                        ? "Increases renown gain by " + bonuses.RenownMultiplier.ToString("P") + "\n"
                        : "";
                text += bonuses.InfluenceMultiplier > 0
                        ? "Increases influnce gain by " + bonuses.InfluenceMultiplier.ToString("P") + "\n"
                        : "";
                text += bonuses.RenownAddition > 0
                        ? "Increases renown by " + bonuses.RenownAddition.ToString("F2") + " when you meet somebody at first\n"
                        : "";
                break;

            case CharacterAttributesEnum.Intelligence:
                text += bonuses.XPMultiplier > 0
                        ? "Increases learning rate for all skills by " + bonuses.XPMultiplier.ToString("P") + "\n"
                        : "";
                text += bonuses.IncomeMultiplier > 0
                        ? "Increases clan income by " + bonuses.IncomeMultiplier.ToString("P") + "\n"
                        : "";
                text += bonuses.ExpensesMultiplier < 0
                        ? "Decrease clan spendings by " + (-bonuses.ExpensesMultiplier).ToString("P") + "\n"
                        : "";
                break;
            }
            __instance.IncreaseHelpText = text + __instance.IncreaseHelpText;
        }