fix: Fixes poison field duration, cleans up skill calculations and poison calculations (#1582)

### Summary
- [X] Fixes poison field duration
- [X] Adds SA+ poison spell calculations
- [X] Cleans up skill calculations
- [X] Adjusts poison level thresholds to properly reflect OSI
This commit is contained in:
Kamron Batman 2023-11-04 12:32:54 -07:00 • committed by GitHub
parent 54431f05b5
commit 1f04a13f67
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 68 additions and 81 deletions

View file

@ -195,7 +195,7 @@ public abstract partial class BasePotion : Item, ICraftable, ICommodity
public static int EnhancePotions(Mobile m)
{
var EP = AosAttributes.GetValue(m, AosAttribute.EnhancePotions);
var skillBonus = m.Skills.Alchemy.Fixed / 330 * 10;
var skillBonus = (int)(m.Skills.Alchemy.Value * 10 / 33);
if (Core.ML && EP > 50 && m.AccessLevel <= AccessLevel.Player)
{

View file

@ -47,7 +47,7 @@ namespace Server.Items
--weapon.PoisonCharges;
// Infectious strike special move now uses poisoning skill to help determine potency
var maxLevel = Math.Max(attacker.Skills.Poisoning.Fixed / 200, 0);
var maxLevel = Math.Max((int)(attacker.Skills.Poisoning.Value / 20), 0);
if (p.Level > maxLevel)
{
p = Poison.GetPoison(maxLevel);

View file

@ -18,17 +18,15 @@ namespace Server.Items
ClearCurrentAbility(attacker);
defender.SendLocalizedMessage(1112369); // You have been poisoned by a lethal arrow!
int level;
if (attacker.InRange(defender, 2))
{
level = attacker.Skills.Poisoning.Fixed / 2 switch
level = (attacker.Skills.Archery.Value + attacker.Skills.Poisoning.Value) switch
{
>= 1000 => 3,
> 850 => 2,
> 650 => 1,
> 199.8 => 3,
> 170.2 => 2,
> 130.2 => 1,
_ => 0
};
}
@ -37,6 +35,7 @@ namespace Server.Items
level = 0;
}
defender.SendLocalizedMessage(1112369); // You have been poisoned by a lethal arrow!
defender.ApplyPoison(attacker, Poison.GetPoison(level));
defender.FixedParticles(0x374A, 10, 15, 5021, EffectLayer.Waist);