Skip to content
This repository has been archived by the owner on Oct 21, 2023. It is now read-only.

Commit

Permalink
bow weights
Browse files Browse the repository at this point in the history
  • Loading branch information
namidaka authored and namidaka committed Aug 6, 2023
1 parent 302ac19 commit bf788a0
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 14 deletions.
27 changes: 23 additions & 4 deletions src/Module.Client/DataExport/ItemExporter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using Newtonsoft.Json.Serialization;
using TaleWorlds.CampaignSystem.Extensions;
using TaleWorlds.Core;
using TaleWorlds.Core.ViewModelCollection;
using TaleWorlds.InputSystem;
using TaleWorlds.Library;
using TaleWorlds.MountAndBlade;
Expand Down Expand Up @@ -899,6 +900,11 @@ or ItemObject.ItemTypeEnum.HandArmor
ModifyNodeAttribute(node1, "weight",
_ => ModifyShieldWeight(nonHeirloomNode, node1, type).ToString(CultureInfo.InvariantCulture));
}
if (type is ItemObject.ItemTypeEnum.Bow)
{
ModifyNodeAttribute(node1, "weight",
_ => ModifyBowWeight(nonHeirloomNode, node1, type, heirloomLevel).ToString(CultureInfo.InvariantCulture));
}
}
}

Expand Down Expand Up @@ -928,14 +934,27 @@ private static float ModifyArmorWeight(XmlNode nonHeirloomNode, XmlNode node, It

private static float ModifyShieldWeight(XmlNode nonHeirloomNode, XmlNode node, ItemObject.ItemTypeEnum type)
{
XmlNode armorNode = nonHeirloomNode.SelectNodes("ItemComponent/Weapon")!.Cast<XmlNode>().First();
XmlNode shieldNode = nonHeirloomNode.SelectNodes("ItemComponent/Weapon")!.Cast<XmlNode>().First();
float shieldWeightPoints =
float.Parse(armorNode.Attributes!["hit_points"].Value)
* float.Parse(armorNode.Attributes!["weapon_length"].Value)
* float.Parse(armorNode.Attributes!["weapon_length"].Value);
float.Parse(shieldNode.Attributes!["hit_points"].Value)
* float.Parse(shieldNode.Attributes!["weapon_length"].Value)
* float.Parse(shieldNode.Attributes!["weapon_length"].Value);
return shieldWeightPoints / 800000f;
}

private static float ModifyBowWeight(XmlNode nonHeirloomNode, XmlNode node, ItemObject.ItemTypeEnum type, int heirloomLevel)
{
XmlNode weaponNode = nonHeirloomNode.SelectNodes("ItemComponent/Weapon")!.Cast<XmlNode>().First();
float tier = CrpgItemValueModel.ComputeBowTier(int.Parse(weaponNode.Attributes!["thrust_damage"].Value),
int.Parse(weaponNode.Attributes!["speed_rating"].Value),
int.Parse(weaponNode.Attributes!["missile_speed"].Value),
int.Parse(weaponNode.Attributes!["thrust_speed"].Value),
int.Parse(weaponNode.Attributes!["accuracy"].Value),
weaponNode.Attributes!["item_usage"].Value == "long_bow",
heirloomLevel);
return tier * int.Parse(weaponNode.Attributes!["thrust_damage"].Value) / 100f;
}

private static void ModifyChildHeirloomNodesAttribute(
XmlNode nonHeirloomNode,
XmlNode parentNode,
Expand Down
23 changes: 13 additions & 10 deletions src/Module.Server/Common/Models/CrpgItemValueModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,18 @@ public CrpgItemValueModel(CrpgConstants constants)
[ItemObject.ItemTypeEnum.Bolts] = (4500, ItemPriceCoeffs),
[ItemObject.ItemTypeEnum.Banner] = (500, ItemPriceCoeffs),
};
public static float ComputeBowTier(int damage, int reloadSpeed, int missileSpeed, int aimSpeed, int accuracy, bool isLongBow, float heirloomLevel)
{
float scaler = 1.47682557092106f;
return (float)(Math.Pow(damage, 2.5) / 1335f
* Math.Pow(reloadSpeed, 0.5) / 10f
* Math.Pow(missileSpeed, 0.5f) / 10f
* Math.Pow(accuracy, 1.5f) / 100f
* Math.Pow(aimSpeed / 10f, 1.5f) / 10f
* (isLongBow ? 0.668f : 0.84f)
/ scaler)
/ (1 + heirloomLevel / 10f);
}

public override float CalculateTier(ItemObject item)
{
Expand Down Expand Up @@ -377,7 +389,6 @@ private float CalculateThrownWeaponTier(WeaponComponent weaponComponent)
private float CalculateRangedWeaponTier(WeaponComponent weaponComponent)
{
WeaponComponentData weapon = weaponComponent.Weapons[0];
float scaler = 1.47682557092106f;
float heirloomLevel = ItemToHeirloomLevel(weaponComponent.Item);
if (weaponComponent.Item is { ItemType: ItemObject.ItemTypeEnum.Crossbow })
{
Expand All @@ -395,15 +406,7 @@ private float CalculateRangedWeaponTier(WeaponComponent weaponComponent)
return crossbowTier * crossbowTier / 10f;
}

float bowTier = (float)(Math.Pow(weapon.ThrustDamage, 2.5) / 1335f
* Math.Pow(weapon.SwingSpeed, 0.5) / 10f
* Math.Pow(weapon.MissileSpeed, 0.5f) / 10f
* Math.Pow(weapon.Accuracy, 1.5f) / 100f
* Math.Pow(weapon.ThrustSpeed / 10f, 1.5f) / 10f
* (weapon.ItemUsage == "long_bow" ? 0.668f : 0.84f)
/ scaler);

bowTier /= (float)Math.Pow(1 + heirloomLevel / 10f, 1f);
float bowTier = ComputeBowTier(weapon.ThrustDamage, weapon.SwingSpeed,weapon.MissileSpeed, weapon.ThrustSpeed, weapon.Accuracy, weapon.ItemUsage == "long_bow", heirloomLevel);
return bowTier * bowTier / 10f;
}

Expand Down

0 comments on commit bf788a0

Please sign in to comment.