From 674f8f457eb3397794fb1a5d3708afa6ffa7ad2a Mon Sep 17 00:00:00 2001 From: EstelMatiazi Date: Sun, 10 Nov 2024 20:01:01 -0300 Subject: [PATCH 1/2] implements skill-based poisoning charge limits and weapon coating. --- Data/Scripts/System/Skills/Poisoning.cs | 29 +++++++++++++++++++++---- Info/Scripts/Settings.cs | 4 +++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/Data/Scripts/System/Skills/Poisoning.cs b/Data/Scripts/System/Skills/Poisoning.cs index 985c3ff3..729212e8 100644 --- a/Data/Scripts/System/Skills/Poisoning.cs +++ b/Data/Scripts/System/Skills/Poisoning.cs @@ -1,3 +1,4 @@ +using Server; using System; using Server.Targeting; using Server.Items; @@ -130,6 +131,7 @@ protected override void OnTick() { if ( m_From.CheckTargetSkill( SkillName.Poisoning, m_Target, m_MinSkill, m_MaxSkill ) ) { + bool maxChargesReached = false; if ( m_Target is Food ) { ((Food)m_Target).Poison = m_Poison; @@ -140,11 +142,24 @@ protected override void OnTick() ((BaseBeverage)m_Target).Poison = m_Poison; ((BaseBeverage)m_Target).Poisoner = m_From; } - else if ( m_Target is BaseWeapon ) + else if ( m_Target is BaseWeapon && !MySettings.poisoningCharges) { ((BaseWeapon)m_Target).Poison = m_Poison; ((BaseWeapon)m_Target).PoisonCharges = 18 - (m_Poison.Level * 2); } + else if ( m_Target is BaseWeapon && MySettings.poisoningCharges) + { + // at 125 skill, a weapon can hold 41 poison charges. + int maximumPoisonCharges = (int)(m_From.Skills[SkillName.Poisoning].Value)/3; + ((BaseWeapon)m_Target).Poison = m_Poison; + // every coating adds from poisoning/10 to poisoning/7 charges. At 125 skill that translates to 12 to 17 charges per potion. + int chargesToAdd = Utility.RandomMinMax((int)(m_From.Skills[SkillName.Poisoning].Value)/10,(int)(m_From.Skills[SkillName.Poisoning].Value/7)); + ((BaseWeapon)m_Target).PoisonCharges = ((BaseWeapon)m_Target).PoisonCharges + chargesToAdd > 41 ? 41 : ((BaseWeapon)m_Target).PoisonCharges + chargesToAdd; + if (((BaseWeapon)m_Target).PoisonCharges == maximumPoisonCharges) + { + maxChargesReached = true; + } + } else if ( m_Target is FukiyaDarts ) { ((FukiyaDarts)m_Target).Poison = m_Poison; @@ -156,9 +171,15 @@ protected override void OnTick() ((Shuriken)m_Target).PoisonCharges = Math.Min( 18 - (m_Poison.Level * 2), ((Shuriken)m_Target).UsesRemaining ); } - m_From.SendLocalizedMessage( 1010517 ); // You apply the poison - - Misc.Titles.AwardKarma( m_From, -20, true ); + if(maxChargesReached) + { + m_From.SendMessage(38, "This weapon has as much poison as your skills can handle."); + } + else + { + m_From.SendLocalizedMessage( 1010517 ); // You apply the poison + Misc.Titles.AwardKarma( m_From, -20, true ); + } } else // Failed { diff --git a/Info/Scripts/Settings.cs b/Info/Scripts/Settings.cs index 176bfacc..ba7a2307 100644 --- a/Info/Scripts/Settings.cs +++ b/Info/Scripts/Settings.cs @@ -234,7 +234,9 @@ public static class MySettings public static int S_MinGold = 100; public static int S_MaxGold = 150; - + // this changes how the poisoning skill works. If set to true, then character skill will be taken into account instead of poison + // level to determine the maximum amount of poison charges a weapon can have, as well as how many charges are applied with each dose. + public static bool poisoningCharges = true; /////////////////////////////////////////////////////////////////////////////////////////////// From 3bd4f3d688bfbaf57e2b8241fd8a5c98e47990bc Mon Sep 17 00:00:00 2001 From: EstelMatiazi Date: Mon, 11 Nov 2024 09:16:43 -0300 Subject: [PATCH 2/2] logic fix for maximum poison charges --- Data/Scripts/System/Skills/Poisoning.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Data/Scripts/System/Skills/Poisoning.cs b/Data/Scripts/System/Skills/Poisoning.cs index 729212e8..5c5f2fd8 100644 --- a/Data/Scripts/System/Skills/Poisoning.cs +++ b/Data/Scripts/System/Skills/Poisoning.cs @@ -154,7 +154,7 @@ protected override void OnTick() ((BaseWeapon)m_Target).Poison = m_Poison; // every coating adds from poisoning/10 to poisoning/7 charges. At 125 skill that translates to 12 to 17 charges per potion. int chargesToAdd = Utility.RandomMinMax((int)(m_From.Skills[SkillName.Poisoning].Value)/10,(int)(m_From.Skills[SkillName.Poisoning].Value/7)); - ((BaseWeapon)m_Target).PoisonCharges = ((BaseWeapon)m_Target).PoisonCharges + chargesToAdd > 41 ? 41 : ((BaseWeapon)m_Target).PoisonCharges + chargesToAdd; + ((BaseWeapon)m_Target).PoisonCharges = ((BaseWeapon)m_Target).PoisonCharges + chargesToAdd > maximumPoisonCharges ? maximumPoisonCharges : ((BaseWeapon)m_Target).PoisonCharges + chargesToAdd; if (((BaseWeapon)m_Target).PoisonCharges == maximumPoisonCharges) { maxChargesReached = true;