From 3405d088ec87abd9b161d7745510d806c459e4f7 Mon Sep 17 00:00:00 2001 From: Logan Perkins Date: Sun, 6 Oct 2024 10:57:49 -0700 Subject: [PATCH 01/27] Rename FLashFreeze to FlashFreeze to match file on disk --- SolastaUnfinishedBusiness/Properties/Resources.Designer.cs | 4 ++-- SolastaUnfinishedBusiness/Properties/Resources.resx | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs index 5823c8685d..fb40cdc08d 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs +++ b/SolastaUnfinishedBusiness/Properties/Resources.Designer.cs @@ -1552,9 +1552,9 @@ public static byte[] FlamingBolt { /// /// Looks up a localized resource of type System.Byte[]. /// - public static byte[] FLashFreeze { + public static byte[] FlashFreeze { get { - object obj = ResourceManager.GetObject("FLashFreeze", resourceCulture); + object obj = ResourceManager.GetObject("FlashFreeze", resourceCulture); return ((byte[])(obj)); } } diff --git a/SolastaUnfinishedBusiness/Properties/Resources.resx b/SolastaUnfinishedBusiness/Properties/Resources.resx index 8ae461c47b..84f6c95c1e 100644 --- a/SolastaUnfinishedBusiness/Properties/Resources.resx +++ b/SolastaUnfinishedBusiness/Properties/Resources.resx @@ -886,8 +886,8 @@ PublicKeyToken=b77a5c561934e089 - - ../Resources/Spells/FLashFreeze.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, + + ../Resources/Spells/FlashFreeze.png;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 @@ -2830,4 +2830,4 @@ PublicKeyToken=b03f5f7f11d50a3a - \ No newline at end of file + From 56b696e9af46ec416435c7c0db69b6ab5be9e691 Mon Sep 17 00:00:00 2001 From: Logan Perkins Date: Sun, 6 Oct 2024 10:58:28 -0700 Subject: [PATCH 02/27] Capitalize Wyrmkin on disk to match resource name --- .../Resources/Races/{wyrmkin.png => Wyrmkin.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename SolastaUnfinishedBusiness/Resources/Races/{wyrmkin.png => Wyrmkin.png} (100%) diff --git a/SolastaUnfinishedBusiness/Resources/Races/wyrmkin.png b/SolastaUnfinishedBusiness/Resources/Races/Wyrmkin.png similarity index 100% rename from SolastaUnfinishedBusiness/Resources/Races/wyrmkin.png rename to SolastaUnfinishedBusiness/Resources/Races/Wyrmkin.png From f96b645433b21ec91f34eba2d6c3923d3f304ff3 Mon Sep 17 00:00:00 2001 From: Logan Perkins Date: Sun, 6 Oct 2024 11:01:11 -0700 Subject: [PATCH 03/27] Capitalize Deadeye on disk to match Deadeye in resources. --- ...trationIcon.png => DeadeyeConcentrationIcon.png} | Bin .../Powers/{DeadEyeIcon.png => DeadeyeIcon.png} | Bin 2 files changed, 0 insertions(+), 0 deletions(-) rename SolastaUnfinishedBusiness/Resources/Powers/{DeadEyeConcentrationIcon.png => DeadeyeConcentrationIcon.png} (100%) rename SolastaUnfinishedBusiness/Resources/Powers/{DeadEyeIcon.png => DeadeyeIcon.png} (100%) diff --git a/SolastaUnfinishedBusiness/Resources/Powers/DeadEyeConcentrationIcon.png b/SolastaUnfinishedBusiness/Resources/Powers/DeadeyeConcentrationIcon.png similarity index 100% rename from SolastaUnfinishedBusiness/Resources/Powers/DeadEyeConcentrationIcon.png rename to SolastaUnfinishedBusiness/Resources/Powers/DeadeyeConcentrationIcon.png diff --git a/SolastaUnfinishedBusiness/Resources/Powers/DeadEyeIcon.png b/SolastaUnfinishedBusiness/Resources/Powers/DeadeyeIcon.png similarity index 100% rename from SolastaUnfinishedBusiness/Resources/Powers/DeadEyeIcon.png rename to SolastaUnfinishedBusiness/Resources/Powers/DeadeyeIcon.png From 5c7d791ffa8d1478e88718e87e484476b4790d5f Mon Sep 17 00:00:00 2001 From: Logan Perkins Date: Sun, 6 Oct 2024 11:02:57 -0700 Subject: [PATCH 04/27] Capitalize ThunderGauntlet on disk to match Resources. --- ...mThundergauntlet.png => ItemThunderGauntlet.png} | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename SolastaUnfinishedBusiness/Resources/Items/{ItemThundergauntlet.png => ItemThunderGauntlet.png} (100%) diff --git a/SolastaUnfinishedBusiness/Resources/Items/ItemThundergauntlet.png b/SolastaUnfinishedBusiness/Resources/Items/ItemThunderGauntlet.png similarity index 100% rename from SolastaUnfinishedBusiness/Resources/Items/ItemThundergauntlet.png rename to SolastaUnfinishedBusiness/Resources/Items/ItemThunderGauntlet.png From fb1886d4ddb13b56664a96819071b1e33bf78362 Mon Sep 17 00:00:00 2001 From: Dovel Date: Sun, 6 Oct 2024 21:54:33 +0300 Subject: [PATCH 05/27] update russian translation --- .../Translations/ru/Feats/ClassFeats-ru.txt | 2 +- .../Translations/ru/Feats/MeleeCombat-ru.txt | 2 +- SolastaUnfinishedBusiness/Translations/ru/Races/Wyrmkin-ru.txt | 2 +- .../Translations/ru/SubClasses/OathOfDread-ru.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/ru/Feats/ClassFeats-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Feats/ClassFeats-ru.txt index 4cbf22e955..a618142aea 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Feats/ClassFeats-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Feats/ClassFeats-ru.txt @@ -82,7 +82,7 @@ Reaction/&CustomReactionSecondChanceDescription=Существо пытаетс Reaction/&CustomReactionSecondChanceReactDescription=Принудительный переброс. Reaction/&CustomReactionSecondChanceReactTitle=Использовать Reaction/&CustomReactionSecondChanceTitle=Второй шанс -Reaction/&ReactionAttackExploiterDescription={0} был поражен атакой. Вы можете использовать реакцию, чтобы провести атаку оружием ближнего боя против него. +Reaction/&ReactionAttackExploiterDescription={0} был атакован. Реакцией вы можете совершить по нему рукопашную атаку оружием. Reaction/&ReactionAttackExploiterReactDescription=Используйте реакцию для атаки. Reaction/&ReactionAttackExploiterReactTitle=Атака Reaction/&ReactionAttackExploiterTitle=Оппортунист diff --git a/SolastaUnfinishedBusiness/Translations/ru/Feats/MeleeCombat-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Feats/MeleeCombat-ru.txt index 1f2ed39c8f..8145adf035 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Feats/MeleeCombat-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Feats/MeleeCombat-ru.txt @@ -80,7 +80,7 @@ Feedback/&AdditionalDamagePiercerFormat=Пронзатель! Feedback/&AdditionalDamagePiercerLine={0} критически пронзает {1} Feedback/&AdditionalDamageSpearMasteryFormat=Мастер владения копьём! Feedback/&AdditionalDamageSpearMasteryLine={0} подготовил копьё и наносит дополнительные {2} урона {1}! -Reaction/&ReactionAttackOldTacticsDescription={0} встал. Вы можете использовать реакцию, чтобы провести против него атаку оружием ближнего боя. +Reaction/&ReactionAttackOldTacticsDescription={0} встаёт. Реакцией вы можете совершить по нему рукопашную атаку оружием. Reaction/&ReactionAttackOldTacticsReactDescription=Используйте реакцию для атаки. Reaction/&ReactionAttackOldTacticsReactTitle=Атака Reaction/&ReactionAttackOldTacticsTitle=Старая тактика diff --git a/SolastaUnfinishedBusiness/Translations/ru/Races/Wyrmkin-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Races/Wyrmkin-ru.txt index f98822a6b0..da4553c8fb 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Races/Wyrmkin-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Races/Wyrmkin-ru.txt @@ -40,7 +40,7 @@ Race/&RaceHighWyrmkinDescription=Высшие вирмородные произ Race/&RaceHighWyrmkinTitle=Высший вирмородный Race/&RaceWyrmkinDescription=Вирмородные - более крупные родственники Драконорождённых, произошедшие от другой расы драконов. В отличие от драконорождённых, они могут видеть в темноте. Race/&RaceWyrmkinTitle=Вирмородный -Reaction/&ReactionAttackReactiveRetributionDescription={0} нанес вам удар. Вы можете использовать свою реакцию, чтобы нанести ему удар. +Reaction/&ReactionAttackReactiveRetributionDescription={0} атаковал вас. Реакцией вы можете совершить по нему атаку. Reaction/&ReactionAttackReactiveRetributionReactDescription=Воспользуйтесь реакцией для атаки. Reaction/&ReactionAttackReactiveRetributionReactTitle=Атака Reaction/&ReactionAttackReactiveRetributionTitle=Реактивное возмездие diff --git a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/OathOfDread-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/OathOfDread-ru.txt index 0fd2c84dd9..dddeaabab7 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/SubClasses/OathOfDread-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/SubClasses/OathOfDread-ru.txt @@ -20,7 +20,7 @@ Feature/&PowerOathOfDreadDreadfulPresenceDescription=Действием вы м Feature/&PowerOathOfDreadDreadfulPresenceTitle=Божественный канал: Ужасающее присутствие Feedback/&AdditionalDamageAspectOfDreadFormat=Аспект ужаса! Feedback/&AdditionalDamageAspectOfDreadLine={0} совершает атаку аспекта ужаса по {1} (+{2}) -Reaction/&ReactionAttackHarrowingCrusadeDescription={0} нанес вам удар. Вы можете использовать свою реакцию, чтобы провести по нему атаку оружием ближнего боя. +Reaction/&ReactionAttackHarrowingCrusadeDescription={0} атаковал вас. Реакцией вы можете совершить по нему рукопашную атаку оружием. Reaction/&ReactionAttackHarrowingCrusadeReactDescription=Используйте свою реакцию для атаки. Reaction/&ReactionAttackHarrowingCrusadeReactTitle=Атака Reaction/&ReactionAttackHarrowingCrusadeTitle=Мучительный крестовый поход From 2c2ac3c0827e1933c95602e4d2780163f424bb45 Mon Sep 17 00:00:00 2001 From: Logan Perkins Date: Sun, 6 Oct 2024 12:13:33 -0700 Subject: [PATCH 06/27] Use renamed FlashFreeze not FLashFreeze --- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs index ee28962b1d..aa39454add 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel06.cs @@ -748,7 +748,7 @@ internal static SpellDefinition BuildFlashFreeze() var spell = SpellDefinitionBuilder .Create(NAME) - .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.FLashFreeze, 128)) + .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.FlashFreeze, 128)) .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolEvocation) .SetSpellLevel(6) .SetCastingTime(ActivationTime.Action) From 120906abf1c067838dfa12997a61e314adf8a24c Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Mon, 7 Oct 2024 15:26:22 +0300 Subject: [PATCH 07/27] process location change only if position or size has changed - this fixes Spike Growth and similar spells triggering twice on last tile of movement --- .../GameLocationPositioningManagerPatcher.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationPositioningManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationPositioningManagerPatcher.cs index 8f4fc398fb..72704295b0 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationPositioningManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationPositioningManagerPatcher.cs @@ -30,5 +30,19 @@ public static IEnumerable Transpiler([NotNull] IEnumerable Date: Mon, 7 Oct 2024 17:00:04 +0300 Subject: [PATCH 08/27] consider grappled target pushed while moved during grapple --- SolastaUnfinishedBusiness/Models/GrappleContext.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SolastaUnfinishedBusiness/Models/GrappleContext.cs b/SolastaUnfinishedBusiness/Models/GrappleContext.cs index 87de93aed6..be62789522 100644 --- a/SolastaUnfinishedBusiness/Models/GrappleContext.cs +++ b/SolastaUnfinishedBusiness/Models/GrappleContext.cs @@ -544,8 +544,10 @@ public void MoveStepStarted(GameLocationCharacter mover, int3 source, int3 desti if (canTeleport) { target.StartTeleportTo(targetDestinationPosition, mover.Orientation, false); + target.Pushed = true; target.FinishMoveTo(targetDestinationPosition, mover.Orientation); target.StopMoving(mover.Orientation); + target.Pushed = false; var isLastStep = GetDistanceFromCharacter(mover, mover.DestinationPosition) <= 1; From 49b45de32a6a87b9129b4890b48127d67965c399 Mon Sep 17 00:00:00 2001 From: EnderWiggin Date: Mon, 7 Oct 2024 17:21:12 +0300 Subject: [PATCH 09/27] prevent grappled target from falling while grappled --- SolastaUnfinishedBusiness/Models/GrappleContext.cs | 5 +++++ SolastaUnfinishedBusiness/Translations/en/Others-en.txt | 1 + 2 files changed, 6 insertions(+) diff --git a/SolastaUnfinishedBusiness/Models/GrappleContext.cs b/SolastaUnfinishedBusiness/Models/GrappleContext.cs index be62789522..654b556453 100644 --- a/SolastaUnfinishedBusiness/Models/GrappleContext.cs +++ b/SolastaUnfinishedBusiness/Models/GrappleContext.cs @@ -97,6 +97,11 @@ internal static void LateLoad() .SetBrain(battlePackage, true) .SetFeatures( ActionAffinityGrappled, + //prevent grappled target from falling while grappled + FeatureDefinitionMoveModeBuilder.Create($"{ConditionGrappleTargetName}Flying") + .SetGuiPresentation(Category.Feature) + .SetMode(MoveMode.Fly, 0) + .AddToDB(), ActionAffinityConditionRestrained, MovementAffinityConditionRestrained) .AddCustomSubFeatures(new OnConditionAddedOrRemovedConditionGrappleTarget()) diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 84af0f0f95..cb97800830 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -92,6 +92,7 @@ Feature/&AttributeModifierDazzledTitle=Dazzled Feature/&AttributeModifierMonkAbundantKiDescription=Add half your proficiency bonus (rounded down) to your Ki Points pool. Feature/&AttributeModifierMonkAbundantKiTitle=Abundant Ki Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n +Feature/&ConditionGrappleTargetFlyingDescription=Follows grappler Feature/&EnhancedIndomitableResistanceDescription=If you fail a saving throw, you can reroll it with a bonus equal to your Fighter level. If you do so, you must use the new roll, and you can't use this feature again until you finish a long rest. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Expanded Spells From eeb121e6940ac995d5af391de0d00d5e381efd4c Mon Sep 17 00:00:00 2001 From: ThyWoof Date: Sat, 12 Oct 2024 07:20:03 -0700 Subject: [PATCH 10/27] fix Green-Flame blade additional damage progression - fix #4982 --- SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index f09f164d42..f50bc4c63a 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -1078,6 +1078,8 @@ internal static SpellDefinition BuildResonatingStrike() .Build()) .AddToDB(); + powerResonatingStrikeDamage.EffectDescription.EffectAdvancement.additionalDicePerIncrement = 1; + var additionalDamageResonatingStrike = FeatureDefinitionAdditionalDamageBuilder .Create("AdditionalDamageResonatingStrike") .SetGuiPresentationNoContent(true) From fa70493633c49eb7d539eddec8860d3fcace8853 Mon Sep 17 00:00:00 2001 From: ThyWoof Date: Sat, 12 Oct 2024 07:25:35 -0700 Subject: [PATCH 11/27] improve Grapple to only roll a context check if an enemy - fix #4988 --- SolastaUnfinishedBusiness/Models/GrappleContext.cs | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/GrappleContext.cs b/SolastaUnfinishedBusiness/Models/GrappleContext.cs index 654b556453..cac00e0c8c 100644 --- a/SolastaUnfinishedBusiness/Models/GrappleContext.cs +++ b/SolastaUnfinishedBusiness/Models/GrappleContext.cs @@ -382,11 +382,17 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, attacker.BurnOneMainAttack(); - yield return TryAlterOutcomeAttributeCheck.ResolveRolls( - attacker, defender, ActionDefinitions.Id.NoAction, abilityCheckData); + var success = true; - var success = - abilityCheckData.AbilityCheckRollOutcome is RollOutcome.Success or RollOutcome.CriticalSuccess; + // only roll a check if an enemy + if (defender.IsOppositeSide(attacker.Side)) + { + yield return TryAlterOutcomeAttributeCheck.ResolveRolls( + attacker, defender, ActionDefinitions.Id.NoAction, abilityCheckData); + + success = + abilityCheckData.AbilityCheckRollOutcome is RollOutcome.Success or RollOutcome.CriticalSuccess; + } if (!success) { From 9e6d9b1def26d9b5b78c074870b841963acd65ab Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 12 Oct 2024 17:05:29 -0700 Subject: [PATCH 12/27] fix Circle of Wildfire enhanced bond and Wizard War Magic power surge --- .../Subclasses/CircleOfTheWildfire.cs | 43 ++++++++----------- .../Subclasses/WizardWarMagic.cs | 7 ++- 2 files changed, 24 insertions(+), 26 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index bfeb50a3e6..7b46368a55 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -750,25 +750,31 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( bool firstTarget, bool criticalHit) { - if (!HasSpirit(attacker.Guid)) + if (!HasSpirit(attacker.Guid) || !firstTarget) { yield break; } - var firstDamageForm = actualEffectForms.FirstOrDefault(x => + var fireDamageForm = actualEffectForms.FirstOrDefault(x => x.FormType == EffectForm.EffectFormType.Damage && x.DamageForm.DamageType == DamageTypeFire); - if (firstDamageForm == null) + if (fireDamageForm == null) { yield break; } - var index = actualEffectForms.IndexOf(firstDamageForm); - var newDamageForm = EffectFormBuilder.DamageForm(firstDamageForm.DamageForm.DamageType, 1, DieType.D8); + var index = actualEffectForms.IndexOf(fireDamageForm); + var newDamageForm = EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetDamageForm(DamageTypeFire, 1, DieType.D12) + .Build(); newDamageForm.DamageForm.IgnoreCriticalDoubleDice = true; + newDamageForm.DamageForm.IgnoreSpellAdvancementDamageDice = true; + attacker.RulesetCharacter.LogCharacterUsedFeature(featureEnhancedBond); actualEffectForms.Insert(index + 1, newDamageForm); } @@ -784,13 +790,10 @@ public IEnumerator OnMagicEffectFinishedByMe( yield break; } - foreach (var rulesetTarget in targets.Select(target => target.RulesetActor)) + foreach (var rulesetCharacter in targets + .Where(x => x.RulesetCharacter != null) + .Select(x => x.RulesetCharacter)) { - if (rulesetTarget is not RulesetCharacter rulesetCharacter) - { - continue; - } - rulesetCharacter.HealingReceived -= HealingReceived; } } @@ -807,25 +810,17 @@ public IEnumerator OnMagicEffectInitiatedByMe( } var effectForms = activeEffect.EffectDescription.EffectForms; - var hasFireDamageForm = effectForms.Any(x => - x.FormType == EffectForm.EffectFormType.Damage && - x.DamageForm.DamageType == DamageTypeFire); - var hasHealingForm = effectForms.Any(x => - x.FormType == EffectForm.EffectFormType.Healing); + var hasHealingForm = effectForms.Any(x => x.FormType == EffectForm.EffectFormType.Healing); - if (HasSpirit(attacker.Guid) && - (hasFireDamageForm || hasHealingForm)) + if (HasSpirit(attacker.Guid) && hasHealingForm) { attacker.RulesetCharacter.LogCharacterUsedFeature(featureEnhancedBond); } - foreach (var rulesetTarget in targets.Select(target => target.RulesetActor)) + foreach (var rulesetCharacter in targets + .Where(x => x.RulesetCharacter != null) + .Select(x => x.RulesetCharacter)) { - if (rulesetTarget is not RulesetCharacter rulesetCharacter) - { - continue; - } - rulesetCharacter.HealingReceived += HealingReceived; } } diff --git a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs index b57dd0348a..f14ca797e7 100644 --- a/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/WizardWarMagic.cs @@ -431,8 +431,11 @@ private void HandlePowerSurge(GameLocationCharacter attacker, List a var index = actualEffectForms.IndexOf(damageForm); var classLevel = rulesetAttacker.GetClassLevel(CharacterClassDefinitions.Wizard); - var effectForm = - EffectFormBuilder.DamageForm(DamageTypeForce, 0, DieType.D1, classLevel); + var effectForm = EffectFormBuilder + .Create() + .HasSavingThrow(EffectSavingThrowType.Negates) + .SetDamageForm(DamageTypeForce, 0, DieType.D1, classLevel) + .Build(); actualEffectForms.Insert(index + 1, effectForm); } From c210579cb9227c2d974924c3d050899263079552 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 12 Oct 2024 17:05:52 -0700 Subject: [PATCH 13/27] consistency --- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs | 6 +++--- SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs index d3cb9e29b2..185e15f6e4 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel03.cs @@ -1356,9 +1356,9 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( yield break; } - var pos = actualEffectForms.FindIndex(x => x.FormType == EffectForm.EffectFormType.Damage); + var index = actualEffectForms.FindIndex(x => x.FormType == EffectForm.EffectFormType.Damage); - if (pos < 0) + if (index < 0) { yield break; } @@ -1368,7 +1368,7 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( effectForm.DamageForm.IgnoreCriticalDoubleDice = true; - actualEffectForms.Insert(pos + 1, effectForm); + actualEffectForms.Insert(index + 1, effectForm); } public IEnumerator OnPhysicalAttackFinishedByMe( diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs b/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs index ef81cbc909..6661be91e5 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerLightBearer.cs @@ -390,9 +390,9 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( rulesetDefender.RemoveCondition(activeCondition); // add additional radiant damage form - var pos = actualEffectForms.FindIndex(x => x.FormType == EffectForm.EffectFormType.Damage); + var index = actualEffectForms.FindIndex(x => x.FormType == EffectForm.EffectFormType.Damage); - if (pos < 0) + if (index < 0) { yield break; } @@ -402,7 +402,7 @@ public IEnumerator OnPhysicalAttackBeforeHitConfirmedOnEnemy( effectForm.DamageForm.IgnoreCriticalDoubleDice = true; - actualEffectForms.Insert(pos + 1, effectForm); + actualEffectForms.Insert(index + 1, effectForm); } } From c4fa59d09932eb820e42ac3c4747df17568235e9 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 12 Oct 2024 17:47:51 -0700 Subject: [PATCH 14/27] update translations --- SolastaUnfinishedBusiness/Translations/de/Others-de.txt | 2 ++ SolastaUnfinishedBusiness/Translations/de/Settings-de.txt | 1 + SolastaUnfinishedBusiness/Translations/en/Others-en.txt | 1 + SolastaUnfinishedBusiness/Translations/en/Settings-en.txt | 1 + SolastaUnfinishedBusiness/Translations/es/Others-es.txt | 2 ++ SolastaUnfinishedBusiness/Translations/es/Settings-es.txt | 1 + SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt | 2 ++ SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt | 1 + SolastaUnfinishedBusiness/Translations/it/Others-it.txt | 2 ++ SolastaUnfinishedBusiness/Translations/it/Settings-it.txt | 1 + SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt | 2 ++ SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt | 1 + SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt | 2 ++ SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt | 1 + SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt | 2 ++ SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt | 1 + SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt | 2 ++ SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt | 1 + SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt | 2 ++ SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt | 1 + 20 files changed, 29 insertions(+) diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 1502630890..ad30bcb83c 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -92,6 +92,8 @@ Feature/&AttributeModifierDazzledTitle=Geblendet Feature/&AttributeModifierMonkAbundantKiDescription=Fügen Sie Ihrem Ki-Punkte-Pool die Hälfte Ihres Kompetenzbonus (abgerundet) hinzu. Feature/&AttributeModifierMonkAbundantKiTitle=Reichlich Ki Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n +Feature/&ConditionGrappleTargetFlyingDescription=Folgt Grappler +Feature/&ConditionGrappleTargetFlyingTitle=Fliegen Feature/&EnhancedIndomitableResistanceDescription=Wenn dir ein Rettungswurf misslingt, kannst du ihn mit einem Bonus wiederholen, der deiner Kämpferstufe entspricht. Wenn du das tust, musst du den neuen Wurf verwenden und kannst diese Funktion nicht erneut verwenden, bis du eine lange Pause beendet hast. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Erweiterte Zauber diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index dbaa5f3bf6..15cd376751 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -19,6 +19,7 @@ ModUi/&Advanced=Erweitert: [Neusta ModUi/&AdvancedHelp=• ACHTUNG: Diese Einstellungen erfordern, dass der Player diesen Mod installiert hat ModUi/&AllItemInDm=Alle Artikel in DM ModUi/&AllRecipesInDm=Alle Rezepte in DM +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Verbündete führen in einer Grapple-Interaktion keine Kontextwürfe aus ModUi/&AllowAllPlayersOnNarrativeSequences=+ Alle Spieler in Erzählsequenzen zulassen ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Erlaubt Verbündeten, Ranger GloomStalker in natürlicher Dunkelheit wahrzunehmen ModUi/&AllowAnyClassToWearSylvanArmor=Erlaube jeder Klasse, Sylvan-Rüstung oder Lichtbringer-Kleidung zu tragen diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index cb97800830..269db8ecce 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -93,6 +93,7 @@ Feature/&AttributeModifierMonkAbundantKiDescription=Add half your proficiency bo Feature/&AttributeModifierMonkAbundantKiTitle=Abundant Ki Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n Feature/&ConditionGrappleTargetFlyingDescription=Follows grappler +Feature/&ConditionGrappleTargetFlyingTitle=Flying Feature/&EnhancedIndomitableResistanceDescription=If you fail a saving throw, you can reroll it with a bonus equal to your Fighter level. If you do so, you must use the new roll, and you can't use this feature again until you finish a long rest. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Expanded Spells diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 8d1e7f1b3a..020dcb49f1 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -19,6 +19,7 @@ ModUi/&Advanced=Advanced: [Require ModUi/&AdvancedHelp=• ATTENTION: These settings will require the player to have this mod installed ModUi/&AllItemInDm=All items in DM ModUi/&AllRecipesInDm=All recipes in DM +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Allies don't resolve context rolls in a grapple interaction ModUi/&AllowAllPlayersOnNarrativeSequences=+ Allow all players on narrative sequences ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Allow allies to perceive Ranger GloomStalker when in natural darkness ModUi/&AllowAnyClassToWearSylvanArmor=Allow any class to wear Sylvan Armor or Lightbringer Clothes diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 44b311111b..7ca2ada1a1 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -92,6 +92,8 @@ Feature/&AttributeModifierDazzledTitle=Deslumbrado Feature/&AttributeModifierMonkAbundantKiDescription=Añade la mitad de tu bonificación de competencia (redondeada hacia abajo) a tu reserva de puntos Ki. Feature/&AttributeModifierMonkAbundantKiTitle=Ki abundante Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n +Feature/&ConditionGrappleTargetFlyingDescription=Sigue al luchador +Feature/&ConditionGrappleTargetFlyingTitle=Vuelo Feature/&EnhancedIndomitableResistanceDescription=Si fallas una tirada de salvación, puedes repetirla con una bonificación igual a tu nivel de luchador. Si lo haces, debes usar la nueva tirada y no puedes volver a usar esta característica hasta que termines un descanso prolongado. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Hechizos ampliados diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index f2879e8593..1c5439a98b 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -19,6 +19,7 @@ ModUi/&Advanced=Avanzado: [Requier ModUi/&AdvancedHelp=• ATENCIÓN: Esta configuración requerirá que el reproductor tenga instalado este mod. ModUi/&AllItemInDm=Todos los artículos en DM ModUi/&AllRecipesInDm=Todas las recetas en DM. +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Los aliados no resuelven las tiradas de contexto en una interacción de agarre ModUi/&AllowAllPlayersOnNarrativeSequences=+ Permitir a todos los jugadores en secuencias narrativas ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que los aliados perciban a Ranger GloomStalker cuando se encuentran en oscuridad natural ModUi/&AllowAnyClassToWearSylvanArmor=Permitir que cualquier clase use Armadura Sylvan o Ropa de Iluminador diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index baada37ec1..aa1426692e 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -92,6 +92,8 @@ Feature/&AttributeModifierDazzledTitle=Ébloui Feature/&AttributeModifierMonkAbundantKiDescription=Ajoutez la moitié de votre bonus de maîtrise (arrondi à l'inférieur) à votre réserve de points Ki. Feature/&AttributeModifierMonkAbundantKiTitle=Ki abondant Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n +Feature/&ConditionGrappleTargetFlyingDescription=Suivre le grappler +Feature/&ConditionGrappleTargetFlyingTitle=Vol Feature/&EnhancedIndomitableResistanceDescription=Si vous ratez un jet de sauvegarde, vous pouvez le relancer avec un bonus égal à votre niveau de Combattant. Dans ce cas, vous devez utiliser le nouveau jet et vous ne pouvez pas utiliser cette fonction à nouveau avant d'avoir terminé un repos long. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Sorts étendus diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 1a5eeaae58..ae407d602f 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -19,6 +19,7 @@ ModUi/&Advanced=Avancé : [Néces ModUi/&AdvancedHelp=• ATTENTION : Ces paramètres nécessiteront que le joueur ait installé ce mod. ModUi/&AllItemInDm=Tous les articles en DM ModUi/&AllRecipesInDm=Toutes les recettes en DM +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Les alliés ne résolvent pas les jets de contexte dans une interaction de lutte ModUi/&AllowAllPlayersOnNarrativeSequences=+ Autoriser tous les joueurs sur les séquences narratives ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permettre aux alliés de percevoir Ranger GloomStalker lorsqu'ils sont dans l'obscurité naturelle ModUi/&AllowAnyClassToWearSylvanArmor=Autoriser n'importe quelle classe à porter une armure sylvestre ou des vêtements de porteur de lumière diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 5d9a23b965..605b77dfcf 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -92,6 +92,8 @@ Feature/&AttributeModifierDazzledTitle=Abbagliato Feature/&AttributeModifierMonkAbundantKiDescription=Aggiungi metà del tuo bonus di competenza (arrotondato per difetto) al tuo pool di Punti Ki. Feature/&AttributeModifierMonkAbundantKiTitle=Ki abbondante Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n +Feature/&ConditionGrappleTargetFlyingDescription=Segue il lottatore +Feature/&ConditionGrappleTargetFlyingTitle=Volare Feature/&EnhancedIndomitableResistanceDescription=Se fallisci un tiro salvezza, puoi rilanciarlo con un bonus pari al tuo livello da Guerriero. Se lo fai, devi usare il nuovo tiro e non puoi usare di nuovo questa caratteristica finché non finisci un riposo lungo. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Incantesimi espansi diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 885fdde801..35b0ce5414 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -19,6 +19,7 @@ ModUi/&Advanced=Avanzate: [Richied ModUi/&AdvancedHelp=• ATTENZIONE: Queste impostazioni richiederanno che il giocatore abbia installato questa mod ModUi/&AllItemInDm=Tutti gli articoli in DM ModUi/&AllRecipesInDm=Tutte le ricette in DM +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Gli alleati non risolvono i tiri di contesto in un'interazione di lotta ModUi/&AllowAllPlayersOnNarrativeSequences=+ Consenti a tutti i giocatori sequenze narrative ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Consenti agli alleati di percepire Ranger GloomStalker quando si trovano nell'oscurità naturale ModUi/&AllowAnyClassToWearSylvanArmor=Consenti a qualsiasi classe di indossare Armatura Silvana o Abiti da Portatore di Luce diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index eaf6f52406..495dd5110e 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -92,6 +92,8 @@ Feature/&AttributeModifierDazzledTitle=AC Penalty Feature/&AttributeModifierMonkAbundantKiDescription=熟練度ボーナスの半分(切り捨て)を Ki ポイント プールに追加します。 Feature/&AttributeModifierMonkAbundantKiTitle=豊かな気 Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n +Feature/&ConditionGrappleTargetFlyingDescription=グラップラーに従う +Feature/&ConditionGrappleTargetFlyingTitle=フライング Feature/&EnhancedIndomitableResistanceDescription=セーヴィング スローに失敗した場合は、ファイター レベルに等しいボーナスを獲得して再ロールできます。その場合は、新しいロールを使用する必要があり、長い休憩が終了するまでこの機能を再度使用することはできません。 Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=拡張された呪文 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index e77ecc77bd..03c86a2c76 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -19,6 +19,7 @@ ModUi/&Advanced=詳細: [再起動 ModUi/&AdvancedHelp=• 注意: これらの設定を行うには、プレーヤーにこの MOD がインストールされている必要があります。 ModUi/&AllItemInDm=DM内のすべてのアイテム ModUi/&AllRecipesInDm=すべてのレシピはDMにあります +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 味方はグラップルインタラクションでコンテキストロールを解決しません ModUi/&AllowAllPlayersOnNarrativeSequences=+ すべてのプレイヤーに物語シーケンスを許可 ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=自然の暗闇にいるときに味方がレンジャー グロウムストーカーを感知できるようにする ModUi/&AllowAnyClassToWearSylvanArmor=どのクラスも森の鎧またはライトブリンガーの服を着用できるようにする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 43729004ec..a167c0f30f 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -92,6 +92,8 @@ Feature/&AttributeModifierDazzledTitle=AC Penalty Feature/&AttributeModifierMonkAbundantKiDescription=당신의 숙련도 보너스 절반(반올림)을 Ki 포인트 풀에 추가하십시오. Feature/&AttributeModifierMonkAbundantKiTitle=풍부한 기 Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n +Feature/&ConditionGrappleTargetFlyingDescription=그래플러를 따라간다 +Feature/&ConditionGrappleTargetFlyingTitle=나는 Feature/&EnhancedIndomitableResistanceDescription=내성 굴림에 실패하면 파이터 레벨과 동일한 보너스를 받아 다시 굴릴 수 있습니다. 그럴 경우 새 롤을 사용해야 하며, 긴 휴식을 마칠 때까지 이 기능을 다시 사용할 수 없습니다. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=확장된 주문 diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index fd274d4e3f..edeef2c267 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -19,6 +19,7 @@ ModUi/&Advanced=고급: [다시 ModUi/&AdvancedHelp=• 주의: 이 설정을 사용하려면 플레이어에 이 모드가 설치되어 있어야 합니다. ModUi/&AllItemInDm=DM의 모든 항목 ModUi/&AllRecipesInDm=모든 레시피는 DM에 있어요 +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 동맹군은 씨름 상호작용에서 컨텍스트 롤을 해결하지 않습니다. ModUi/&AllowAllPlayersOnNarrativeSequences=+ 내러티브 시퀀스에서 모든 플레이어 허용 ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=자연스러운 어둠 속에서 아군이 레인저 글룸스토커를 인식하도록 허용합니다. ModUi/&AllowAnyClassToWearSylvanArmor=모든 클래스가 실반 갑옷 또는 빛의 인도자 옷을 착용할 수 있도록 허용합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index fb73c02c25..9bab648cdd 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -92,6 +92,8 @@ Feature/&AttributeModifierDazzledTitle=Deslumbrado Feature/&AttributeModifierMonkAbundantKiDescription=Adicione metade do seu bônus de proficiência (arredondado para baixo) ao seu conjunto de Pontos Ki. Feature/&AttributeModifierMonkAbundantKiTitle=Ki abundante Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n +Feature/&ConditionGrappleTargetFlyingDescription=Segue o grappler +Feature/&ConditionGrappleTargetFlyingTitle=Vôo Feature/&EnhancedIndomitableResistanceDescription=Se você falhar em um teste de resistência, você pode refazê-lo com um bônus igual ao seu nível de Guerreiro. Se fizer isso, você deve usar o novo teste, e você não pode usar esse recurso novamente até terminar um descanso longo. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Feitiços Expandidos diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 2e57f0595d..1e28e48b5a 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -19,6 +19,7 @@ ModUi/&Advanced=Avançado: [Requer ModUi/&AdvancedHelp=• ATENÇÃO: Essas configurações exigirão que o jogador tenha este mod instalado ModUi/&AllItemInDm=Todos os itens no DM ModUi/&AllRecipesInDm=Todas as receitas em DM +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Aliados não resolvem jogadas de contexto em uma interação de agarrar ModUi/&AllowAllPlayersOnNarrativeSequences=+ Permitir todos os jogadores em sequências narrativas ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que os aliados percebam Ranger GloomStalker quando na escuridão natural ModUi/&AllowAnyClassToWearSylvanArmor=Permitir que qualquer classe use Armadura Sylvan ou Roupas Lightbringer diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 6e9d466a7f..1cac51de00 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -92,6 +92,8 @@ Feature/&AttributeModifierDazzledTitle=Ослеплён Feature/&AttributeModifierMonkAbundantKiDescription=Добавьте половину бонуса мастерства (округленного в меньшую сторону) к вашему запасу очков Ки. Feature/&AttributeModifierMonkAbundantKiTitle=Обильная Ци Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n +Feature/&ConditionGrappleTargetFlyingDescription=Следует за борцом +Feature/&ConditionGrappleTargetFlyingTitle=Летающий Feature/&EnhancedIndomitableResistanceDescription=Вы можете перебросить проваленный спасбросок с бонусом, равным вашему уровню Воина, и должны использовать новый результат. После этого вы можете повторно использовать это умение только после завершения продолжительного отдыха. Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=Расширенные заклинания diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 02e20b34b9..6154e99b32 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -19,6 +19,7 @@ ModUi/&Advanced=Продвинутый: ВНИМАНИЕ: Для этих настроек необходимо, чтобы у игрока был установлен этот мод ModUi/&AllItemInDm=Все предметы в СП ModUi/&AllRecipesInDm=Все рецепты в СП +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Союзники не выполняют броски контекста при взаимодействии с захватом ModUi/&AllowAllPlayersOnNarrativeSequences=+ Позволить всем игрокам участвовать в нарративных последовательностях ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Позволить союзникам замечать Сумрачного охотника в естественной темноте ModUi/&AllowAnyClassToWearSylvanArmor=Позволить всем классам носить Доспехи Сильвана или Одежды Несущего свет diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 05fcf1a400..88a1c37da2 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -92,6 +92,8 @@ Feature/&AttributeModifierDazzledTitle=AC Penalty Feature/&AttributeModifierMonkAbundantKiDescription=将你的一半熟练度奖励(向下舍入)添加到你的 Ki 点数池中。 Feature/&AttributeModifierMonkAbundantKiTitle=气量充沛 Feature/&CollegeHopeWanderingHealerSpellsDescription={0}\n\n +Feature/&ConditionGrappleTargetFlyingDescription=跟随擒抱者 +Feature/&ConditionGrappleTargetFlyingTitle=飞行 Feature/&EnhancedIndomitableResistanceDescription=如果你的豁免检定失败,你可以重骰该豁免并获得等于你的战士等级的加值。不过你必须采用重掷的结果。你必须完成一次长休才能再次使用该特性。 Feature/&ExpandedSpellsDescription={0}\n\n Feature/&ExpandedSpellsTitle=扩展法术 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index bf7c0c6dc5..e46478aef3 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -19,6 +19,7 @@ ModUi/&Advanced=高级:[需要 ModUi/&AdvancedHelp=•注意:这些设置将要求玩家安装此模组 ModUi/&AllItemInDm=DM中的所有项目 ModUi/&AllRecipesInDm=冒险中的所有配方 +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 盟友不会在擒抱互动中解决情境掷骰 ModUi/&AllowAllPlayersOnNarrativeSequences=+允许所有玩家进行叙述序列 ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=允许盟友在自然黑暗中感知Ranger GloomStalker ModUi/&AllowAnyClassToWearSylvanArmor=允许任何职业穿森林之甲或光明使者之衣 From b4c423a84f82a63a7b06d02a57510329eb5e5657 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 12 Oct 2024 17:48:29 -0700 Subject: [PATCH 15/27] update diagnostics --- .../UnfinishedBusinessBlueprints/Assets.txt | 2 ++ .../ConditionGrappleSource.json | 2 +- .../ConditionGrappleTarget.json | 1 + .../ConditionGrappleTargetFlying.json | 32 +++++++++++++++++++ .../PowerFeatPoisonousSkin.json | 2 +- .../PowerHandwrapsOfPulling.json | 2 +- .../PowerResonatingStrike.json | 2 +- .../SpellDefinition/CreateBonfire.json | 2 +- 8 files changed, 40 insertions(+), 5 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMoveMode/ConditionGrappleTargetFlying.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 0fe7fbd45c..ab89b0121f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -2212,6 +2212,7 @@ ConditionAffinityRangerSurvivalistDeafenedImmunity FeatureDefinitionConditionAff ConditionAffinityRangerWildMasterBeastCompanion FeatureDefinitionConditionAffinity FeatureDefinition 2bd6cfd4-49bf-5687-9b68-4f3765984ce2 ConditionAffinityRiftWalkerRestrainedImmunity FeatureDefinitionConditionAffinity FeatureDefinition 92cb7a89-3554-567c-a62e-f72c78cd34f1 ConditionAffinitySickeningRadiance FeatureDefinitionConditionAffinity FeatureDefinition fc61f40d-38f7-5a41-b8fb-d6e4464a3135 +ConditionGrappleTargetFlying FeatureDefinitionMoveMode FeatureDefinition 617fc4f1-520e-53b8-85bf-3dca03dc7231 CraftingAffinityInventorMagicItemAdept FeatureDefinitionCraftingAffinity FeatureDefinition 26842e0a-9c1e-5740-ad4d-871da69932b1 CustomCodeBarbarianPrimalChampion FeatureDefinition FeatureDefinition 85dac7d1-5e2a-5f02-983b-65b1905810b3 CustomInvocationPoolMalakhAngelicForm FeatureDefinitionCustomInvocationPool FeatureDefinition 89a4a18c-0d51-526b-aecf-1b7ff85e2bae @@ -5717,6 +5718,7 @@ MovementAffinityWizardGraviturgistDensityDecrease FeatureDefinitionMovementAffin MovementAffinityWizardGraviturgistDensityIncrease FeatureDefinitionMovementAffinity FeatureDefinitionMovementAffinity d0d79e06-f8b4-5aff-b8ee-98a50ddde9d9 MovementAffinityWizardGraviturgistEventHorizon FeatureDefinitionMovementAffinity FeatureDefinitionMovementAffinity 90474524-85de-5766-8484-b84f2eb283eb MovementAffinityWizardGraviturgistEventHorizonSaved FeatureDefinitionMovementAffinity FeatureDefinitionMovementAffinity fed3e079-b87f-5407-b4cf-a9a6428a8e7f +ConditionGrappleTargetFlying FeatureDefinitionMoveMode FeatureDefinitionMoveMode 617fc4f1-520e-53b8-85bf-3dca03dc7231 MoveModeFly0 FeatureDefinitionMoveMode FeatureDefinitionMoveMode b019af54-9539-548c-aad7-1b52e096bd83 MoveModeFly14 FeatureDefinitionMoveMode FeatureDefinitionMoveMode e36200ce-233b-500c-82e2-4dfbce7a6b58 MoveModeMove14 FeatureDefinitionMoveMode FeatureDefinitionMoveMode 9f0985b9-dcfb-5656-b53e-4c0b7c3e1676 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json index 74c796902e..c6aae7c03c 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleSource.json @@ -38,7 +38,7 @@ "Definition:ConditionBanishedTimeshift:fa046e868c8816244bf8dcb28dbe7c72", "Definition:ConditionConfusedIncapacitated:5080467181c250c4c9c2b899f661fac4", "Definition:ConditionEyebiteAsleep:66d1a96e08e0a3a42b9b12658a3ba095", - "Definition:ConditionFlying:ec82fae48f9a55a41a49fd96d93b49b5", + "Definition:ConditionFlying:ec82fae48f9a55a41a49fd96d93b49b5", "Definition:ConditionFlying12:33fb0e0fb4c74604e8fe76b8d3370510", "Definition:ConditionFlyingAdaptive:cdef2a25e10345349a181ccf2b03cd97", "Definition:ConditionFlyingBootsWinged:83fc6ceb7037bcb41b2fc67df5595685", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleTarget.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleTarget.json index 8ca68fcddc..cf6e05aa7f 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleTarget.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGrappleTarget.json @@ -6,6 +6,7 @@ "features": [ "Definition:ActionAffinityConditionRestrained:0a11d859909c2624086506f327824de8", "Definition:ActionAffinityGrappled:1c2c02a0e9f823c489b3d62d03534617", + "Definition:ConditionGrappleTargetFlying:617fc4f1-520e-53b8-85bf-3dca03dc7231", "Definition:MovementAffinityConditionRestrained:ed9d9d5986e47f845819579f936ee8cc" ], "allowMultipleInstances": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMoveMode/ConditionGrappleTargetFlying.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMoveMode/ConditionGrappleTargetFlying.json new file mode 100644 index 0000000000..6434c27c3e --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionMoveMode/ConditionGrappleTargetFlying.json @@ -0,0 +1,32 @@ +{ + "$type": "FeatureDefinitionMoveMode, Assembly-CSharp", + "moveMode": "Fly", + "speed": 0, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Feature/&ConditionGrappleTargetFlyingTitle", + "description": "Feature/&ConditionGrappleTargetFlyingDescription", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 1.0, + "g": 1.0, + "b": 1.0, + "a": 1.0 + }, + "symbolChar": "221E", + "sortOrder": 0, + "unusedInSolastaCOTM": false, + "usedInValleyDLC": false + }, + "contentCopyright": "UserContent", + "guid": "617fc4f1-520e-53b8-85bf-3dca03dc7231", + "contentPack": 9999, + "name": "ConditionGrappleTargetFlying" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatPoisonousSkin.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatPoisonousSkin.json index 6ba66993bb..cfa83f7c66 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatPoisonousSkin.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerFeatPoisonousSkin.json @@ -37,7 +37,7 @@ "hasSavingThrow": true, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Constitution", - "ignoreCover": false, + "ignoreCover": true, "grantedConditionOnSave": null, "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHandwrapsOfPulling.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHandwrapsOfPulling.json index f994f5a948..abfaa12847 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHandwrapsOfPulling.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerHandwrapsOfPulling.json @@ -37,7 +37,7 @@ "hasSavingThrow": true, "disableSavingThrowOnAllies": true, "savingThrowAbility": "Strength", - "ignoreCover": false, + "ignoreCover": true, "grantedConditionOnSave": null, "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerResonatingStrike.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerResonatingStrike.json index 998c60ad10..59b26f2a0d 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerResonatingStrike.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerResonatingStrike.json @@ -104,7 +104,7 @@ "incrementMultiplier": 1, "additionalTargetsPerIncrement": 0, "additionalSubtargetsPerIncrement": 0, - "additionalDicePerIncrement": 0, + "additionalDicePerIncrement": 1, "additionalSpellLevelPerIncrement": 0, "additionalSummonsPerIncrement": 0, "additionalHPPerIncrement": 0, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json index fdc1cc5201..65db5814c2 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json @@ -49,7 +49,7 @@ "hasSavingThrow": true, "disableSavingThrowOnAllies": false, "savingThrowAbility": "Dexterity", - "ignoreCover": false, + "ignoreCover": true, "grantedConditionOnSave": null, "rollSaveOnlyIfRelevantForms": false, "hasShoveRoll": false, From 540fda8daf3759722d899b8e213283485b52655e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 12 Oct 2024 17:49:04 -0700 Subject: [PATCH 16/27] minor tweaks on ignore cover --- SolastaUnfinishedBusiness/Feats/OtherFeats.cs | 2 +- SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs | 2 +- SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs index 6d754422da..a0a649b221 100644 --- a/SolastaUnfinishedBusiness/Feats/OtherFeats.cs +++ b/SolastaUnfinishedBusiness/Feats/OtherFeats.cs @@ -2575,7 +2575,7 @@ public bool CanIgnoreAoOOnSelf(RulesetCharacter defender, RulesetCharacter attac .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.Enemy, RangeType.Distance, 1, TargetType.IndividualsUnique) .SetSavingThrowData(false, - AttributeDefinitions.Constitution, false, + AttributeDefinitions.Constitution, true, EffectDifficultyClassComputation.AbilityScoreAndProficiency, AttributeDefinitions.Constitution, 8) .SetEffectForms( diff --git a/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs b/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs index 92484b015a..26810ebe56 100644 --- a/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs +++ b/SolastaUnfinishedBusiness/Models/CustomWeaponsContext.cs @@ -176,7 +176,7 @@ private static void BuildHandwraps() .SetSavingThrowData( true, AttributeDefinitions.Strength, - false, + true, EffectDifficultyClassComputation.AbilityScoreAndProficiency) .SetParticleEffectParameters(FeatureDefinitionPowers.PowerShadowTamerRopeGrapple) .SetEffectForms( diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index f50bc4c63a..8205322fe4 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -241,8 +241,8 @@ internal static SpellDefinition BuildCreateBonfire() .Create(WallOfFireLine) .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.Cube) - .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) - .SetSavingThrowData(false, AttributeDefinitions.Dexterity, false, + .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) + .SetSavingThrowData(false, AttributeDefinitions.Dexterity, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetRecurrentEffect( RecurrentEffect.OnActivation | RecurrentEffect.OnEnter | RecurrentEffect.OnTurnEnd) From 1cf7cee1b40bfb974ac02c715206768e8b826302 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 12 Oct 2024 18:17:03 -0700 Subject: [PATCH 17/27] add AlliesDoNotResolveRollsWhenGrappled setting --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 8 ++++++++ SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs | 10 ++++++++++ SolastaUnfinishedBusiness/Models/GrappleContext.cs | 7 +++++-- SolastaUnfinishedBusiness/Settings.cs | 1 + .../Translations/de/Settings-de.txt | 2 +- .../Translations/en/Settings-en.txt | 2 +- .../Translations/es/Settings-es.txt | 2 +- .../Translations/fr/Settings-fr.txt | 2 +- .../Translations/it/Settings-it.txt | 2 +- .../Translations/ja/Settings-ja.txt | 2 +- .../Translations/ko/Settings-ko.txt | 2 +- .../Translations/pt-BR/Settings-pt-BR.txt | 2 +- .../Translations/ru/Settings-ru.txt | 2 +- .../Translations/zh-CN/Settings-zh-CN.txt | 2 +- 14 files changed, 34 insertions(+), 12 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index d8e7b8866c..b30daf3c82 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,3 +1,11 @@ +1.5.97.34: + +- added 'Allies don't resolve context rolls on grapple' setting +- fixed Circle of Wildfire enhanced bond +- fixed Green-Flame Blade 2nd target damage +- fixed Spike Growth 2x damage on last tile move +- fixed Wizard War Magic power surge + 1.5.97.33: - added homebrew Brawler feat diff --git a/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs b/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs index 90c7c48618..71eeb9fc55 100644 --- a/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs @@ -61,9 +61,19 @@ internal static void DisplayCharacter() if (UI.Toggle(Gui.Localize("ModUi/&AddGrappleActionToAllRaces"), ref toggle, UI.AutoWidth())) { Main.Settings.AddGrappleActionToAllRaces = toggle; + Main.Settings.AlliesDoNotResolveRollsWhenGrappled = false; GrappleContext.SwitchGrappleAction(); } + if (Main.Settings.AddGrappleActionToAllRaces) + { + toggle = Main.Settings.AlliesDoNotResolveRollsWhenGrappled; + if (UI.Toggle(Gui.Localize("ModUi/&AlliesDoNotResolveRollsWhenGrappled"), ref toggle, UI.AutoWidth())) + { + Main.Settings.AlliesDoNotResolveRollsWhenGrappled = toggle; + } + } + toggle = Main.Settings.AddHelpActionToAllRaces; if (UI.Toggle(Gui.Localize("ModUi/&AddHelpActionToAllRaces"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Models/GrappleContext.cs b/SolastaUnfinishedBusiness/Models/GrappleContext.cs index cac00e0c8c..1cf9478df7 100644 --- a/SolastaUnfinishedBusiness/Models/GrappleContext.cs +++ b/SolastaUnfinishedBusiness/Models/GrappleContext.cs @@ -384,8 +384,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, var success = true; - // only roll a check if an enemy - if (defender.IsOppositeSide(attacker.Side)) + if (!Main.Settings.AlliesDoNotResolveRollsWhenGrappled || defender.IsOppositeSide(attacker.Side)) { yield return TryAlterOutcomeAttributeCheck.ResolveRolls( attacker, defender, ActionDefinitions.Id.NoAction, abilityCheckData); @@ -495,6 +494,10 @@ public void OnConditionRemoved(RulesetCharacter target, RulesetCondition ruleset rulesetSource.RemoveCondition(activeConditionSource); } } + + var glc = GameLocationCharacter.GetFromActor(target); + + glc.StopMoving(LocationDefinitions.Orientation.Down, CharacterAction.InterruptionType.ForcedMovement); } } diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index d9c6fba456..ab958f63de 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -178,6 +178,7 @@ public class Settings : UnityModManager.ModSettings public bool DisableSenseSuperiorDarkVisionFromAllRaces { get; set; } public bool AddFallProneActionToAllRaces { get; set; } public bool AddGrappleActionToAllRaces { get; set; } + public bool AlliesDoNotResolveRollsWhenGrappled { get; set; } public bool AddHelpActionToAllRaces { get; set; } public bool EnableAlternateHuman { get; set; } public bool EnableFlexibleRaces { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 15cd376751..58bd552f97 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -19,7 +19,7 @@ ModUi/&Advanced=Erweitert: [Neusta ModUi/&AdvancedHelp=• ACHTUNG: Diese Einstellungen erfordern, dass der Player diesen Mod installiert hat ModUi/&AllItemInDm=Alle Artikel in DM ModUi/&AllRecipesInDm=Alle Rezepte in DM -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Verbündete führen in einer Grapple-Interaktion keine Kontextwürfe aus +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Verbündete führen keine Kontextwürfe beim Ringen aus ModUi/&AllowAllPlayersOnNarrativeSequences=+ Alle Spieler in Erzählsequenzen zulassen ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Erlaubt Verbündeten, Ranger GloomStalker in natürlicher Dunkelheit wahrzunehmen ModUi/&AllowAnyClassToWearSylvanArmor=Erlaube jeder Klasse, Sylvan-Rüstung oder Lichtbringer-Kleidung zu tragen diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 020dcb49f1..aaa83f4d0e 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -19,7 +19,7 @@ ModUi/&Advanced=Advanced: [Require ModUi/&AdvancedHelp=• ATTENTION: These settings will require the player to have this mod installed ModUi/&AllItemInDm=All items in DM ModUi/&AllRecipesInDm=All recipes in DM -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Allies don't resolve context rolls in a grapple interaction +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Allies don't resolve context rolls on grapple ModUi/&AllowAllPlayersOnNarrativeSequences=+ Allow all players on narrative sequences ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Allow allies to perceive Ranger GloomStalker when in natural darkness ModUi/&AllowAnyClassToWearSylvanArmor=Allow any class to wear Sylvan Armor or Lightbringer Clothes diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 1c5439a98b..b00dfbf98e 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -19,7 +19,7 @@ ModUi/&Advanced=Avanzado: [Requier ModUi/&AdvancedHelp=• ATENCIÓN: Esta configuración requerirá que el reproductor tenga instalado este mod. ModUi/&AllItemInDm=Todos los artículos en DM ModUi/&AllRecipesInDm=Todas las recetas en DM. -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Los aliados no resuelven las tiradas de contexto en una interacción de agarre +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Los aliados no resuelven las tiradas de contexto al agarrar ModUi/&AllowAllPlayersOnNarrativeSequences=+ Permitir a todos los jugadores en secuencias narrativas ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que los aliados perciban a Ranger GloomStalker cuando se encuentran en oscuridad natural ModUi/&AllowAnyClassToWearSylvanArmor=Permitir que cualquier clase use Armadura Sylvan o Ropa de Iluminador diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index ae407d602f..11b57d897f 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -19,7 +19,7 @@ ModUi/&Advanced=Avancé : [Néces ModUi/&AdvancedHelp=• ATTENTION : Ces paramètres nécessiteront que le joueur ait installé ce mod. ModUi/&AllItemInDm=Tous les articles en DM ModUi/&AllRecipesInDm=Toutes les recettes en DM -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Les alliés ne résolvent pas les jets de contexte dans une interaction de lutte +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Les alliés ne résolvent pas les jets de contexte lors de la lutte ModUi/&AllowAllPlayersOnNarrativeSequences=+ Autoriser tous les joueurs sur les séquences narratives ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permettre aux alliés de percevoir Ranger GloomStalker lorsqu'ils sont dans l'obscurité naturelle ModUi/&AllowAnyClassToWearSylvanArmor=Autoriser n'importe quelle classe à porter une armure sylvestre ou des vêtements de porteur de lumière diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 35b0ce5414..65b5266c31 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -19,7 +19,7 @@ ModUi/&Advanced=Avanzate: [Richied ModUi/&AdvancedHelp=• ATTENZIONE: Queste impostazioni richiederanno che il giocatore abbia installato questa mod ModUi/&AllItemInDm=Tutti gli articoli in DM ModUi/&AllRecipesInDm=Tutte le ricette in DM -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Gli alleati non risolvono i tiri di contesto in un'interazione di lotta +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Gli alleati non risolvono i tiri di contesto durante la lotta ModUi/&AllowAllPlayersOnNarrativeSequences=+ Consenti a tutti i giocatori sequenze narrative ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Consenti agli alleati di percepire Ranger GloomStalker quando si trovano nell'oscurità naturale ModUi/&AllowAnyClassToWearSylvanArmor=Consenti a qualsiasi classe di indossare Armatura Silvana o Abiti da Portatore di Luce diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 03c86a2c76..ca79f95cbc 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -19,7 +19,7 @@ ModUi/&Advanced=詳細: [再起動 ModUi/&AdvancedHelp=• 注意: これらの設定を行うには、プレーヤーにこの MOD がインストールされている必要があります。 ModUi/&AllItemInDm=DM内のすべてのアイテム ModUi/&AllRecipesInDm=すべてのレシピはDMにあります -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 味方はグラップルインタラクションでコンテキストロールを解決しません +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 味方はグラップル時にコンテキストロールを解決しません ModUi/&AllowAllPlayersOnNarrativeSequences=+ すべてのプレイヤーに物語シーケンスを許可 ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=自然の暗闇にいるときに味方がレンジャー グロウムストーカーを感知できるようにする ModUi/&AllowAnyClassToWearSylvanArmor=どのクラスも森の鎧またはライトブリンガーの服を着用できるようにする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index edeef2c267..e1701288ca 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -19,7 +19,7 @@ ModUi/&Advanced=고급: [다시 ModUi/&AdvancedHelp=• 주의: 이 설정을 사용하려면 플레이어에 이 모드가 설치되어 있어야 합니다. ModUi/&AllItemInDm=DM의 모든 항목 ModUi/&AllRecipesInDm=모든 레시피는 DM에 있어요 -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 동맹군은 씨름 상호작용에서 컨텍스트 롤을 해결하지 않습니다. +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 동맹군은 씨름에서 컨텍스트 롤을 해결하지 못합니다. ModUi/&AllowAllPlayersOnNarrativeSequences=+ 내러티브 시퀀스에서 모든 플레이어 허용 ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=자연스러운 어둠 속에서 아군이 레인저 글룸스토커를 인식하도록 허용합니다. ModUi/&AllowAnyClassToWearSylvanArmor=모든 클래스가 실반 갑옷 또는 빛의 인도자 옷을 착용할 수 있도록 허용합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 1e28e48b5a..c90377df4d 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -19,7 +19,7 @@ ModUi/&Advanced=Avançado: [Requer ModUi/&AdvancedHelp=• ATENÇÃO: Essas configurações exigirão que o jogador tenha este mod instalado ModUi/&AllItemInDm=Todos os itens no DM ModUi/&AllRecipesInDm=Todas as receitas em DM -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Aliados não resolvem jogadas de contexto em uma interação de agarrar +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Aliados não resolvem testes de contexto em agarrar ModUi/&AllowAllPlayersOnNarrativeSequences=+ Permitir todos os jogadores em sequências narrativas ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que os aliados percebam Ranger GloomStalker quando na escuridão natural ModUi/&AllowAnyClassToWearSylvanArmor=Permitir que qualquer classe use Armadura Sylvan ou Roupas Lightbringer diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 6154e99b32..3cf7515c12 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -19,7 +19,7 @@ ModUi/&Advanced=Продвинутый: ВНИМАНИЕ: Для этих настроек необходимо, чтобы у игрока был установлен этот мод ModUi/&AllItemInDm=Все предметы в СП ModUi/&AllRecipesInDm=Все рецепты в СП -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Союзники не выполняют броски контекста при взаимодействии с захватом +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Союзники не выполняют контекстные броски при захвате ModUi/&AllowAllPlayersOnNarrativeSequences=+ Позволить всем игрокам участвовать в нарративных последовательностях ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Позволить союзникам замечать Сумрачного охотника в естественной темноте ModUi/&AllowAnyClassToWearSylvanArmor=Позволить всем классам носить Доспехи Сильвана или Одежды Несущего свет diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index e46478aef3..7fe014d87d 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -19,7 +19,7 @@ ModUi/&Advanced=高级:[需要 ModUi/&AdvancedHelp=•注意:这些设置将要求玩家安装此模组 ModUi/&AllItemInDm=DM中的所有项目 ModUi/&AllRecipesInDm=冒险中的所有配方 -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 盟友不会在擒抱互动中解决情境掷骰 +ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 盟友不会解决擒抱上的上下文掷骰 ModUi/&AllowAllPlayersOnNarrativeSequences=+允许所有玩家进行叙述序列 ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=允许盟友在自然黑暗中感知Ranger GloomStalker ModUi/&AllowAnyClassToWearSylvanArmor=允许任何职业穿森林之甲或光明使者之衣 From 1f8aa237da1925744fefea52f7e091d3566aea8b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 12 Oct 2024 19:23:18 -0700 Subject: [PATCH 18/27] fix soft lock scenarios with counter spell, and readied actions - fix #4986 --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 1 + .../Patches/GameLocationActionManagerPatcher.cs | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index b30daf3c82..b7d30163b6 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -3,6 +3,7 @@ - added 'Allies don't resolve context rolls on grapple' setting - fixed Circle of Wildfire enhanced bond - fixed Green-Flame Blade 2nd target damage +- fixed soft lock scenarios with counter spell, and readied actions - fixed Spike Growth 2x damage on last tile move - fixed Wizard War Magic power surge diff --git a/SolastaUnfinishedBusiness/Patches/GameLocationActionManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/GameLocationActionManagerPatcher.cs index 4ff76acc01..6e072b8bbe 100644 --- a/SolastaUnfinishedBusiness/Patches/GameLocationActionManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/GameLocationActionManagerPatcher.cs @@ -194,9 +194,13 @@ private static void AddInterruptRequest(GameLocationActionManager __instance, Re if (!isSameCharacter) { //BEGIN PATCH - // add a new unique request group to avoid reactions grouping and, - // enforce the desired sequence if not an opportunity attack - if (reactionRequest.ReactionParams.ActionDefinition.Id != ActionDefinitions.Id.AttackOpportunity) + // add a new unique request group to avoid reactions grouping and, enforce the desired sequence + // if not an opportunity attack, ready attack, cast reaction, or ready cast + if (reactionRequest.ReactionParams.ActionDefinition.Id is not ( + ActionDefinitions.Id.AttackOpportunity or + ActionDefinitions.Id.AttackReadied or + ActionDefinitions.Id.CastReaction or + ActionDefinitions.Id.CastReadied)) { __instance.pendingReactionRequestGroups.Push( new ReactionRequestGroup(reactionRequest.DefinitionName)); From 7caaec0af0c90068e15554a80d505e8b9ea6f524 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 12 Oct 2024 20:19:06 -0700 Subject: [PATCH 19/27] fix Dissonant Whispers under multiplayer - fix #4969 --- .../ChangelogHistory.txt | 3 +- .../Spells/SpellBuildersLevel01.cs | 67 +++++++------------ 2 files changed, 26 insertions(+), 44 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index b7d30163b6..7424202c3d 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,9 +1,10 @@ 1.5.97.34: - added 'Allies don't resolve context rolls on grapple' setting +- fixed Dissonant Whispers under multiplayer - fixed Circle of Wildfire enhanced bond - fixed Green-Flame Blade 2nd target damage -- fixed soft lock scenarios with counter spell, and readied actions +- fixed soft lock scenarios with reaction spells, and readied actions - fixed Spike Growth 2x damage on last tile move - fixed Wizard War Magic power surge diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 12958e67c8..0a20f4ceb1 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1635,31 +1635,6 @@ internal static SpellDefinition BuildDissonantWhispers() { const string NAME = "DissonantWhispers"; - #region Dissonant Whispers AI Behavior - - var scorerDissonantWhispers = AiContext.CreateActivityScorer( - FixesContext.DecisionMoveAfraid, "MoveScorer_DissonantWhispers"); - - // remove IsCloseToMe - scorerDissonantWhispers.scorer.WeightedConsiderations.RemoveAt(3); - - var decisionDissonantWhispers = DecisionDefinitionBuilder - .Create("Move_DissonantWhispers") - .SetGuiPresentationNoContent(true) - .SetDecisionDescription( - "Go as far as possible from enemies.", - nameof(Move), - scorerDissonantWhispers) - .AddToDB(); - - var packageDissonantWhispers = DecisionPackageDefinitionBuilder - .Create("DissonantWhispers_Fear") - .SetGuiPresentationNoContent(true) - .SetWeightedDecisions(new WeightedDecisionDescription { decision = decisionDissonantWhispers, weight = 9 }) - .AddToDB(); - - #endregion - var spell = SpellDefinitionBuilder .Create(NAME) .SetGuiPresentation(Category.Spell, Sprites.GetSprite(NAME, Resources.DissonantWhispers, 128)) @@ -1686,14 +1661,13 @@ internal static SpellDefinition BuildDissonantWhispers() .SetCasterEffectParameters(Feeblemind) .SetEffectEffectParameters(PowerBardTraditionVerbalOnslaught) .Build()) - .AddCustomSubFeatures(new PowerOrSpellFinishedByMeDissonantWhispers(packageDissonantWhispers)) + .AddCustomSubFeatures(new PowerOrSpellFinishedByMeDissonantWhispers()) .AddToDB(); return spell; } - private sealed class PowerOrSpellFinishedByMeDissonantWhispers(DecisionPackageDefinition packageDissonantWhispers) - : IPowerOrSpellFinishedByMe + private sealed class PowerOrSpellFinishedByMeDissonantWhispers : IPowerOrSpellFinishedByMe { public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) { @@ -1716,25 +1690,32 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, target.UsedTacticalMoves = 0; target.UsedTacticalMovesChanged?.Invoke(target); - // use enemy brain to decide position to go based on Fear package - var aiService = ServiceRepository.GetService(); - - aiService.TryGetAiFromGameCharacter(target, out var aiTarget); - - var brain = aiTarget.BattleBrain; - - brain.StashDecisions(); - brain.RemoveAllDecisions(); - brain.AddDecisionPackage(packageDissonantWhispers); - brain.RegisterAllActiveDecisionPackages(); + var pathfindingService = ServiceRepository.GetService(); - yield return brain.DecideNextActivity(); + yield return pathfindingService + .ComputeValidDestinationsAsync(target, target.LocationPosition, target.MaxTacticalMoves * 2); + + var positioningService = ServiceRepository.GetService(); + var casterPosition = action.ActingCharacter.LocationPosition; + var destinationPosition = target.LocationPosition; + var candidatePositions = pathfindingService.ValidDestinations + .Select(x => x.position) + .Where(x => + !positioningService.IsDangerousPosition(target, x) && + !positioningService.IsDifficultGroundOrThroughForCharacter(target, x)); - var position = brain.SelectedDecision.context.position; + foreach (var candidatePosition in candidatePositions) + { + var currentMagnitude = (destinationPosition - casterPosition).magnitude2DSqr; + var candidateMagnitude = (candidatePosition - casterPosition).magnitude2DSqr; - brain.UnstashDecisions(); + if (candidateMagnitude > currentMagnitude) + { + destinationPosition = candidatePosition; + } + } - target.MyExecuteActionTacticalMove(position); + target.MyExecuteActionTacticalMove(destinationPosition); } } From 5d176eedfb720c2b78ff1706b1a5fbe249c8f763 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 12 Oct 2024 20:56:21 -0700 Subject: [PATCH 20/27] update diags --- .../UnfinishedBusinessBlueprints/Assets.txt | 2 - .../Move_DissonantWhispers.json | 116 ------------------ .../DissonantWhispers_Fear.json | 43 ------- 3 files changed, 161 deletions(-) delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json delete mode 100644 Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/DissonantWhispers_Fear.json diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index ab89b0121f..2540f97ac5 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1255,7 +1255,6 @@ DecisionBreakFreeConditionRestrainedByEntangle TA.AI.DecisionDefinition TA.AI.De DecisionBreakFreeConditionVileBrew TA.AI.DecisionDefinition TA.AI.DecisionDefinition 4b3278e8-334a-58d6-8c75-2f48e28b4e54 DecisionBreakFreeConditionWrathfulSmiteEnemy TA.AI.DecisionDefinition TA.AI.DecisionDefinition 6400794a-3234-55f7-973f-d443c38c9a20 Move_Approach TA.AI.DecisionDefinition TA.AI.DecisionDefinition 5cb2a87f-09a4-5fae-9b74-10516ea8a8ab -Move_DissonantWhispers TA.AI.DecisionDefinition TA.AI.DecisionDefinition bdfa6649-5cad-5b35-a697-209ea53ca45d Approach TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 5043a0ec-c626-5877-bd87-c7bc0584366d BreakFreeAbilityCheckConditionFlashFreeze TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 5578aa14-4a4c-5aa0-b787-7203e14b8a36 BreakFreeAbilityCheckConditionGrappledRestrainedEnsnared TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition bf1d4828-465e-5897-91ca-bc8094b3d20e @@ -1267,7 +1266,6 @@ BreakFreeAbilityCheckConditionOathOfAncientsNaturesWrath TA.AI.DecisionPackageDe BreakFreeAbilityCheckConditionRestrainedByEntangle TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 0d9623d9-0cd7-5c03-8275-e9e61f0f1b6a BreakFreeAbilityCheckConditionVileBrew TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 7b202c71-3241-5f80-8b02-ada4a0d9383f BreakFreeAbilityCheckConditionWrathfulSmiteEnemy TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition 8952dfa4-c552-57f5-bf82-7e317c4e459d -DissonantWhispers_Fear TA.AI.DecisionPackageDefinition TA.AI.DecisionPackageDefinition dfe2cc9e-cc70-5cfe-9057-19454acb1068 DieTypeD3 DieTypeDefinition DieTypeDefinition 63dc904b-8d78-5406-90aa-e7e1f3eefd84 ProxyCircleOfTheWildfireCauterizingFlames EffectProxyDefinition EffectProxyDefinition 5d3d90cd-1858-5044-b4f6-586754122132 ProxyCreateBonfire EffectProxyDefinition EffectProxyDefinition a84e5459-b44a-5dfd-9f27-c4a44b571c3a diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json deleted file mode 100644 index 2cd7eb8447..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionDefinition/Move_DissonantWhispers.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "$type": "TA.AI.DecisionDefinition, Assembly-CSharp", - "decision": { - "$type": "TA.AI.DecisionDescription, Assembly-CSharp", - "description": "Go as far as possible from enemies.", - "scorer": { - "$type": "TA.AI.ActivityScorerDefinition, Assembly-CSharp", - "scorer": { - "$type": "TA.AI.ActivityScorer, Assembly-CSharp", - "considerations": [ - { - "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", - "consideration": { - "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", - "consideration": { - "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", - "considerationType": "IsValidMoveDestination", - "curve": { - "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" - }, - "stringParameter": "", - "floatParameter": 0.0, - "intParameter": 0, - "byteParameter": 0, - "boolParameter": false, - "boolSecParameter": false, - "boolTerParameter": false - }, - "name": "IsValidMoveDestination" - }, - "weight": 1.0 - }, - { - "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", - "consideration": { - "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", - "consideration": { - "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", - "considerationType": "InfluenceEnemyProximity", - "curve": { - "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" - }, - "stringParameter": "", - "floatParameter": 3.0, - "intParameter": 2, - "byteParameter": 0, - "boolParameter": true, - "boolSecParameter": false, - "boolTerParameter": false - }, - "name": "PenalizeVeryCloseEnemyProximityAtPosition" - }, - "weight": 1.0 - }, - { - "$type": "TA.AI.WeightedConsiderationDescription, Assembly-CSharp", - "consideration": { - "$type": "TA.AI.ConsiderationDefinition, Assembly-CSharp", - "consideration": { - "$type": "TA.AI.ConsiderationDescription, Assembly-CSharp", - "considerationType": "InfluenceFearSourceProximity", - "curve": { - "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" - }, - "stringParameter": "", - "floatParameter": 6.0, - "intParameter": 1, - "byteParameter": 0, - "boolParameter": true, - "boolSecParameter": false, - "boolTerParameter": false - }, - "name": "PenalizeFearSourceProximityAtPosition" - }, - "weight": 1.0 - } - ] - }, - "name": "MoveScorer_DissonantWhispers" - }, - "activityType": "Move", - "stringParameter": "", - "stringSecParameter": "", - "boolParameter": false, - "boolSecParameter": false, - "floatParameter": 0.0, - "enumParameter": 0 - }, - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "bdfa6649-5cad-5b35-a697-209ea53ca45d", - "contentPack": 9999, - "name": "Move_DissonantWhispers" -} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/DissonantWhispers_Fear.json b/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/DissonantWhispers_Fear.json deleted file mode 100644 index 71c0556900..0000000000 --- a/Diagnostics/UnfinishedBusinessBlueprints/DecisionPackageDefinition/DissonantWhispers_Fear.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "$type": "TA.AI.DecisionPackageDefinition, Assembly-CSharp", - "dungeonMakerPresence": false, - "package": { - "$type": "TA.AI.DecisionPackageDescription, Assembly-CSharp", - "weightedDecisions": [ - { - "$type": "TA.AI.WeightedDecisionDescription, Assembly-CSharp", - "decision": "Definition:Move_DissonantWhispers:bdfa6649-5cad-5b35-a697-209ea53ca45d", - "weight": 9.0, - "cooldown": 0, - "dynamicCooldown": false - } - ] - }, - "guiPresentation": { - "$type": "GuiPresentation, Assembly-CSharp", - "hidden": true, - "title": "Feature/&NoContentTitle", - "description": "Feature/&NoContentTitle", - "spriteReference": { - "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", - "m_AssetGUID": "", - "m_SubObjectName": null, - "m_SubObjectType": null - }, - "color": { - "$type": "UnityEngine.Color, UnityEngine.CoreModule", - "r": 1.0, - "g": 1.0, - "b": 1.0, - "a": 1.0 - }, - "symbolChar": "221E", - "sortOrder": 0, - "unusedInSolastaCOTM": false, - "usedInValleyDLC": false - }, - "contentCopyright": "UserContent", - "guid": "dfe2cc9e-cc70-5cfe-9057-19454acb1068", - "contentPack": 9999, - "name": "DissonantWhispers_Fear" -} \ No newline at end of file From 8be71f29021f46e928eb0def68138a6b97ba18e8 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 13 Oct 2024 07:30:31 -0700 Subject: [PATCH 21/27] fix Circle of Nature level up instability when switching subclasses --- .../ChangelogHistory.txt | 7 +++--- .../CharacterBuildingManagerPatcher.cs | 5 +++- .../Subclasses/DomainNature.cs | 23 ++++++++++++------- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 7424202c3d..0635628165 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,12 +1,13 @@ 1.5.97.34: - added 'Allies don't resolve context rolls on grapple' setting -- fixed Dissonant Whispers under multiplayer -- fixed Circle of Wildfire enhanced bond +- fixed Dissonant Whispers on multiplayer +- fixed Circle of Nature level up instability when switching subclasses +- fixed Circle of Wildfire enhanced bond on successful save, and first target only - fixed Green-Flame Blade 2nd target damage - fixed soft lock scenarios with reaction spells, and readied actions - fixed Spike Growth 2x damage on last tile move -- fixed Wizard War Magic power surge +- fixed Wizard War Magic power surge on successful save 1.5.97.33: diff --git a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs index 7185b0f208..3e09a62cf2 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterBuildingManagerPatcher.cs @@ -179,7 +179,7 @@ public static void Prefix([NotNull] CharacterBuildingManager __instance, [NotNul public static void Postfix(CharacterBuildingManager __instance, [NotNull] RulesetCharacterHero hero) { //PATCH: grants cantrip selected by a Domain Nature on level 1 - DomainNature.GrantCantrip(hero); + DomainNature.GrantCantripFromSubclassPool(hero); //PATCH: grants spell repertoires and respective selected spells from feats LevelUpContext.GrantSpellsOrCantripsFromFeatCastSpell(__instance, hero); @@ -374,6 +374,9 @@ public static class UnassignLastSubclass_Patch [UsedImplicitly] public static bool Prefix([NotNull] RulesetCharacterHero hero) { + //PATCH: avoid Domain Nature to break level up with the cantrip it gets + DomainNature.ResetCantripSubclassPool(hero); + //PATCH: un-captures the desired subclass LevelUpContext.SetSelectedSubclass(hero, null); diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs index ed774ea4e8..c542852089 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs @@ -24,6 +24,7 @@ namespace SolastaUnfinishedBusiness.Subclasses; public sealed class DomainNature : AbstractSubclass { private const string Name = "DomainNature"; + private const string AcquiredCantripsPoolName = $"{AttributeDefinitions.TagSubclass}Cleric1{Name}{Name}"; private static readonly string[] DampenElementsDamageTypes = [ @@ -274,12 +275,21 @@ public DomainNature() internal override DeityDefinition DeityDefinition => DeityDefinitions.Maraike; - internal static void GrantCantrip(RulesetCharacterHero hero) + internal static void ResetCantripSubclassPool(RulesetCharacterHero hero) + { + var buildingData = hero.GetHeroBuildingData(); + + if (buildingData.PointPoolStacks.TryGetValue(HeroDefinitions.PointsPoolType.Cantrip, out var pointPool)) + { + pointPool.ActivePools.Remove(AcquiredCantripsPoolName); + } + } + + internal static void GrantCantripFromSubclassPool(RulesetCharacterHero hero) { var heroBuildingData = hero.GetHeroBuildingData(); - if (!heroBuildingData.AcquiredCantrips.TryGetValue( - $"06SubclassCleric1{Name}{Name}", out var cantrips)) + if (!heroBuildingData.AcquiredCantrips.TryGetValue(AcquiredCantripsPoolName, out var cantrips)) { return; } @@ -297,9 +307,7 @@ internal static void GrantCantrip(RulesetCharacterHero hero) } } - private sealed class CustomBehaviorDampenElements( - // ReSharper disable once SuggestBaseTypeForParameterInConstructor - ConditionDefinition conditionDampenElements) + private sealed class CustomBehaviorDampenElements(ConditionDefinition conditionDampenElements) : IMagicEffectBeforeHitConfirmedOnMe, ITryAlterOutcomeAttack { public IEnumerator OnMagicEffectBeforeHitConfirmedOnMe( @@ -341,11 +349,9 @@ public IEnumerator OnTryAlterOutcomeAttack( yield return Handler(battleManager, attacker, defender, actualEffectForms); } - // ReSharper disable once ParameterTypeCanBeEnumerable.Local private IEnumerator Handler( GameLocationBattleManager battleManager, GameLocationCharacter attacker, - // ReSharper disable once SuggestBaseTypeForParameter GameLocationCharacter defender, List actualEffectForms) { @@ -396,6 +402,7 @@ void ReactionValidated() { EffectHelpers.StartVisualEffect(glc, defender, PowerPaladinNeutralizePoison, EffectHelpers.EffectType.Effect); + foreach (var conditionName in damageTypes.Select(damageType => $"ConditionDomainNature{damageType}")) { rulesetDefender.InflictCondition( From 0fdf621cd105798c4bfd4963ef326e7d32dfb685 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 13 Oct 2024 08:06:50 -0700 Subject: [PATCH 22/27] minor tweaks --- .../Models/GrappleContext.cs | 4 ---- .../Subclasses/CircleOfTheWildfire.cs | 21 ++++++++++++------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/GrappleContext.cs b/SolastaUnfinishedBusiness/Models/GrappleContext.cs index 1cf9478df7..570dda5dce 100644 --- a/SolastaUnfinishedBusiness/Models/GrappleContext.cs +++ b/SolastaUnfinishedBusiness/Models/GrappleContext.cs @@ -494,10 +494,6 @@ public void OnConditionRemoved(RulesetCharacter target, RulesetCondition ruleset rulesetSource.RemoveCondition(activeConditionSource); } } - - var glc = GameLocationCharacter.GetFromActor(target); - - glc.StopMoving(LocationDefinitions.Orientation.Down, CharacterAction.InterruptionType.ForcedMovement); } } diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs index 7b46368a55..ea11a946a5 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheWildfire.cs @@ -774,7 +774,6 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( newDamageForm.DamageForm.IgnoreCriticalDoubleDice = true; newDamageForm.DamageForm.IgnoreSpellAdvancementDamageDice = true; - attacker.RulesetCharacter.LogCharacterUsedFeature(featureEnhancedBond); actualEffectForms.Insert(index + 1, newDamageForm); } @@ -791,7 +790,7 @@ public IEnumerator OnMagicEffectFinishedByMe( } foreach (var rulesetCharacter in targets - .Where(x => x.RulesetCharacter != null) + .Where(x => x.RulesetActor is RulesetCharacter) .Select(x => x.RulesetCharacter)) { rulesetCharacter.HealingReceived -= HealingReceived; @@ -809,16 +808,22 @@ public IEnumerator OnMagicEffectInitiatedByMe( yield break; } - var effectForms = activeEffect.EffectDescription.EffectForms; - var hasHealingForm = effectForms.Any(x => x.FormType == EffectForm.EffectFormType.Healing); - - if (HasSpirit(attacker.Guid) && hasHealingForm) + if (HasSpirit(attacker.Guid)) { - attacker.RulesetCharacter.LogCharacterUsedFeature(featureEnhancedBond); + var effectForms = activeEffect.EffectDescription.EffectForms; + var hasHealingForm = effectForms.Any(x => x.FormType == EffectForm.EffectFormType.Healing); + var hasDamageForm = effectForms.Any(x => + x.FormType == EffectForm.EffectFormType.Damage && + x.DamageForm.DamageType == DamageTypeFire); + + if (hasHealingForm || hasDamageForm) + { + attacker.RulesetCharacter.LogCharacterUsedFeature(featureEnhancedBond); + } } foreach (var rulesetCharacter in targets - .Where(x => x.RulesetCharacter != null) + .Where(x => x.RulesetActor is RulesetCharacter) .Select(x => x.RulesetCharacter)) { rulesetCharacter.HealingReceived += HealingReceived; From 32c31c4f1e60afa042b2df700c81a78ba015e458 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 13 Oct 2024 08:12:26 -0700 Subject: [PATCH 23/27] fix override party size setting interaction with heroes selection on new multiplayer game - fix #4985 --- .../ChangelogHistory.txt | 9 +- .../Patches/CharacterPlateSessionPatcher.cs | 168 ++++++++++++++++++ 2 files changed, 173 insertions(+), 4 deletions(-) create mode 100644 SolastaUnfinishedBusiness/Patches/CharacterPlateSessionPatcher.cs diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 0635628165..b0e1df2eb5 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,12 +1,13 @@ 1.5.97.34: - added 'Allies don't resolve context rolls on grapple' setting -- fixed Dissonant Whispers on multiplayer +- fixed battles soft lock with reaction spells, and readied actions - fixed Circle of Nature level up instability when switching subclasses -- fixed Circle of Wildfire enhanced bond on successful save, and first target only +- fixed Circle of Wildfire enhanced bond on successful save, and damage on first target only +- fixed Dissonant Whispers on multiplayer - fixed Green-Flame Blade 2nd target damage -- fixed soft lock scenarios with reaction spells, and readied actions -- fixed Spike Growth 2x damage on last tile move +- fixed override party size setting interaction with heroes selection on new multiplayer game +- fixed Spike Growth and similar 2x damage on last tile move - fixed Wizard War Magic power surge on successful save 1.5.97.33: diff --git a/SolastaUnfinishedBusiness/Patches/CharacterPlateSessionPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterPlateSessionPatcher.cs new file mode 100644 index 0000000000..642eb362d1 --- /dev/null +++ b/SolastaUnfinishedBusiness/Patches/CharacterPlateSessionPatcher.cs @@ -0,0 +1,168 @@ +using System.Diagnostics.CodeAnalysis; +using HarmonyLib; +using JetBrains.Annotations; + +namespace SolastaUnfinishedBusiness.Patches; + +[UsedImplicitly] +public static class CharacterPlateSessionPatcher +{ + [HarmonyPatch(typeof(CharacterPlateSession), nameof(CharacterPlateSession.Refresh))] + [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] + [UsedImplicitly] + public static class Refresh_Patch + { + [UsedImplicitly] + public static bool Prefix(CharacterPlateSession __instance) + { + Refresh(__instance); + + return false; + } + + // mainly vanilla code except for patch block + private static void Refresh(CharacterPlateSession __instance) + { + __instance.emptyLabel.gameObject.SetActive(__instance.GuiCharacter == null); + __instance.characterName.gameObject.SetActive(__instance.GuiCharacter != null); + __instance.characterClassAndLevel.gameObject.SetActive(__instance.GuiCharacter != null); + __instance.levelUpIcon.gameObject.SetActive( + __instance.GuiCharacter != null && + __instance.ForceLevelUpTo > __instance.GuiCharacter.CharacterLevel); + __instance.reservedCharacterStatusGroup.gameObject.SetActive(false); + + if (__instance.GuiCharacter != null) + { + __instance.characterName.Text = __instance.GuiCharacter.Name; + __instance.characterClassAndLevel.Text = __instance.GuiCharacter.ClassAndLevel; + __instance.GuiCharacter.AssignPortraitImage(__instance.characterPortrait); + } + + var service = ServiceRepository.GetService(); + var flag1 = service.LocalPlayerNumber != __instance.PlayerSlot.PlayerId; + + __instance.selectCharacterButton.gameObject.SetActive(!flag1 && __instance.GuiCharacter == null); + + if (!__instance.loadingMultiplayerSaveMode) + { + __instance.dismissCharacterButton.gameObject.SetActive(!flag1 && __instance.GuiCharacter != null); + __instance.playerRequestsGroup.gameObject.SetActive(false); + } + else + { + __instance.dismissCharacterButton.gameObject.SetActive(service.IsMasterClient || !flag1); + __instance.playerRequestsGroup.gameObject.SetActive(true); + } + + __instance.dismissCharacterButton.interactable = !__instance.locked; + __instance.dismissCharacterButtonTooltip.Content = !__instance.locked + ? "MainMenu/&ChangeCharacterSlotDescription" + : Gui.FormatFailure("MainMenu/&ChangeCharacterSlotDescription", "Failure/&FailureFlagLockedCharacter"); + __instance.requestCharacterButton.gameObject.SetActive( + __instance.loadingMultiplayerSaveMode & flag1 && !service.IsMasterClient); + + if (!service.InOnlineRoom) + { + __instance.remoteCharacterStatusLabel.gameObject.SetActive(false); + __instance.reservedCharacterStatusGroup.gameObject.SetActive(false); + __instance.playerInfoStatusGroup.gameObject.SetActive(false); + __instance.playerDropdown.gameObject.SetActive(false); + __instance.playerGamepadSelector.gameObject.SetActive(false); + __instance.playerInfoGroup.Unbind(); + __instance.playerInfoGroup.gameObject.SetActive(false); + } + else + { + if (__instance.loadingMultiplayerSaveMode) + { + __instance.playerInfoGroup.Unbind(); + __instance.playerInfoGroup.gameObject.SetActive(false); + + if (Gui.GamepadActive) + { + __instance.playerDropdown.gameObject.SetActive(false); + __instance.playerGamepadSelector.gameObject.SetActive(true); + __instance.playerGamepadSelector.interactable = + __instance.loadingMultiplayerSaveMode && service.IsMasterClient; + } + else + { + __instance.playerGamepadSelector.gameObject.SetActive(false); + __instance.playerDropdown.gameObject.SetActive(true); + __instance.playerDropdown.interactable = + __instance.loadingMultiplayerSaveMode && service.IsMasterClient; + } + } + else + { + __instance.playerGamepadSelector.gameObject.SetActive(false); + __instance.playerDropdown.gameObject.SetActive(false); + __instance.playerInfoGroup.gameObject.SetActive(true); + } + + __instance.remoteCharacterStatusLabel.gameObject.SetActive( + !__instance.loadingMultiplayerSaveMode & flag1); + + if (flag1) + { + if (!__instance.loadingMultiplayerSaveMode) + { + var remotePlayerStatus = __instance.GuiCharacter == null + ? NetworkingDefinitions.RemotePlayerStatus.SelectingCharacter + : NetworkingDefinitions.RemotePlayerStatus.Ready; + __instance.remoteCharacterStatusLabel.Text = + $"MainMenu/&RemotePlayerStatus{remotePlayerStatus}Title"; + __instance.playerInfoStatusGroup.gameObject.SetActive(true); + __instance.playerInfoGroup.Unbind(); + __instance.playerInfoGroup.Bind( + __instance.PlayerSlot, false, false, false, false, true, false, false); + } + else + { + __instance.playerInfoStatusGroup.gameObject.SetActive(false); + + if (!__instance.loadingMultiplayerSaveMode) + { + __instance.playerInfoGroup.Unbind(); + __instance.playerInfoGroup.Bind( + __instance.PlayerSlot, false, false, false, false, true, false, false); + } + else + { + __instance.RefreshPlayerDropdownOpts(); + } + } + } + else + { + if (service.IsMasterClient && !__instance.loadingMultiplayerSaveMode) + { + // BEGIN PATCH + var max = (Main.Settings.OverridePartySize - 1) / 2; + // var flag2 = __instance.index > 1; + var flag2 = __instance.index > max; + //END PATCH + + __instance.reservedCharacterStatusGroup.gameObject.SetActive(flag2); + if (flag2 && __instance.selectCharacterButton.gameObject.activeSelf) + { + __instance.selectCharacterButton.gameObject.SetActive(false); + } + } + + __instance.playerInfoStatusGroup.gameObject.SetActive(false); + if (!__instance.loadingMultiplayerSaveMode) + { + __instance.playerInfoGroup.Unbind(); + __instance.playerInfoGroup.Bind(__instance.PlayerSlot, false, false, false, false, true, false, + false); + } + else + { + __instance.RefreshPlayerDropdownOpts(); + } + } + } + } + } +} From bdaf9713121222a08854d84ddb9141268fdf2127 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 13 Oct 2024 08:36:54 -0700 Subject: [PATCH 24/27] demote AlliesDoNotResolveRollsWhenGrappled --- SolastaUnfinishedBusiness/ChangelogHistory.txt | 1 - .../Displays/CharacterDisplay.cs | 10 ---------- SolastaUnfinishedBusiness/Models/GrappleContext.cs | 13 ++++--------- SolastaUnfinishedBusiness/Settings.cs | 1 - .../Translations/de/Settings-de.txt | 1 - .../Translations/en/Settings-en.txt | 1 - .../Translations/es/Settings-es.txt | 1 - .../Translations/fr/Settings-fr.txt | 1 - .../Translations/it/Settings-it.txt | 1 - .../Translations/ja/Settings-ja.txt | 1 - .../Translations/ko/Settings-ko.txt | 1 - .../Translations/pt-BR/Settings-pt-BR.txt | 1 - .../Translations/ru/Settings-ru.txt | 1 - .../Translations/zh-CN/Settings-zh-CN.txt | 1 - 14 files changed, 4 insertions(+), 31 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index b0e1df2eb5..28e818b500 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,6 +1,5 @@ 1.5.97.34: -- added 'Allies don't resolve context rolls on grapple' setting - fixed battles soft lock with reaction spells, and readied actions - fixed Circle of Nature level up instability when switching subclasses - fixed Circle of Wildfire enhanced bond on successful save, and damage on first target only diff --git a/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs b/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs index 71eeb9fc55..90c7c48618 100644 --- a/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/CharacterDisplay.cs @@ -61,19 +61,9 @@ internal static void DisplayCharacter() if (UI.Toggle(Gui.Localize("ModUi/&AddGrappleActionToAllRaces"), ref toggle, UI.AutoWidth())) { Main.Settings.AddGrappleActionToAllRaces = toggle; - Main.Settings.AlliesDoNotResolveRollsWhenGrappled = false; GrappleContext.SwitchGrappleAction(); } - if (Main.Settings.AddGrappleActionToAllRaces) - { - toggle = Main.Settings.AlliesDoNotResolveRollsWhenGrappled; - if (UI.Toggle(Gui.Localize("ModUi/&AlliesDoNotResolveRollsWhenGrappled"), ref toggle, UI.AutoWidth())) - { - Main.Settings.AlliesDoNotResolveRollsWhenGrappled = toggle; - } - } - toggle = Main.Settings.AddHelpActionToAllRaces; if (UI.Toggle(Gui.Localize("ModUi/&AddHelpActionToAllRaces"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Models/GrappleContext.cs b/SolastaUnfinishedBusiness/Models/GrappleContext.cs index 570dda5dce..869a5a58a9 100644 --- a/SolastaUnfinishedBusiness/Models/GrappleContext.cs +++ b/SolastaUnfinishedBusiness/Models/GrappleContext.cs @@ -382,16 +382,11 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, attacker.BurnOneMainAttack(); - var success = true; + yield return TryAlterOutcomeAttributeCheck.ResolveRolls( + attacker, defender, ActionDefinitions.Id.NoAction, abilityCheckData); - if (!Main.Settings.AlliesDoNotResolveRollsWhenGrappled || defender.IsOppositeSide(attacker.Side)) - { - yield return TryAlterOutcomeAttributeCheck.ResolveRolls( - attacker, defender, ActionDefinitions.Id.NoAction, abilityCheckData); - - success = - abilityCheckData.AbilityCheckRollOutcome is RollOutcome.Success or RollOutcome.CriticalSuccess; - } + var success = + abilityCheckData.AbilityCheckRollOutcome is RollOutcome.Success or RollOutcome.CriticalSuccess; if (!success) { diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index ab958f63de..d9c6fba456 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -178,7 +178,6 @@ public class Settings : UnityModManager.ModSettings public bool DisableSenseSuperiorDarkVisionFromAllRaces { get; set; } public bool AddFallProneActionToAllRaces { get; set; } public bool AddGrappleActionToAllRaces { get; set; } - public bool AlliesDoNotResolveRollsWhenGrappled { get; set; } public bool AddHelpActionToAllRaces { get; set; } public bool EnableAlternateHuman { get; set; } public bool EnableFlexibleRaces { get; set; } diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 58bd552f97..dbaa5f3bf6 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -19,7 +19,6 @@ ModUi/&Advanced=Erweitert: [Neusta ModUi/&AdvancedHelp=• ACHTUNG: Diese Einstellungen erfordern, dass der Player diesen Mod installiert hat ModUi/&AllItemInDm=Alle Artikel in DM ModUi/&AllRecipesInDm=Alle Rezepte in DM -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Verbündete führen keine Kontextwürfe beim Ringen aus ModUi/&AllowAllPlayersOnNarrativeSequences=+ Alle Spieler in Erzählsequenzen zulassen ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Erlaubt Verbündeten, Ranger GloomStalker in natürlicher Dunkelheit wahrzunehmen ModUi/&AllowAnyClassToWearSylvanArmor=Erlaube jeder Klasse, Sylvan-Rüstung oder Lichtbringer-Kleidung zu tragen diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index aaa83f4d0e..8d1e7f1b3a 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -19,7 +19,6 @@ ModUi/&Advanced=Advanced: [Require ModUi/&AdvancedHelp=• ATTENTION: These settings will require the player to have this mod installed ModUi/&AllItemInDm=All items in DM ModUi/&AllRecipesInDm=All recipes in DM -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Allies don't resolve context rolls on grapple ModUi/&AllowAllPlayersOnNarrativeSequences=+ Allow all players on narrative sequences ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Allow allies to perceive Ranger GloomStalker when in natural darkness ModUi/&AllowAnyClassToWearSylvanArmor=Allow any class to wear Sylvan Armor or Lightbringer Clothes diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index b00dfbf98e..f2879e8593 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -19,7 +19,6 @@ ModUi/&Advanced=Avanzado: [Requier ModUi/&AdvancedHelp=• ATENCIÓN: Esta configuración requerirá que el reproductor tenga instalado este mod. ModUi/&AllItemInDm=Todos los artículos en DM ModUi/&AllRecipesInDm=Todas las recetas en DM. -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Los aliados no resuelven las tiradas de contexto al agarrar ModUi/&AllowAllPlayersOnNarrativeSequences=+ Permitir a todos los jugadores en secuencias narrativas ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que los aliados perciban a Ranger GloomStalker cuando se encuentran en oscuridad natural ModUi/&AllowAnyClassToWearSylvanArmor=Permitir que cualquier clase use Armadura Sylvan o Ropa de Iluminador diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 11b57d897f..1a5eeaae58 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -19,7 +19,6 @@ ModUi/&Advanced=Avancé : [Néces ModUi/&AdvancedHelp=• ATTENTION : Ces paramètres nécessiteront que le joueur ait installé ce mod. ModUi/&AllItemInDm=Tous les articles en DM ModUi/&AllRecipesInDm=Toutes les recettes en DM -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Les alliés ne résolvent pas les jets de contexte lors de la lutte ModUi/&AllowAllPlayersOnNarrativeSequences=+ Autoriser tous les joueurs sur les séquences narratives ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permettre aux alliés de percevoir Ranger GloomStalker lorsqu'ils sont dans l'obscurité naturelle ModUi/&AllowAnyClassToWearSylvanArmor=Autoriser n'importe quelle classe à porter une armure sylvestre ou des vêtements de porteur de lumière diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 65b5266c31..885fdde801 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -19,7 +19,6 @@ ModUi/&Advanced=Avanzate: [Richied ModUi/&AdvancedHelp=• ATTENZIONE: Queste impostazioni richiederanno che il giocatore abbia installato questa mod ModUi/&AllItemInDm=Tutti gli articoli in DM ModUi/&AllRecipesInDm=Tutte le ricette in DM -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Gli alleati non risolvono i tiri di contesto durante la lotta ModUi/&AllowAllPlayersOnNarrativeSequences=+ Consenti a tutti i giocatori sequenze narrative ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Consenti agli alleati di percepire Ranger GloomStalker quando si trovano nell'oscurità naturale ModUi/&AllowAnyClassToWearSylvanArmor=Consenti a qualsiasi classe di indossare Armatura Silvana o Abiti da Portatore di Luce diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index ca79f95cbc..e77ecc77bd 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -19,7 +19,6 @@ ModUi/&Advanced=詳細: [再起動 ModUi/&AdvancedHelp=• 注意: これらの設定を行うには、プレーヤーにこの MOD がインストールされている必要があります。 ModUi/&AllItemInDm=DM内のすべてのアイテム ModUi/&AllRecipesInDm=すべてのレシピはDMにあります -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 味方はグラップル時にコンテキストロールを解決しません ModUi/&AllowAllPlayersOnNarrativeSequences=+ すべてのプレイヤーに物語シーケンスを許可 ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=自然の暗闇にいるときに味方がレンジャー グロウムストーカーを感知できるようにする ModUi/&AllowAnyClassToWearSylvanArmor=どのクラスも森の鎧またはライトブリンガーの服を着用できるようにする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index e1701288ca..fd274d4e3f 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -19,7 +19,6 @@ ModUi/&Advanced=고급: [다시 ModUi/&AdvancedHelp=• 주의: 이 설정을 사용하려면 플레이어에 이 모드가 설치되어 있어야 합니다. ModUi/&AllItemInDm=DM의 모든 항목 ModUi/&AllRecipesInDm=모든 레시피는 DM에 있어요 -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 동맹군은 씨름에서 컨텍스트 롤을 해결하지 못합니다. ModUi/&AllowAllPlayersOnNarrativeSequences=+ 내러티브 시퀀스에서 모든 플레이어 허용 ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=자연스러운 어둠 속에서 아군이 레인저 글룸스토커를 인식하도록 허용합니다. ModUi/&AllowAnyClassToWearSylvanArmor=모든 클래스가 실반 갑옷 또는 빛의 인도자 옷을 착용할 수 있도록 허용합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index c90377df4d..2e57f0595d 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -19,7 +19,6 @@ ModUi/&Advanced=Avançado: [Requer ModUi/&AdvancedHelp=• ATENÇÃO: Essas configurações exigirão que o jogador tenha este mod instalado ModUi/&AllItemInDm=Todos os itens no DM ModUi/&AllRecipesInDm=Todas as receitas em DM -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Aliados não resolvem testes de contexto em agarrar ModUi/&AllowAllPlayersOnNarrativeSequences=+ Permitir todos os jogadores em sequências narrativas ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Permitir que os aliados percebam Ranger GloomStalker quando na escuridão natural ModUi/&AllowAnyClassToWearSylvanArmor=Permitir que qualquer classe use Armadura Sylvan ou Roupas Lightbringer diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 3cf7515c12..02e20b34b9 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -19,7 +19,6 @@ ModUi/&Advanced=Продвинутый: ВНИМАНИЕ: Для этих настроек необходимо, чтобы у игрока был установлен этот мод ModUi/&AllItemInDm=Все предметы в СП ModUi/&AllRecipesInDm=Все рецепты в СП -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ Союзники не выполняют контекстные броски при захвате ModUi/&AllowAllPlayersOnNarrativeSequences=+ Позволить всем игрокам участвовать в нарративных последовательностях ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=Позволить союзникам замечать Сумрачного охотника в естественной темноте ModUi/&AllowAnyClassToWearSylvanArmor=Позволить всем классам носить Доспехи Сильвана или Одежды Несущего свет diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 7fe014d87d..bf7c0c6dc5 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -19,7 +19,6 @@ ModUi/&Advanced=高级:[需要 ModUi/&AdvancedHelp=•注意:这些设置将要求玩家安装此模组 ModUi/&AllItemInDm=DM中的所有项目 ModUi/&AllRecipesInDm=冒险中的所有配方 -ModUi/&AlliesDoNotResolveRollsWhenGrappled=+ 盟友不会解决擒抱上的上下文掷骰 ModUi/&AllowAllPlayersOnNarrativeSequences=+允许所有玩家进行叙述序列 ModUi/&AllowAlliesToPerceiveRangerGloomStalkerInNaturalDarkness=允许盟友在自然黑暗中感知Ranger GloomStalker ModUi/&AllowAnyClassToWearSylvanArmor=允许任何职业穿森林之甲或光明使者之衣 From 4a736ef741c120689883a3b55a062d3a14d45eda Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 13 Oct 2024 08:37:25 -0700 Subject: [PATCH 25/27] auto format and clean up --- SolastaUnfinishedBusiness/Patches/RulesetEffectSpellPatcher.cs | 2 +- SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs | 2 +- SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/RulesetEffectSpellPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetEffectSpellPatcher.cs index ff7749a69d..80d0161ce3 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetEffectSpellPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetEffectSpellPatcher.cs @@ -16,7 +16,7 @@ namespace SolastaUnfinishedBusiness.Patches; [UsedImplicitly] public static class RulesetEffectSpellPatcher { - //PATCH: supports CasterLevelTable with recurrent effects + //PATCH: supports CasterLevelTable with recurrent effects [HarmonyPatch(typeof(RulesetEffectSpell), nameof(RulesetEffectSpell.ApplyEffectOnCharacter))] [SuppressMessage("Minor Code Smell", "S101:Types should be named in PascalCase", Justification = "Patch")] [UsedImplicitly] diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 8205322fe4..0cfceb107c 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -241,7 +241,7 @@ internal static SpellDefinition BuildCreateBonfire() .Create(WallOfFireLine) .SetDurationData(DurationType.Minute, 1) .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.Cube) - .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) + .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, true, EffectDifficultyClassComputation.SpellCastingFeature) .SetRecurrentEffect( diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 0a20f4ceb1..80c6687980 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -1694,7 +1694,7 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, yield return pathfindingService .ComputeValidDestinationsAsync(target, target.LocationPosition, target.MaxTacticalMoves * 2); - + var positioningService = ServiceRepository.GetService(); var casterPosition = action.ActingCharacter.LocationPosition; var destinationPosition = target.LocationPosition; From 1c312bb00bc3c25180146fcd5935d7f7113b29ab Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 13 Oct 2024 09:43:26 -0700 Subject: [PATCH 26/27] fix GFB interaction with reaction powers --- .../ConditionResonatingStrike.json | 4 +--- .../ChangelogHistory.txt | 6 +++--- .../Spells/SpellBuildersCantrips.cs | 21 +++++++++++++++++-- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json index f9a3235aef..8b03562286 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionResonatingStrike.json @@ -17,9 +17,7 @@ "durationParameter": 1, "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", - "specialInterruptions": [ - 9007 - ], + "specialInterruptions": [], "interruptionRequiresSavingThrow": false, "interruptionSavingThrowComputationMethod": "SaveOverride", "interruptionSavingThrowAbility": "", diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 28e818b500..349fd1229a 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -3,9 +3,9 @@ - fixed battles soft lock with reaction spells, and readied actions - fixed Circle of Nature level up instability when switching subclasses - fixed Circle of Wildfire enhanced bond on successful save, and damage on first target only -- fixed Dissonant Whispers on multiplayer -- fixed Green-Flame Blade 2nd target damage -- fixed override party size setting interaction with heroes selection on new multiplayer game +- fixed Dissonant Whispers de-sync on multiplayer +- fixed Green-Flame Blade 2nd target damage, and interaction with reaction powers +- fixed override party size setting interaction with heroes selection on new multiplayer - fixed Spike Growth and similar 2x damage on last tile move - fixed Wizard War Magic power surge on successful save diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 0cfceb107c..f5af68beb5 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -1099,7 +1099,6 @@ internal static SpellDefinition BuildResonatingStrike() .SetGuiPresentationNoContent(true) .SetSilent(Silent.WhenAddedOrRemoved) .SetFeatures(additionalDamageResonatingStrike) - .SetSpecialInterruptions(ExtraConditionInterruption.SpendPowerExecuted) .AddToDB(); conditionResonatingStrike.AddCustomSubFeatures( @@ -1206,8 +1205,26 @@ public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, private sealed class CustomBehaviorConditionResonatingStrike( ConditionDefinition conditionResonatingStrike, - FeatureDefinitionPower powerResonatingStrikeDamage) : IPhysicalAttackFinishedByMe, IModifyEffectDescription + FeatureDefinitionPower powerResonatingStrikeDamage) + : IMagicEffectFinishedByMe, IPhysicalAttackFinishedByMe, IModifyEffectDescription { + public IEnumerator OnMagicEffectFinishedByMe(CharacterAction action, GameLocationCharacter attacker, + List targets) + { + if (action.ActionParams.RulesetEffect.SourceDefinition != powerResonatingStrikeDamage) + { + yield break; + } + + var rulesetCharacter = action.ActingCharacter.RulesetCharacter; + + if (rulesetCharacter.TryGetConditionOfCategoryAndType( + AttributeDefinitions.TagEffect, conditionResonatingStrike.Name, out var activeCondition)) + { + rulesetCharacter.RemoveCondition(activeCondition); + } + } + public bool IsValid(BaseDefinition definition, RulesetCharacter character, EffectDescription effectDescription) { return definition == powerResonatingStrikeDamage; From 49b9944711faf48179449c153ca3c5a2b6c5d0aa Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 13 Oct 2024 09:50:29 -0700 Subject: [PATCH 27/27] prepare for `1.5.97.34` release --- SolastaUnfinishedBusiness/Info.json | 2 +- SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Info.json b/SolastaUnfinishedBusiness/Info.json index 90108ac3f7..75737fca51 100644 --- a/SolastaUnfinishedBusiness/Info.json +++ b/SolastaUnfinishedBusiness/Info.json @@ -1,7 +1,7 @@ { "Id": "SolastaUnfinishedBusiness", "DisplayName": "[Un] Finished Business", - "Version": "1.5.97.33", + "Version": "1.5.97.34", "GameVersion": "1.5.97", "ManagerVersion": "0.24.0", "AssemblyName": "SolastaUnfinishedBusiness.dll", diff --git a/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj b/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj index 45af69d066..b4426a4e75 100644 --- a/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj +++ b/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj @@ -3,7 +3,7 @@ 12 net48 - 1.5.97.33 + 1.5.97.34 https://github.com/SolastaMods/SolastaUnfinishedBusiness git Debug Install;Release Install