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); }
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); }
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; }
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; }
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); }
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; }