From 14fcc5b846fd45800b241b1571aff481f43ebe8e Mon Sep 17 00:00:00 2001 From: kdgmo <135420589+kdgmo@users.noreply.github.com> Date: Sat, 9 Nov 2024 13:21:12 +0900 Subject: [PATCH 01/44] Update WizardAbjuration-ko.txt Signed-off-by: kdgmo <135420589+kdgmo@users.noreply.github.com> --- .../ko/SubClasses/WizardAbjuration-ko.txt | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt index 30ed8f55f8..ca4b280aa1 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardAbjuration-ko.txt @@ -1,35 +1,35 @@ -Condition/&ConditionWizardAbjurationArcaneWardDescription=비전의 보호막이 활성화되었습니다. -Condition/&ConditionWizardAbjurationArcaneWardTitle=비전의 보호막 -Feature/&MagicAffinityWizardAbjurationSavant2024Description=Abjuration 학교에서 마법사 주문 두 개를 선택하여 주문서에 무료로 추가하세요. 또한, 이 클래스에서 새로운 레벨의 주문 슬롯에 접근할 때마다 Abjuration 학교에서 마법사 주문 하나를 주문서에 무료로 추가할 수 있습니다. -Feature/&MagicAffinityWizardAbjurationSavant2024Title=에보케이션 사반트 -Feature/&MagicAffinityWizardAbjurationScriberDescription=2레벨에서 이 학교를 선택하면 주문서에 유발 주문을 복사하는 데 필요한 골드와 시간이 절반으로 줄어듭니다. -Feature/&MagicAffinityWizardAbjurationScriberTitle=포기 학자 -Feature/&PowerWizardAbjurationArcaneWardBG3Description=주문의 잔여 마법은 주변에 보호막을 형성하여 해를 입지 않도록 보호합니다. Abjuration 주문을 시전할 때마다 보호막의 강도는 주문 레벨만큼 증가하며, 최대 위저드 레벨의 2배까지 증가합니다.\피해를 입으면 보호막은 강도와 같은 양의 피해를 차단하고 강도는 1만큼 감소합니다.\n긴 휴식을 취할 때마다 보호막의 강도가 재설정되어 위저드 레벨과 같아집니다. -Feature/&PowerWizardAbjurationArcaneWardDescription=1레벨 이상의 회피 주문을 시전하면 긴 휴식을 마칠 때까지 지속되는 마법의 보호막을 자신에게 생성합니다. 보호막은 마법사 레벨 + 지능 수정치의 두 배에 해당하는 체력 포인트를 갖습니다. 피해를 입을 때마다 보호막이 대신 피해를 입습니다. 1레벨 이상의 회피 주문을 시전할 때마다 보호막은 소모한 주문 슬롯 레벨의 두 배에 해당하는 체력 포인트를 회복합니다. -Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=비전의 보호막 -Feature/&PowerWizardAbjurationArcaneWardTitle=비전의 보호막 -Feature/&PowerWizardAbjurationImprovedAbjurationDescription=카운터스펠과 디스펠 매직 능력치 검사에 숙련도 보너스를 추가하세요. -Feature/&PowerWizardAbjurationImprovedAbjurationTitle=향상된 포기 -Feature/&PowerWizardAbjurationProjectedWardDescription=30피트 이내에서 볼 수 있는 아군이 피해를 입으면 반응을 사용하여 Arcane Ward가 그 피해를 흡수하도록 할 수 있습니다. 이 피해로 인해 Ward의 생명력이 0이 되면, 보호된 생물은 남은 피해를 입습니다. -Feature/&PowerWizardAbjurationProjectedWardTitle=예상 병동 +Condition/&ConditionWizardAbjurationArcaneWardDescription=비전 보호막이 활성화되었습니다. +Condition/&ConditionWizardAbjurationArcaneWardTitle=비전 보호막 +Feature/&MagicAffinityWizardAbjurationSavant2024Description=방호학파에서 위자드 주문 두 개를 선택하여 주문서에 무료로 추가하세요. 또한, 이 클래스에서 새로운 레벨의 주문슬롯에 접근할 때마다 방호학파에서 위자드 주문 하나를 주문서에 무료로 추가할 수 있습니다. +Feature/&MagicAffinityWizardAbjurationSavant2024Title=앱져레이션 사반트 +Feature/&MagicAffinityWizardAbjurationScriberDescription=2레벨에서 이 학교를 선택하면 주문서에 방호학파 주문을 복사하는 데 필요한 골드와 시간이 절반으로 줄어듭니다. +Feature/&MagicAffinityWizardAbjurationScriberTitle=방호 학파 학자 +Feature/&PowerWizardAbjurationArcaneWardBG3Description=주문의 잔여 마법은 주변에 보호막을 형성하여 해를 입지 않도록 보호합니다. 방호학파 주문을 시전할 때마다 보호막의 강도는 주문 레벨만큼 증가하며, 최대 위저드 레벨의 2배까지 증가합니다.\n피해를 입으면 보호막은 강도와 같은 양의 피해를 차단하고 강도는 1만큼 감소합니다.\n긴 휴식을 취할 때마다 보호막의 강도가 재설정되어 위저드 레벨과 같아집니다. +Feature/&PowerWizardAbjurationArcaneWardDescription=1레벨 이상의 방호학파 주문을 시전하면 긴 휴식을 마칠 때까지 지속되는 마법의 보호막을 자신에게 생성합니다. 보호막은 마법사 레벨 + 지능 수정치의 두 배에 해당하는 체력 포인트를 갖습니다.\n피해를 입을 때마다 보호막이 대신 피해를 입습니다. 1레벨 이상의 방호학파 주문을 시전할 때마다 보호막은 소모한 주문 슬롯 레벨의 두 배에 해당하는 체력 포인트를 회복합니다. +Feature/&PowerWizardAbjurationArcaneWardReduceDamageTitle=비전 보호막 +Feature/&PowerWizardAbjurationArcaneWardTitle=비전 보호막 +Feature/&PowerWizardAbjurationImprovedAbjurationDescription=카운터스펠과 디스펠 매직의 주문 DC 검사에 숙련도 보너스를 추가하세요. +Feature/&PowerWizardAbjurationImprovedAbjurationTitle=향상된 방호 +Feature/&PowerWizardAbjurationProjectedWardDescription=30피트 이내에서 볼 수 있는 아군이 피해를 입으면, 비전 보호막이 그 피해를 흡수하도록 할 수 있습니다. 이 피해로 인해 보호막의 생명력이 0이 되면, 보호된 생물은 남은 피해를 입습니다. +Feature/&PowerWizardAbjurationProjectedWardTitle=결속된 비전 보호막 Feature/&PowerWizardAbjurationRechargeArcaneWardDescription=보너스 액션으로, 주문 슬롯을 사용하면 비전 보호막이 사용한 주문 슬롯 레벨의 2배에 해당하는 생명력을 회복합니다. -Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=아케인 워드 재충전 -Feature/&PowerWizardAbjurationSpellResistanceDescription=주문에 대한 세이빙 스로우와 주문 피해에 대한 저항력에서 이점을 얻습니다. +Feature/&PowerWizardAbjurationRechargeArcaneWardTitle=비전 보호막 재충전 +Feature/&PowerWizardAbjurationSpellResistanceDescription=주문에 대한 내성 굴림에 이점을 얻고, 주문 피해에 대한 저항을 얻습니다. Feature/&PowerWizardAbjurationSpellResistanceTitle=주문 저항력 Feedback/&ArcaneWard={0}은 {1}을 가지고 있으며 피해를 {2}만큼 감소시킵니다. Feedback/&ArcaneWardRecharge={0}의 {1}은 {2}의 생명력을 회복합니다. Feedback/&ProjectedWard={0}은 {1}을 사용하여 {2}이 받는 피해를 줄입니다. Reaction/&SpendPowerProjectedWardDescription={0}이(가) 피해를 입으려고 합니다. {1}이 반응하여 비전 보호를 투사하여 피해를 줄일 수 있습니다. Reaction/&SpendPowerProjectedWardReactDescription=비전의 보호막으로 피해를 흡수하세요. -Reaction/&SpendPowerProjectedWardReactTitle=프로젝트 워드 -Reaction/&SpendPowerProjectedWardTitle=예상 병동 +Reaction/&SpendPowerProjectedWardReactTitle=결속된 비전 보호막 +Reaction/&SpendPowerProjectedWardTitle=결속된 비전 보호막 Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardDescription=주문 슬롯을 사용하면 비전 보호막이 사용한 주문 슬롯 레벨의 2배에 해당하는 생명력을 회복합니다. Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactDescription=주문 슬롯 소모 -Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=충전 병동 -Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=아케인 워드 재충전 +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardReactTitle=비전 보호막 충전 +Reaction/&SpendSpellSlotPowerWizardAbjurationRechargeArcaneWardTitle=비전 보호막 재충전 Reaction/&SubitemSelectPowerWizardAbjurationRechargeArcaneWardTitle=슬롯 선택 -Subclass/&WizardAbjurationDescription=Abjuration School은 차단, 추방 또는 보호하는 마법을 강조합니다. 자랑스럽고 존경받는 직업입니다. Abjurers라고 불리는 이 학교의 구성원은 사악한 영혼이 엑소시즘을 필요로 할 때, 중요한 장소를 마법적 감시로부터 보호해야 할 때, 다른 존재 평면으로 가는 포털을 닫아야 할 때 찾습니다. -Subclass/&WizardAbjurationTitle=포기 +Subclass/&WizardAbjurationDescription=방호학파 주문은 차단, 추방 또는 보호하는 마법을 강조합니다. 자랑스럽고 존경받는 직업입니다. 방호라고 불리는 이 학교의 구성원은 사악한 영혼이 엑소시즘을 필요로 할 때, 중요한 장소를 마법적 감시로부터 보호해야 할 때, 다른 존재 평면으로 가는 포털을 닫아야 할 때 찾습니다. +Subclass/&WizardAbjurationTitle=방호학파 Tag/&AbjurerSpellSpecialTagTitle=하위 클래스 주문 Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardBG3PointsFormat=당신은 {0}의 {1}개의 비전 보호막을 가지고 있습니다.\n당신이 피해를 입으면, 보호막은 그 강도와 같은 양의 피해를 차단하고, 그 강도는 1만큼 감소합니다. 당신이 회피 주문을 시전한 후에는 보호막의 강도가 주문 레벨에 따라 증가하며, 최대 마법사 레벨의 2배까지 증가합니다. Tooltip/&PortraitPoolPowerWizardAbjurationArcaneWardPointsFormat={0}의 {1}개의 Arcane Ward를 보유하고 있습니다.\n피해를 입을 때마다 Ward는 피해량을 그 값만큼 감소시키고 방지한 피해량만큼 감소시킵니다. 1+레벨의 금지 주문을 시전할 때마다 Ward는 소모한 주문 슬롯 레벨의 2배에 해당하는 체력 포인트를 회복합니다. From f9a39e046fd3cb006ffe6b88929e961e793d2eb5 Mon Sep 17 00:00:00 2001 From: kdgmo <135420589+kdgmo@users.noreply.github.com> Date: Sat, 9 Nov 2024 14:18:46 +0900 Subject: [PATCH 02/44] Update WizardEvocation-ko.txt Translated more smoothly for Korean. Signed-off-by: kdgmo <135420589+kdgmo@users.noreply.github.com> --- .../ko/SubClasses/WizardEvocation-ko.txt | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardEvocation-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardEvocation-ko.txt index 348830c552..77131c2c2d 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardEvocation-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/SubClasses/WizardEvocation-ko.txt @@ -1,17 +1,17 @@ Action/&OverChannelToggleDescription=오버채널 활성화/비활성화 Action/&OverChannelToggleTitle=오버채널 -Feature/&FeatureSetWizardEvocationOverChannelDescription=더 간단한 주문의 힘을 증가시킬 수 있습니다. 피해를 입히는 1~5레벨 마법사 주문을 시전하면 해당 주문으로 최대 피해를 입힐 수 있습니다. 처음 시전할 때는 불리한 효과가 없습니다. 긴 휴식을 마치기 전에 이 기능을 다시 사용하면 시전 직후 주문 레벨당 2d12의 괴사 피해를 입습니다. 긴 휴식을 마치기 전에 이 기능을 다시 사용할 때마다 주문 레벨당 괴사 피해가 1d12씩 증가합니다. 이 피해는 저항력과 면역을 무시합니다. +Feature/&FeatureSetWizardEvocationOverChannelDescription=간단한 주문의 힘을 더 증가시킬 수 있습니다. 피해를 입히는 1~5레벨 위자드 주문을 시전하면 해당 주문으로 최대 피해를 입힐 수 있습니다. 처음 시전할 때는 불리한 효과가 없습니다. 긴 휴식을 마치기 전에 이 기능을 다시 사용하면 시전 직후 주문 레벨당 2d12의 괴사 피해를 입습니다. 긴 휴식을 마치기 전에 이 기능을 다시 사용할 때마다 주문 레벨당 괴사 피해가 1d12씩 증가합니다. 이 피해는 저항력과 면역을 무시합니다. Feature/&FeatureSetWizardEvocationOverChannelTitle=오버채널 -Feature/&FeatureWizardEvocationEmpoweredEvocationDescription=당신은 당신이 시전하는 모든 마법사 유발 주문의 피해 굴림 하나에 지능 수정치(최소 +1)를 추가할 수 있습니다. -Feature/&FeatureWizardEvocationEmpoweredEvocationTitle=강화된 유발 -Feature/&FeatureWizardEvocationSculptSpellsDescription=다른 생물에게 영향을 줄 수 있는 유발 주문을 시전할 때마다 상대적으로 안전한 지역을 만들어낼 수 있으며, 이로 인해 눈에 띄는 아군 생물은 주문의 영향을 받지 않게 됩니다. +Feature/&FeatureWizardEvocationEmpoweredEvocationDescription=당신은 당신이 시전하는 모든 위자드 방출 주문의 피해 굴림 하나에 지능 수정치(최소 +1)를 추가할 수 있습니다. +Feature/&FeatureWizardEvocationEmpoweredEvocationTitle=강화된 방출 +Feature/&FeatureWizardEvocationSculptSpellsDescription=다른 생물에게 영향을 줄 수 있는 방출 주문을 시전할 때마다 상대적으로 안전한 지역을 만들어낼 수 있으며, 이로 인해 눈에 띄는 아군 생물은 주문의 영향을 받지 않게 됩니다. Feature/&FeatureWizardEvocationSculptSpellsTitle=조각 주문 -Feature/&MagicAffinityWizardEvocationPotentCantripDescription=당신의 피해를 주는 칸트립은 그 효과의 대부분을 피하는 생명체에게도 영향을 미칩니다. 생명체가 당신의 칸트립에 대한 세이빙 스로우에 성공하면, 그 생명체는 칸트립 피해의 절반(있는 경우)을 받지만 칸트립의 추가 효과는 받지 않습니다. 공격 굴림이 필요한 칸트립으로 생명체를 맞히면, 그 칸트립의 피해 굴림 하나에 숙련도 보너스를 더합니다. +Feature/&MagicAffinityWizardEvocationPotentCantripDescription=당신의 피해를 주는 캔트립은 그 효과의 대부분을 피하는 생명체에게도 영향을 미칩니다. 생명체가 당신의 캔트립에 대한 내성 굴림에 성공하면, 그 생명체는 캔트립 피해의 절반(있는 경우)을 받지만 캔트립의 추가 효과는 받지 않습니다. 명중 굴림이 필요한 캔트립으로 생명체를 맞히면, 그 캔트립의 피해 굴림 하나에 숙련도 보너스를 더합니다. Feature/&MagicAffinityWizardEvocationPotentCantripTitle=강력한 주문 -Feature/&MagicAffinityWizardEvocationSavant2024Description=Evocation 학교에서 마법사 주문 두 개를 선택하여 주문서에 무료로 추가하세요. 또한, 이 클래스에서 새로운 레벨의 주문 슬롯에 접근할 때마다 Evocation 학교에서 마법사 주문 하나를 주문서에 무료로 추가할 수 있습니다. -Feature/&MagicAffinityWizardEvocationSavant2024Title=에보케이션 사반트 -Feature/&MagicAffinityWizardEvocationSavantDescription=2레벨에서 이 학교를 선택하면 주문서에 유발 주문을 복사하는 데 필요한 골드와 시간이 절반으로 줄어듭니다. -Feature/&MagicAffinityWizardEvocationSavantTitle=에보케이션 사반트 -Subclass/&WizardEvocationDescription=당신은 혹한, 뜨거운 불길, 굴러가는 천둥, 딱딱거리는 번개, 불타는 산과 같은 강력한 원소 효과를 만들어내는 마법에 집중합니다. 일부 소환사는 군대에서 일자리를 찾아 멀리서 적군을 폭격하는 포병으로 일합니다. 다른 사람들은 약자를 보호하기 위해 화려한 힘을 사용하는 반면, 일부는 산적, 모험가 또는 야심 찬 폭군으로서 자신의 이익을 추구합니다. -Subclass/&WizardEvocationTitle=유발 +Feature/&MagicAffinityWizardEvocationSavant2024Description=방출학파에서 위자드 주문 두 개를 선택하여 주문서에 무료로 추가하세요. 또한, 이 클래스에서 새로운 레벨의 주문 슬롯에 접근할 때마다 방출학파에서 마법사 주문 하나를 주문서에 무료로 추가할 수 있습니다. +Feature/&MagicAffinityWizardEvocationSavant2024Title=이보케이션 사반트 +Feature/&MagicAffinityWizardEvocationSavantDescription=2레벨에서 이 학파를 선택하면 주문서에 방출 주문을 복사하는 데 필요한 골드와 시간이 절반으로 줄어듭니다. +Feature/&MagicAffinityWizardEvocationSavantTitle=이보케이션 사반트 +Subclass/&WizardEvocationDescription=당신은 혹한, 뜨거운 불길, 굴러가는 천둥, 딱딱거리는 번개, 불타는 산과 같은 강력한 원소 효과를 만들어내는 마법에 능숙 합니다. 일부 마법사는 군대에서 일자리를 찾아 멀리서 적군을 폭격하는 포병으로 일합니다. 다른 사람들은 약자를 보호하기 위해 화려한 힘을 사용하는 반면, 일부는 산적, 모험가 또는 야심 찬 폭군으로서 자신의 이익을 추구합니다. +Subclass/&WizardEvocationTitle=방출학파 Tag/&EvokerSpellSpecialTagTitle=하위 클래스 주문 From 45bc204d752b634dd28e1fbf636cc0709dfe3184 Mon Sep 17 00:00:00 2001 From: Silvergriffon Date: Fri, 8 Nov 2024 22:48:49 -0500 Subject: [PATCH 03/44] settings --- .../Properties/Settings.Designer.cs | 26 +++++++++++++++++++ .../Properties/Settings.settings | 6 +++++ 2 files changed, 32 insertions(+) create mode 100644 SolastaUnfinishedBusiness/Properties/Settings.Designer.cs create mode 100644 SolastaUnfinishedBusiness/Properties/Settings.settings diff --git a/SolastaUnfinishedBusiness/Properties/Settings.Designer.cs b/SolastaUnfinishedBusiness/Properties/Settings.Designer.cs new file mode 100644 index 0000000000..6558979678 --- /dev/null +++ b/SolastaUnfinishedBusiness/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace SolastaUnfinishedBusiness.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.11.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/SolastaUnfinishedBusiness/Properties/Settings.settings b/SolastaUnfinishedBusiness/Properties/Settings.settings new file mode 100644 index 0000000000..049245f401 --- /dev/null +++ b/SolastaUnfinishedBusiness/Properties/Settings.settings @@ -0,0 +1,6 @@ + + + + + + From 2d49ef1b23a27f00f50cb350e42cd0c66314629b Mon Sep 17 00:00:00 2001 From: Silvergriffon Date: Sat, 9 Nov 2024 02:58:56 -0500 Subject: [PATCH 04/44] fix bonus action potions with action affinity - requires new character or respec --- .../Models/Tabletop2024Context.cs | 74 ++++++++++++++----- 1 file changed, 55 insertions(+), 19 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 1d173b7f12..dfbfcfa2f9 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -35,11 +35,35 @@ using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionProficiencys; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAttackModifiers; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionDamageAffinitys; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; namespace SolastaUnfinishedBusiness.Models; internal static class Tabletop2024Context { + private static readonly FeatureDefinitionActionAffinity ActionAffinityPotionBonusAction = + FeatureDefinitionActionAffinityBuilder + .Create($"ActionAffinityPotionBonusAction") + .SetGuiPresentationNoContent(true) + .AddCustomSubFeatures( + new ValidateDeviceFunctionUse((_, device, _) => + device.UsableDeviceDescription.UsableDeviceTags.Contains("Potion") && + (device.Name.Contains("Healing") || + device.Name.Contains("Remedy") || + device.Name.Contains("Antitoxin")))) + .SetAuthorizedActions(Id.UseItemBonus) + .AddToDB(); + + //private static ItemPropertyDescription ItemPropertyPotionBonusAction = + //new ItemPropertyDescription(RingFeatherFalling.StaticProperties[0]) + //{ + // appliesOnItemOnly = false, + // type = ItemPropertyDescription.PropertyType.Feature, + // featureDefinition = ActionAffinityPotionBonusAction, + // conditionDefinition = null, + // knowledgeAffinity = EquipmentDefinitions.KnowledgeAffinity.ActiveAndHidden + //}; + private static readonly FeatureDefinitionCombatAffinity CombatAffinityConditionSurprised = FeatureDefinitionCombatAffinityBuilder .Create("CombatAffinityConditionSurprised") @@ -126,6 +150,15 @@ internal static class Tabletop2024Context private static readonly List GuidanceSubSpells = []; + //private static readonly List HealingPotions = + // [ + // PotionOfHealing, + // PotionOfGreaterHealing, + // PotionOfSuperiorHealing, + // Potion_Antitoxin, + // PotionRemedy + // ]; + private static readonly FeatureDefinitionPower PowerSorcererInnateSorcery = FeatureDefinitionPowerBuilder .Create("PowerSorcererInnateSorcery") .SetGuiPresentation(Category.Feature, PowerTraditionShockArcanistGreaterArcaneShock) @@ -863,33 +896,36 @@ internal static void SwitchOneDndEnableBardWordsOfCreationAtLevel20() } Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } + } + internal static void SwitchOneDndHealingPotionBonusAction() { + var dbCharacterRaceDefinition = DatabaseRepository.GetDatabase(); + var subRaces = dbCharacterRaceDefinition + .SelectMany(x => x.SubRaces); + var races = dbCharacterRaceDefinition + .Where(x => !subRaces.Contains(x)); + if (Main.Settings.OneDndHealingPotionBonusAction) { - PowerFunctionPotionOfHealing.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionOfHealingOther.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionOfGreaterHealing.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionOfGreaterHealingOther.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionOfSuperiorHealing.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionOfSuperiorHealingOther.activationTime = ActivationTime.BonusAction; - PowerFunctionPotionRemedy.activationTime = ActivationTime.BonusAction; - PowerFunctionRemedyOther.activationTime = ActivationTime.BonusAction; - PowerFunctionAntitoxin.activationTime = ActivationTime.BonusAction; + foreach (var characterRaceDefinition in races + .Where(a => !a.FeatureUnlocks.Exists(x => + x.Level == 1 && x.FeatureDefinition == ActionAffinityPotionBonusAction))) + { + characterRaceDefinition.FeatureUnlocks.Add( + new FeatureUnlockByLevel(ActionAffinityPotionBonusAction, 1)); + } } else { - PowerFunctionPotionOfHealing.activationTime = ActivationTime.Action; - PowerFunctionPotionOfHealingOther.activationTime = ActivationTime.Action; - PowerFunctionPotionOfGreaterHealing.activationTime = ActivationTime.Action; - PowerFunctionPotionOfGreaterHealingOther.activationTime = ActivationTime.Action; - PowerFunctionPotionOfSuperiorHealing.activationTime = ActivationTime.Action; - PowerFunctionPotionOfSuperiorHealingOther.activationTime = ActivationTime.Action; - PowerFunctionPotionRemedy.activationTime = ActivationTime.Action; - PowerFunctionRemedyOther.activationTime = ActivationTime.Action; - PowerFunctionAntitoxin.activationTime = ActivationTime.Action; + foreach (var characterRaceDefinition in races + .Where(a => a.FeatureUnlocks.Exists(x => + x.Level == 1 && x.FeatureDefinition == ActionAffinityPotionBonusAction))) + { + characterRaceDefinition.FeatureUnlocks.RemoveAll(x => + x.Level == 1 && x.FeatureDefinition == ActionAffinityPotionBonusAction); + } } } From 5ccca3f183d8215309924e69b8be0fdc6bda6c4b Mon Sep 17 00:00:00 2001 From: Silvergriffon Date: Sat, 9 Nov 2024 13:09:02 -0500 Subject: [PATCH 05/44] move action affinity to all backpacks to avoid new character or respec req --- .../Models/Tabletop2024Context.cs | 52 +++++++------------ 1 file changed, 18 insertions(+), 34 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index dfbfcfa2f9..dec957e811 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -54,15 +54,15 @@ internal static class Tabletop2024Context .SetAuthorizedActions(Id.UseItemBonus) .AddToDB(); - //private static ItemPropertyDescription ItemPropertyPotionBonusAction = - //new ItemPropertyDescription(RingFeatherFalling.StaticProperties[0]) - //{ - // appliesOnItemOnly = false, - // type = ItemPropertyDescription.PropertyType.Feature, - // featureDefinition = ActionAffinityPotionBonusAction, - // conditionDefinition = null, - // knowledgeAffinity = EquipmentDefinitions.KnowledgeAffinity.ActiveAndHidden - //}; + private static ItemPropertyDescription ItemPropertyPotionBonusAction = + new ItemPropertyDescription(RingFeatherFalling.StaticProperties[0]) + { + appliesOnItemOnly = false, + type = ItemPropertyDescription.PropertyType.Feature, + featureDefinition = ActionAffinityPotionBonusAction, + conditionDefinition = null, + knowledgeAffinity = EquipmentDefinitions.KnowledgeAffinity.ActiveAndHidden + }; private static readonly FeatureDefinitionCombatAffinity CombatAffinityConditionSurprised = FeatureDefinitionCombatAffinityBuilder @@ -150,15 +150,6 @@ internal static class Tabletop2024Context private static readonly List GuidanceSubSpells = []; - //private static readonly List HealingPotions = - // [ - // PotionOfHealing, - // PotionOfGreaterHealing, - // PotionOfSuperiorHealing, - // Potion_Antitoxin, - // PotionRemedy - // ]; - private static readonly FeatureDefinitionPower PowerSorcererInnateSorcery = FeatureDefinitionPowerBuilder .Create("PowerSorcererInnateSorcery") .SetGuiPresentation(Category.Feature, PowerTraditionShockArcanistGreaterArcaneShock) @@ -901,30 +892,23 @@ internal static void SwitchOneDndEnableBardWordsOfCreationAtLevel20() internal static void SwitchOneDndHealingPotionBonusAction() { - var dbCharacterRaceDefinition = DatabaseRepository.GetDatabase(); - var subRaces = dbCharacterRaceDefinition - .SelectMany(x => x.SubRaces); - var races = dbCharacterRaceDefinition - .Where(x => !subRaces.Contains(x)); - + //By adding the feature to all backpacks(all characters should have one) instead of to all races, we avoid the need for a new character or respec if (Main.Settings.OneDndHealingPotionBonusAction) { - foreach (var characterRaceDefinition in races - .Where(a => !a.FeatureUnlocks.Exists(x => - x.Level == 1 && x.FeatureDefinition == ActionAffinityPotionBonusAction))) + foreach (var item in DatabaseRepository.GetDatabase() + .Where(a => a.SlotsWhereActive.Contains("Backslot") && + !a.StaticProperties.Contains(ItemPropertyPotionBonusAction))) { - characterRaceDefinition.FeatureUnlocks.Add( - new FeatureUnlockByLevel(ActionAffinityPotionBonusAction, 1)); + item.StaticProperties.Add(ItemPropertyPotionBonusAction); } } else { - foreach (var characterRaceDefinition in races - .Where(a => a.FeatureUnlocks.Exists(x => - x.Level == 1 && x.FeatureDefinition == ActionAffinityPotionBonusAction))) + foreach (var item in DatabaseRepository.GetDatabase() + .Where(a => a.SlotsWhereActive.Contains("Backslot") && + a.StaticProperties.Contains(ItemPropertyPotionBonusAction))) { - characterRaceDefinition.FeatureUnlocks.RemoveAll(x => - x.Level == 1 && x.FeatureDefinition == ActionAffinityPotionBonusAction); + item.StaticProperties.Clear(); } } } From c63a38915e93e0b88756a4dfee091ed1cfc43f13 Mon Sep 17 00:00:00 2001 From: Silvergriffon Date: Sat, 9 Nov 2024 16:14:16 -0500 Subject: [PATCH 06/44] minor fix --- .../Models/Tabletop2024Context.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index dec957e811..32bd96e9b5 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -895,20 +895,20 @@ internal static void SwitchOneDndHealingPotionBonusAction() //By adding the feature to all backpacks(all characters should have one) instead of to all races, we avoid the need for a new character or respec if (Main.Settings.OneDndHealingPotionBonusAction) { - foreach (var item in DatabaseRepository.GetDatabase() - .Where(a => a.SlotsWhereActive.Contains("Backslot") && + foreach (var pack in DatabaseRepository.GetDatabase() + .Where(a => a.SlotsWhereActive.Contains("BackSlot") && !a.StaticProperties.Contains(ItemPropertyPotionBonusAction))) { - item.StaticProperties.Add(ItemPropertyPotionBonusAction); + pack.StaticProperties.Add(ItemPropertyPotionBonusAction); } } else { - foreach (var item in DatabaseRepository.GetDatabase() - .Where(a => a.SlotsWhereActive.Contains("Backslot") && + foreach (var pack in DatabaseRepository.GetDatabase() + .Where(a => a.SlotsWhereActive.Contains("BackSlot") && a.StaticProperties.Contains(ItemPropertyPotionBonusAction))) { - item.StaticProperties.Clear(); + pack.StaticProperties.Clear(); } } } From 766b7cb7326c798ac3db9fea668858cee6d3e60e Mon Sep 17 00:00:00 2001 From: Silvergriffon Date: Mon, 11 Nov 2024 17:47:46 -0500 Subject: [PATCH 07/44] implement 2 options - potions and scrolls work in ammunition slots, and work in offhand slot --- .../Displays/CraftingAndItems.cs | 14 ++++++ .../Models/ItemCraftingMerchantContext.cs | 45 +++++++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 2 + .../Translations/en/Settings-en.txt | 2 + 4 files changed, 63 insertions(+) diff --git a/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs b/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs index 8fad656c1d..46ea2f327f 100644 --- a/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs +++ b/SolastaUnfinishedBusiness/Displays/CraftingAndItems.cs @@ -160,6 +160,20 @@ internal static void DisplayCraftingAndItems() Main.Settings.KeepInvisibilityWhenUsingItems = toggle; } + toggle = Main.Settings.EnableVersatileAmmunitionSlots; + if (UI.Toggle(Gui.Localize("ModUi/&EnableVersatileAmmunitionSlots"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableVersatileAmmunitionSlots = toggle; + ItemCraftingMerchantContext.SwitchVersatileInventorySlots(); + } + + toggle = Main.Settings.EnableVersatileOffHandSlot; + if (UI.Toggle(Gui.Localize("ModUi/&EnableVersatileOffHandSlot"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableVersatileOffHandSlot = toggle; + ItemCraftingMerchantContext.SwitchVersatileInventorySlots(); + } + UI.Label(); toggle = Main.Settings.AddCustomIconsToOfficialItems; diff --git a/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs b/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs index 7385db78ad..1291d4bed4 100644 --- a/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs +++ b/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs @@ -34,6 +34,7 @@ internal static void Load() SwitchRestockArcaneum(); SwitchRestockCircleOfDanantar(); SwitchRestockTowerOfKnowledge(); + SwitchVersatileInventorySlots(); LoadDontDisplayHelmets(); } @@ -278,6 +279,50 @@ internal static void SwitchRestockTowerOfKnowledge() } } + internal static void SwitchVersatileInventorySlots() + { + foreach (var item in DatabaseRepository.GetDatabase() + .Where(a => a.UsableDeviceDescription != null && (a.UsableDeviceDescription.UsableDeviceTags.Contains("Potion") || + a.UsableDeviceDescription.UsableDeviceTags.Contains("Scroll")))) + { + if (Main.Settings.EnableVersatileAmmunitionSlots && Main.Settings.EnableVersatileOffHandSlot) + { + item.SlotTypes.SetRange("UtilitySlot", + "ContainerSlot", + "AmmunitionSlot", + "OffHandSlot"); + item.SlotsWhereActive.SetRange("UtilitySlot", + "AmmunitionSlot", + "OffHandSlot"); + } + + if (Main.Settings.EnableVersatileAmmunitionSlots && !Main.Settings.EnableVersatileOffHandSlot) + { + item.SlotTypes.SetRange("UtilitySlot", + "ContainerSlot", + "AmmunitionSlot"); + item.SlotsWhereActive.SetRange("UtilitySlot", + "AmmunitionSlot"); + } + + if (!Main.Settings.EnableVersatileAmmunitionSlots && Main.Settings.EnableVersatileOffHandSlot) + { + item.SlotTypes.SetRange("UtilitySlot", + "ContainerSlot", + "OffHandSlot"); + item.SlotsWhereActive.SetRange("UtilitySlot", + "OffHandSlot"); + } + + if (!Main.Settings.EnableVersatileAmmunitionSlots && !Main.Settings.EnableVersatileOffHandSlot) + { + item.SlotTypes.SetRange("UtilitySlot", + "ContainerSlot"); + item.SlotsWhereActive.SetRange("UtilitySlot"); + } + } + } + private static void LoadRemoveAttunementRequirements() { if (!Main.Settings.RemoveAttunementRequirements) diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index dafe1304d3..330af0a673 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -229,6 +229,8 @@ public class Settings : UnityModManager.ModSettings public bool EnableInventoryFilteringAndSorting { get; set; } public bool EnableInventoryTaintNonProficientItemsRed { get; set; } public bool EnableInventoryTintKnownRecipesRed { get; set; } + public bool EnableVersatileAmmunitionSlots { get; set; } + public bool EnableVersatileOffHandSlot { get; set; } public int SetBeltOfDwarvenKindBeardChances { get; set; } = 50; // Crafting diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index c3b90962a3..e06db0be12 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -181,6 +181,8 @@ ModUi/&EnableTooltipDistance=Enable showing distance on tooltips when hovering o ModUi/&EnableUnarmedMainAttackAction=Enable the Unarmed Attack action [if actor has weapon in main, is a Monk or has handwraps or gauntlet equipped] ModUi/&EnableUpcastConjureElementalAndFey=Enable upcast of Conjure Elemental and Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Enable variable placeholders on descriptions [use {VARIABLE_NAME} as placeholder] +ModUi/&EnableVersatileAmmunitionSlots=Allow Potions and Scrolls to be carried and used in the Ammuntion slots +ModUi/&EnableVersatileOffHandSlot=Allow Potions and Scrolls to be carried and used in the Off-hand Weapon slot ModUi/&EnableWarlockMagicalCunningAtLevel2=Enable Magical Cunning at level 2 ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Enable Magical Cunning at level 2 and improve Eldritch Master at 20 ModUi/&EnableWarlockToLearnPatronAtLevel3=Enable Patron at level 3 instead of 1 From 6fba6228f8d5c8d894aa698124165f6e80b510e2 Mon Sep 17 00:00:00 2001 From: Silvergriffon Date: Mon, 11 Nov 2024 18:43:02 -0500 Subject: [PATCH 08/44] added check for empty device tags --- .../Models/ItemCraftingMerchantContext.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs b/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs index 1291d4bed4..c81b167dbe 100644 --- a/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs +++ b/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs @@ -282,7 +282,9 @@ internal static void SwitchRestockTowerOfKnowledge() internal static void SwitchVersatileInventorySlots() { foreach (var item in DatabaseRepository.GetDatabase() - .Where(a => a.UsableDeviceDescription != null && (a.UsableDeviceDescription.UsableDeviceTags.Contains("Potion") || + .Where(a => a.UsableDeviceDescription != null && + a.UsableDeviceDescription.UsableDeviceTags != null && + (a.UsableDeviceDescription.UsableDeviceTags.Contains("Potion") || a.UsableDeviceDescription.UsableDeviceTags.Contains("Scroll")))) { if (Main.Settings.EnableVersatileAmmunitionSlots && Main.Settings.EnableVersatileOffHandSlot) From 51e5cc0dcf7ef3d8c7b3a6421b74132891ddfa81 Mon Sep 17 00:00:00 2001 From: mikm1 Date: Thu, 14 Nov 2024 11:09:10 -0500 Subject: [PATCH 09/44] Pickpocket tweaks, adjust loot to better suit CR --- .../Models/PickPocketContext.cs | 185 ++++++++++++------ 1 file changed, 120 insertions(+), 65 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/PickPocketContext.cs b/SolastaUnfinishedBusiness/Models/PickPocketContext.cs index 243320af4c..abc8abd46c 100644 --- a/SolastaUnfinishedBusiness/Models/PickPocketContext.cs +++ b/SolastaUnfinishedBusiness/Models/PickPocketContext.cs @@ -1,7 +1,8 @@ using System.Collections.Generic; -using SolastaUnfinishedBusiness.Api; using SolastaUnfinishedBusiness.Builders; using static RuleDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; +using static SolastaUnfinishedBusiness.Api.DatabaseHelper.LootPackDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.TreasureTableDefinitions; namespace SolastaUnfinishedBusiness.Models; @@ -19,89 +20,137 @@ internal static void Load() _initialized = true; - var pickpocketTableLow = TreasureTableDefinitionBuilder - .Create(RandomTreasureTableE2_Mundane_Ingredients, "PickPocketTableLow") + var pickPocketableLootTrivial = LootPackDefinitionBuilder + .Create("CE_PickpocketableLoot_Trivial") .SetGuiPresentationNoContent() - .AddTreasureOptions(RandomTreasureTableB_Consumables.TreasureOptions) + .AddExplicitItem(_1D6_Silver_Coins) + .AddExplicitItem(_1D6_Copper_Coins) .AddToDB(); - var pickpocketTableMed = TreasureTableDefinitionBuilder - .Create(RandomTreasureTableE_Ingredients, "PickPocketTableMed") - .SetGuiPresentationNoContent() - .AddTreasureOptions(RandomTreasureTableB_Consumables.TreasureOptions) - .AddTreasureOptions(RandomTreasureTableA_Gem.TreasureOptions) - .SetGuiPresentationNoContent() - .AddToDB(); - - var pickpocketTableUndead = TreasureTableDefinitionBuilder - .Create("PickPocketTableUndead") - .SetGuiPresentationNoContent() - .AddTreasureOptions(new List - { - RandomTreasureTableE_Ingredients.TreasureOptions[3], - RandomTreasureTableE_Ingredients.TreasureOptions[9], - RandomTreasureTableE_Ingredients.TreasureOptions[16] - }) - .AddToDB(); - - var lootPickpocketTableLow = new ItemOccurence - { - itemMode = ItemOccurence.SelectionMode.TreasureTable, - treasureTableDefinition = pickpocketTableLow, - diceNumber = 1, - diceType = DieType.D1, - additiveModifier = 0 - }; - - var lootPickpocketTableMed = new ItemOccurence - { - itemMode = ItemOccurence.SelectionMode.TreasureTable, - treasureTableDefinition = pickpocketTableMed, - diceNumber = 1, - diceType = DieType.D1, - additiveModifier = 0 - }; - - var lootPickpocketTableUndead = new ItemOccurence - { - itemMode = ItemOccurence.SelectionMode.TreasureTable, - treasureTableDefinition = pickpocketTableUndead, - diceNumber = 1, - diceType = DieType.D1, - additiveModifier = 0 - }; - - var pickpocketGenericLootLowMoney = DatabaseHelper.LootPackDefinitions.Pickpocket_generic_loot_LowMoney; - var pickpocketGenericLootMedMoney = DatabaseHelper.LootPackDefinitions.Pickpocket_generic_loot_MedMoney; - var pickPocketableLootA = LootPackDefinitionBuilder - .Create(pickpocketGenericLootLowMoney, "CE_PickpocketableLoot_A") + .Create("CE_PickpocketableLoot_A") .SetGuiPresentationNoContent() - .SetItemOccurrencesList(lootPickpocketTableLow) + .SetItemOccurrencesList(new + ItemOccurence + { + itemMode = ItemOccurence.SelectionMode.TreasureTable, + treasureTableDefinition = RandomTreasureTableE2_Mundane_Ingredients, + diceNumber = 1, + diceType = DieType.D1, + additiveModifier = 0 + }) + .AddExplicitItem(_1D6_Silver_Coins) + .AddExplicitItem(_1D6_Silver_Coins) + .AddExplicitItem(_6D6_Copper_Coins) .AddToDB(); var pickPocketableLootB = LootPackDefinitionBuilder - .Create(pickpocketGenericLootMedMoney, "CE_PickpocketableLoot_B") + .Create("CE_PickpocketableLoot_B") .SetGuiPresentationNoContent() - .SetItemOccurrencesList(lootPickpocketTableLow) + .SetItemOccurrencesList(new + ItemOccurence + { + itemMode = ItemOccurence.SelectionMode.TreasureTable, + treasureTableDefinition = TreasureTableDefinitionBuilder + .Create(RandomTreasureTableE2_Mundane_Ingredients, "PickPocketTableB") + .SetGuiPresentationNoContent() + .AddTreasureOptions(RandomTreasureTableB_Consumables.TreasureOptions) + .AddTreasureOptions(RandomTreasureTableE_Ingredients.TreasureOptions) + .AddToDB(), + diceNumber = 1, + diceType = DieType.D1, + additiveModifier = 0 + }) + .AddExplicitItem(_1D6_Gold_Coins) + .AddExplicitItem(_10D6_Copper_Coins) .AddToDB(); var pickPocketableLootC = LootPackDefinitionBuilder - .Create(pickpocketGenericLootMedMoney, "CE_PickpocketableLoot_C") + .Create("CE_PickpocketableLoot_C") .SetGuiPresentationNoContent() - .SetItemOccurrencesList(lootPickpocketTableMed) + .SetItemOccurrencesList(new + ItemOccurence + { + itemMode = ItemOccurence.SelectionMode.TreasureTable, + treasureTableDefinition = TreasureTableDefinitionBuilder + .Create(RandomTreasureTableE_Ingredients, "PickPocketTableC") + .SetGuiPresentationNoContent() + .AddTreasureOptions(RandomTreasureTableB_Consumables.TreasureOptions) + .AddTreasureOptions(RandomTreasureTableA_Gem.TreasureOptions) + .AddToDB(), + diceNumber = 1, + diceType = DieType.D1, + additiveModifier = 0 + }) + .AddExplicitItem(_5D6_Silver_Coins) + .AddExplicitItem(_1D6_Gold_Coins) .AddToDB(); var pickPocketableLootD = LootPackDefinitionBuilder - .Create(pickpocketGenericLootMedMoney, "CE_PickpocketableLoot_D") + .Create("CE_PickpocketableLoot_D") + .SetGuiPresentationNoContent() + .SetItemOccurrencesList(new + ItemOccurence + { + itemMode = ItemOccurence.SelectionMode.TreasureTable, + treasureTableDefinition = TreasureTableDefinitionBuilder + .Create(RandomTreasureTableE_Ingredients, "PickPocketTableD") + .SetGuiPresentationNoContent() + .AddTreasureOptions(RandomTreasureTableB_Consumables.TreasureOptions) + .AddTreasureOptions(RandomTreasureTableA_Gem.TreasureOptions) + .AddToDB(), + diceNumber = 1, + diceType = DieType.D1, + additiveModifier = 0 + }) + .AddExplicitItem(_5D6_Gold_Coins) + .AddExplicitItem(_20D6_Silver_Coins) + .AddToDB(); + + var pickPocketableLootE = LootPackDefinitionBuilder + .Create("CE_PickpocketableLoot_E") .SetGuiPresentationNoContent() - .SetItemOccurrencesList(lootPickpocketTableLow, lootPickpocketTableMed) + .SetItemOccurrencesList(new + ItemOccurence + { + itemMode = ItemOccurence.SelectionMode.TreasureTable, + treasureTableDefinition = TreasureTableDefinitionBuilder + .Create(RandomTreasureTableA_Gem, "PickPocketTableE") + .SetGuiPresentationNoContent() + .AddTreasureOptions(RandomTreasureTableB_Consumables.TreasureOptions) + .AddTreasureOptions(DLC3_RandomTreasureTableJ_IngredientsEnchanted.TreasureOptions) + .AddToDB(), + diceNumber = 1, + diceType = DieType.D1, + additiveModifier = 0 + }) + .AddExplicitItem(_5D6_Gold_Coins) + .AddExplicitItem(_20D6_Silver_Coins) .AddToDB(); var pickPocketableLootUndead = LootPackDefinitionBuilder - .Create(pickpocketGenericLootLowMoney, "CE_PickpocketableLoot_Undead") + .Create("CE_PickpocketableLoot_Undead") .SetGuiPresentationNoContent() - .SetItemOccurrencesList(lootPickpocketTableUndead) + .SetItemOccurrencesList(new + ItemOccurence + { + itemMode = ItemOccurence.SelectionMode.TreasureTable, + treasureTableDefinition = TreasureTableDefinitionBuilder + .Create("PickPocketTableUndead") + .SetGuiPresentationNoContent() + .AddTreasureOptions(new + List + { + RandomTreasureTableE_Ingredients.TreasureOptions[3], + RandomTreasureTableE_Ingredients.TreasureOptions[9], + RandomTreasureTableE_Ingredients.TreasureOptions[16] + }) + .AddToDB(), + diceNumber = 1, + diceType = DieType.D1, + additiveModifier = 0 + }) + .AddExplicitItem(_1D6_Copper_Coins) .AddToDB(); foreach (var monster in DatabaseRepository.GetDatabase()) @@ -113,7 +162,7 @@ internal static void Load() { if (monster.ChallengeRating < 1.0) { - monster.stealableLootDefinition = pickpocketGenericLootLowMoney; + monster.stealableLootDefinition = pickPocketableLootTrivial; } if (monster.ChallengeRating > 0.9 && @@ -134,11 +183,17 @@ internal static void Load() monster.stealableLootDefinition = pickPocketableLootC; } - if (monster.ChallengeRating > 4.9) + if (monster.ChallengeRating > 4.9 && + monster.ChallengeRating <7.0) { monster.stealableLootDefinition = pickPocketableLootD; } + if (monster.ChallengeRating >6.9) + { + monster.stealableLootDefinition = pickPocketableLootE; + } + break; } case "Undead" when monster.DefaultFaction.Contains("HostileMonsters") && From d3f9b7ef8fca6f7a9d3179e170757284005179b9 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 16 Nov 2024 19:46:33 -0800 Subject: [PATCH 10/44] fix EnableOneDnDPreparedSpellsTables fix #5049 --- .../Patches/RulesetCharacterHeroPatcher.cs | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs index 956e4d4bdc..6cb16be188 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs @@ -17,6 +17,7 @@ using SolastaUnfinishedBusiness.Models; using SolastaUnfinishedBusiness.Subclasses; using SolastaUnfinishedBusiness.Validators; +using UnityEngine; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAbilityCheckAffinitys; @@ -1294,6 +1295,26 @@ public static bool Prefix( __result = preparedSpells[levels - 1]; + foreach (var affinityProvider in __instance.FeaturesToBrowse.OfType()) + { + // ReSharper disable once SwitchStatementMissingSomeEnumCasesNoDefault + switch (affinityProvider.PreparedSpellModifier) + { + case PreparedSpellsModifier.ProficiencyBonus: + { + __result += __instance.TryGetAttributeValue(AttributeDefinitions.ProficiencyBonus); + break; + } + case PreparedSpellsModifier.SpellcastingAbilityBonus: + { + var attribute = __instance.GetAttribute(spellRepertoire.SpellCastingAbility); + + __result += AttributeDefinitions.ComputeAbilityScoreModifier(attribute.CurrentValue); + break; + } + } + } + return false; } } From 6c07db6decef85e4007c918080bc4eaa5df3861c Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 16 Nov 2024 19:46:53 -0800 Subject: [PATCH 11/44] add missing translations and blueprints --- .../Api/DatabaseHelper-RELEASE.cs | 15 +++++++++++++++ .../Translations/de/Settings-de.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 ++ 10 files changed, 33 insertions(+) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 378e21567c..dd3cfd08b0 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -2676,6 +2676,18 @@ internal static class InvocationDefinitions internal static class ItemDefinitions { + internal static ItemDefinition RingFeatherFalling { get; } = + GetDefinition("RingFeatherFalling"); + + internal static ItemDefinition _1D6_Silver_Coins { get; } = GetDefinition("1D6_Silver_Coins"); + internal static ItemDefinition _1D6_Copper_Coins { get; } = GetDefinition("1D6_Copper_Coins"); + internal static ItemDefinition _1D6_Gold_Coins { get; } = GetDefinition("1D6_Gold_Coins"); + internal static ItemDefinition _5D6_Silver_Coins { get; } = GetDefinition("5D6_Silver_Coins"); + internal static ItemDefinition _5D6_Gold_Coins { get; } = GetDefinition("5D6_Gold_Coins"); + internal static ItemDefinition _20D6_Silver_Coins { get; } = GetDefinition("20D6_Silver_Coins"); + internal static ItemDefinition _6D6_Copper_Coins { get; } = GetDefinition("6D6_Copper_Coins"); + internal static ItemDefinition _10D6_Copper_Coins { get; } = GetDefinition("10D6_Copper_Coins"); + internal static ItemDefinition StartingWealth_10GP { get; } = GetDefinition("StartingWealth_10GP"); @@ -4168,6 +4180,9 @@ internal static class ToolTypeDefinitions internal static class TreasureTableDefinitions { + internal static TreasureTableDefinition DLC3_RandomTreasureTableJ_IngredientsEnchanted { get; } = + GetDefinition("DLC3_RandomTreasureTableJ_IngredientsEnchanted"); + internal static TreasureTableDefinition RandomTreasureTableA_Gem { get; } = GetDefinition("RandomTreasureTableA_Gem"); diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 0f33464a6b..dfb5d1cfcc 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -181,6 +181,8 @@ ModUi/&EnableTooltipDistance=Aktivieren Sie die Anzeige der Entfernung in den To ModUi/&EnableUnarmedMainAttackAction=Aktiviere die Aktion Unbewaffneter Angriff [wenn der Akteur eine Waffe im Hauptkampf hat, ein Mönch ist oder Handwickel oder Panzerhandschuhe ausgerüstet hat] ModUi/&EnableUpcastConjureElementalAndFey=Aktiviere Upcast von Elementar beschwören und Feenbeschwören ModUi/&EnableVariablePlaceholdersOnTexts=Aktivieren Sie variable Platzhalter in Beschreibungen [verwenden Sie {VARIABLE_NAME} als Platzhalter] +ModUi/&EnableVersatileAmmunitionSlots=Erlaubt das Tragen und Verwenden von Tränken und Schriftrollen in den Munitionsfächern +ModUi/&EnableVersatileOffHandSlot=Erlaubt das Tragen und Verwenden von Tränken und Schriftrollen im Nebenwaffenslot ModUi/&EnableWarlockMagicalCunningAtLevel2=Aktiviere Magische List auf Stufe 2. ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Aktiviere Magische List auf Level 2 und verbessere Eldritch Master auf 20. ModUi/&EnableWarlockToLearnPatronAtLevel3=Aktivieren Sie Patron auf Stufe 3 statt auf Stufe 1. diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 8a6261ceb8..191c180e94 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -181,6 +181,8 @@ ModUi/&EnableTooltipDistance=Habilitar la visualización de la distancia en las ModUi/&EnableUnarmedMainAttackAction=Habilitar la acción Ataque desarmado [si el actor tiene un arma en el personaje principal, es un Monje o tiene vendas o guanteletes equipados] ModUi/&EnableUpcastConjureElementalAndFey=Habilitar la conversión ascendente de Conjurar elemental y Conjurar feérico ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posición de variables en las descripciones [use {VARIABLE_NAME} como marcador de posición] +ModUi/&EnableVersatileAmmunitionSlots=Permitir que Pociones y Pergaminos se lleven y utilicen en las ranuras de munición. +ModUi/&EnableVersatileOffHandSlot=Permitir que Pociones y Pergaminos se lleven y usen en la ranura de Arma Secundaria ModUi/&EnableWarlockMagicalCunningAtLevel2=Habilita Astucia mágica en el nivel 2 ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Habilita Astucia mágica en el nivel 2 y mejora Maestro sobrenatural en el nivel 20. ModUi/&EnableWarlockToLearnPatronAtLevel3=Habilitar Patron en el nivel 3 en lugar del 1 diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 4115adfe04..f756279969 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -181,6 +181,8 @@ ModUi/&EnableTooltipDistance=Activer l'affichage de la distance dans les info-bu ModUi/&EnableUnarmedMainAttackAction=Activer l'action Attaque à mains nues [si l'acteur a une arme dans l'arme principale, est un moine ou a des bandages ou un gantelet équipés] ModUi/&EnableUpcastConjureElementalAndFey=Activer la conversion ascendante de Conjure Elemental et Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Activer les espaces réservés aux variables dans les descriptions [utiliser {VARIABLE_NAME} comme espace réservé] +ModUi/&EnableVersatileAmmunitionSlots=Autoriser le transport et l'utilisation de potions et de parchemins dans les emplacements de munitions +ModUi/&EnableVersatileOffHandSlot=Autoriser le transport et l'utilisation de potions et de parchemins dans l'emplacement d'arme secondaire ModUi/&EnableWarlockMagicalCunningAtLevel2=Activer la ruse magique au niveau 2 ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Activez la ruse magique au niveau 2 et améliorez le maître eldritch à 20 ModUi/&EnableWarlockToLearnPatronAtLevel3=Activer Patron au niveau 3 au lieu de 1 diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 8c95ea87a3..9b3c46e86d 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -181,6 +181,8 @@ ModUi/&EnableTooltipDistance=Abilita la visualizzazione della distanza nei sugge ModUi/&EnableUnarmedMainAttackAction=Abilita l'azione Attacco disarmato [se l'attore ha un'arma nel personaggio principale, è un monaco o ha fasce o guanto equipaggiati] ModUi/&EnableUpcastConjureElementalAndFey=Abilita l'upcast di Evoca Elementale e Evoca Fata ModUi/&EnableVariablePlaceholdersOnTexts=Abilita segnaposto variabili nelle descrizioni [usa {VARIABLE_NAME} come segnaposto] +ModUi/&EnableVersatileAmmunitionSlots=Consenti il ​​trasporto e l'utilizzo di Pozioni e Pergamene negli slot Munizioni +ModUi/&EnableVersatileOffHandSlot=Consenti il ​​trasporto e l'uso di Pozioni e Pergamene nello slot dell'arma secondaria ModUi/&EnableWarlockMagicalCunningAtLevel2=Abilita Astuzia magica al livello 2 ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Abilita Astuzia magica al livello 2 e migliora Maestro eldritch al livello 20 ModUi/&EnableWarlockToLearnPatronAtLevel3=Abilita Patron al livello 3 invece che 1 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 04e068951d..bc5e6cb864 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -181,6 +181,8 @@ ModUi/&EnableTooltipDistance=戦闘中のキャラクターにマウスを移動 ModUi/&EnableUnarmedMainAttackAction=素手攻撃アクションを有効にする [アクターがメインに武器を持っているか、モンクを持っているか、ハンドラップまたはガントレットを装備している場合] ModUi/&EnableUpcastConjureElementalAndFey=エレメンタル召喚とフェイ召喚のアップキャストを有効にする ModUi/&EnableVariablePlaceholdersOnTexts=説明に変数プレースホルダーを有効にする [プレースホルダーとして {VARIABLE_NAME} を使用する] +ModUi/&EnableVersatileAmmunitionSlots=ポーションと巻物を持ち運んで弾薬スロットで使用できるようにします +ModUi/&EnableVersatileOffHandSlot=ポーションと巻物をオフハンド武器スロットに持ち運んで使用できるようにします ModUi/&EnableWarlockMagicalCunningAtLevel2=レベル2で魔法の狡猾さを有効にする ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=レベル2で魔法の狡猾さを有効にし、レベル20でエルドリッチマスターを向上させる ModUi/&EnableWarlockToLearnPatronAtLevel3=パトロンをレベル1ではなくレベル3で有効にする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 8ae6b399cf..aa8049c83f 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -181,6 +181,8 @@ ModUi/&EnableTooltipDistance=전투 중 캐릭터 위에 마우스를 올려 놓 ModUi/&EnableUnarmedMainAttackAction=비무장 공격 동작 활성화 [액터가 기본 무기를 장착하고 있거나, 수도사이거나, 핸드랩 또는 건틀릿을 장착한 경우] ModUi/&EnableUpcastConjureElementalAndFey=원소 소환과 요정 소환의 업캐스트를 활성화합니다. ModUi/&EnableVariablePlaceholdersOnTexts=설명에 변수 플레이스홀더 활성화 [플레이스홀더로 {VARIABLE_NAME} 사용] +ModUi/&EnableVersatileAmmunitionSlots=물약과 두루마리를 탄약 슬롯에 넣고 운반하고 사용할 수 있습니다. +ModUi/&EnableVersatileOffHandSlot=물약과 두루마리를 보조 무기 슬롯에 휴대하고 사용할 수 있습니다. ModUi/&EnableWarlockMagicalCunningAtLevel2=레벨 2에서 마법의 교활함을 활성화합니다. ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=레벨 2에서 마법의 교활함을 활성화하고 레벨 20에서 엘드리치 마스터를 향상시킵니다. ModUi/&EnableWarlockToLearnPatronAtLevel3=레벨 1 대신 레벨 3에서 후원자 활성화 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 893969cdfe..873e8b6532 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -181,6 +181,8 @@ ModUi/&EnableTooltipDistance=Habilitar a exibição da distância nas dicas de f ModUi/&EnableUnarmedMainAttackAction=Habilitar a ação Ataque Desarmado [se o ator tiver uma arma principal, for um Monge ou tiver bandanas ou manoplas equipadas] ModUi/&EnableUpcastConjureElementalAndFey=Habilitar upcast de Conjure Elemental e Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posição variáveis ​​em descrições [usar {VARIABLE_NAME} como marcador de posição] +ModUi/&EnableVersatileAmmunitionSlots=Permitir que Poções e Pergaminhos sejam carregados e usados ​​nos slots de munição +ModUi/&EnableVersatileOffHandSlot=Permitir que Poções e Pergaminhos sejam carregados e usados ​​no slot de Arma Secundária ModUi/&EnableWarlockMagicalCunningAtLevel2=Habilitar Astúcia Mágica no nível 2 ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Habilite Astúcia Mágica no nível 2 e melhore Mestre Eldritch no nível 20 ModUi/&EnableWarlockToLearnPatronAtLevel3=Habilitar Patrono no nível 3 em vez de 1 diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index cb59b0172a..d185b74440 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -181,6 +181,8 @@ ModUi/&EnableTooltipDistance=Включить отображение расст ModUi/&EnableUnarmedMainAttackAction=Включить действие Безоружная атака [если персонаж держит оружие в основной руке и он Монах, или если он использует Обмотки или Перчатки] ModUi/&EnableUpcastConjureElementalAndFey=Включить возможность накладывать на высоких уровнях Призыв элементаля и Призыв феи ModUi/&EnableVariablePlaceholdersOnTexts=Включить заглушки для переменных описаний [использовать {VARIABLE_NAME} в качесте заглушки] +ModUi/&EnableVersatileAmmunitionSlots=Разрешить переносить и использовать в слотах боеприпасов зелья и свитки +ModUi/&EnableVersatileOffHandSlot=Разрешить переносить и использовать зелья и свитки в слоте для дополнительного оружия ModUi/&EnableWarlockMagicalCunningAtLevel2=Включить Магическую хитрость на уровне 2 ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Включить Магическую хитрость на уровне 2 и улучшить Таинственного мастера на уровне 20 ModUi/&EnableWarlockToLearnPatronAtLevel3=Включить выбор Покровителя на 3-м уровне вместо 1-го diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 46f2ef9d8e..ed7e8f9131 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -181,6 +181,8 @@ ModUi/&EnableTooltipDistance=在战斗中将鼠标悬停在角色上时启用在 ModUi/&EnableUnarmedMainAttackAction=启用徒手攻击动作[如果演员主武器为武器、是僧侣或装备有手套铁手套] ModUi/&EnableUpcastConjureElementalAndFey=启用 Conjure Elemental 和 Conjure Fey 的向上转换 ModUi/&EnableVariablePlaceholdersOnTexts=在描述中启用变量占位符[使用 {VARIABLE_NAME} 作为占位符] +ModUi/&EnableVersatileAmmunitionSlots=允许携带药水和卷轴并将其放入弹药槽中使用 +ModUi/&EnableVersatileOffHandSlot=允许携带药水和卷轴并在副手武器槽中使用 ModUi/&EnableWarlockMagicalCunningAtLevel2=在第 2 级启用魔法狡猾 ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=在 2 级启用魔法狡猾并在 20 级提升神秘大师 ModUi/&EnableWarlockToLearnPatronAtLevel3=在 3 级(而非 1 级)启用 Patron From 97a318863756895dcfcbc17c436419a40a0cb62e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 16 Nov 2024 19:47:38 -0800 Subject: [PATCH 12/44] fix EnableSecondWindToUseOneDndUsagesProgression --- .../Behaviors/ModifyPowerPoolAmount.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs b/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs index 365a961052..e160489fa3 100644 --- a/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs +++ b/SolastaUnfinishedBusiness/Behaviors/ModifyPowerPoolAmount.cs @@ -36,14 +36,14 @@ int GetSecondWindUsages() { if (!Main.Settings.EnableSecondWindToUseOneDndUsagesProgression) { - return 1; + return 0; } return character.GetClassLevel(Attribute) switch { - >= 10 => 4, - >= 4 => 3, - _ => 2 + >= 10 => 3, + >= 4 => 2, + _ => 1 }; } } From 5813c4e10e2efbea82db61fb2a1cb06f0b4e44af Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sat, 16 Nov 2024 19:47:50 -0800 Subject: [PATCH 13/44] clean up --- .../Models/Tabletop2024Context.cs | 60 ++++++++++--------- 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 32bd96e9b5..4c4063137b 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -43,26 +43,26 @@ internal static class Tabletop2024Context { private static readonly FeatureDefinitionActionAffinity ActionAffinityPotionBonusAction = FeatureDefinitionActionAffinityBuilder - .Create($"ActionAffinityPotionBonusAction") + .Create("ActionAffinityPotionBonusAction") .SetGuiPresentationNoContent(true) .AddCustomSubFeatures( new ValidateDeviceFunctionUse((_, device, _) => device.UsableDeviceDescription.UsableDeviceTags.Contains("Potion") && - (device.Name.Contains("Healing") || - device.Name.Contains("Remedy") || - device.Name.Contains("Antitoxin")))) + (device.Name.Contains("Healing") || + device.Name.Contains("Remedy") || + device.Name.Contains("Antitoxin")))) .SetAuthorizedActions(Id.UseItemBonus) .AddToDB(); - private static ItemPropertyDescription ItemPropertyPotionBonusAction = - new ItemPropertyDescription(RingFeatherFalling.StaticProperties[0]) - { - appliesOnItemOnly = false, - type = ItemPropertyDescription.PropertyType.Feature, - featureDefinition = ActionAffinityPotionBonusAction, - conditionDefinition = null, - knowledgeAffinity = EquipmentDefinitions.KnowledgeAffinity.ActiveAndHidden - }; + private static readonly ItemPropertyDescription ItemPropertyPotionBonusAction = + new(RingFeatherFalling.StaticProperties[0]) + { + appliesOnItemOnly = false, + type = ItemPropertyDescription.PropertyType.Feature, + featureDefinition = ActionAffinityPotionBonusAction, + conditionDefinition = null, + knowledgeAffinity = EquipmentDefinitions.KnowledgeAffinity.ActiveAndHidden + }; private static readonly FeatureDefinitionCombatAffinity CombatAffinityConditionSurprised = FeatureDefinitionCombatAffinityBuilder @@ -216,17 +216,19 @@ internal static class Tabletop2024Context .SetGrantedFeature(FeatureSetPactTome.FeatureSet[0]) // grant pool directly instead of feature set .AddToDB(); - private static readonly ConditionDefinition ConditionBardCounterCharmSavingThrowAdvantage = ConditionDefinitionBuilder - .Create("ConditionBardCounterCharmSavingThrowAdvantage") - .SetGuiPresentation(PowerBardCountercharm.GuiPresentation) - .SetSilent(Silent.WhenAddedOrRemoved) - .SetFeatures( - FeatureDefinitionSavingThrowAffinityBuilder - .Create(FeatureDefinitionSavingThrowAffinitys.SavingThrowAffinityAdvantageToAll, "SavingThrowAffinityBardCounterCharmAdvantage") - .SetGuiPresentation(PowerBardCountercharm.GuiPresentation) - .AddToDB()) - .SetSpecialInterruptions(ConditionInterruption.SavingThrow) - .AddToDB(); + private static readonly ConditionDefinition ConditionBardCounterCharmSavingThrowAdvantage = + ConditionDefinitionBuilder + .Create("ConditionBardCounterCharmSavingThrowAdvantage") + .SetGuiPresentation(PowerBardCountercharm.GuiPresentation) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures( + FeatureDefinitionSavingThrowAffinityBuilder + .Create(FeatureDefinitionSavingThrowAffinitys.SavingThrowAffinityAdvantageToAll, + "SavingThrowAffinityBardCounterCharmAdvantage") + .SetGuiPresentation(PowerBardCountercharm.GuiPresentation) + .AddToDB()) + .SetSpecialInterruptions(ConditionInterruption.SavingThrow) + .AddToDB(); private static readonly FeatureDefinitionPower PowerWarlockMagicalCunning = FeatureDefinitionPowerBuilder .Create("PowerWarlockMagicalCunning") @@ -887,8 +889,7 @@ internal static void SwitchOneDndEnableBardWordsOfCreationAtLevel20() } Bard.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); - } - + } internal static void SwitchOneDndHealingPotionBonusAction() { @@ -897,7 +898,7 @@ internal static void SwitchOneDndHealingPotionBonusAction() { foreach (var pack in DatabaseRepository.GetDatabase() .Where(a => a.SlotsWhereActive.Contains("BackSlot") && - !a.StaticProperties.Contains(ItemPropertyPotionBonusAction))) + !a.StaticProperties.Contains(ItemPropertyPotionBonusAction))) { pack.StaticProperties.Add(ItemPropertyPotionBonusAction); } @@ -906,7 +907,7 @@ internal static void SwitchOneDndHealingPotionBonusAction() { foreach (var pack in DatabaseRepository.GetDatabase() .Where(a => a.SlotsWhereActive.Contains("BackSlot") && - a.StaticProperties.Contains(ItemPropertyPotionBonusAction))) + a.StaticProperties.Contains(ItemPropertyPotionBonusAction))) { pack.StaticProperties.Clear(); } @@ -1156,7 +1157,8 @@ void ReactionValidated() // we need to manually spend the reaction here as rolling the saving again below helper.SpendActionType(ActionType.Reaction); helper.RulesetCharacter.LogCharacterUsedPower(PowerBardCountercharm); - EffectHelpers.StartVisualEffect(helper, defender, PowerBardCountercharm, EffectHelpers.EffectType.Caster); + EffectHelpers.StartVisualEffect(helper, defender, PowerBardCountercharm, + EffectHelpers.EffectType.Caster); TryAlterOutcomeSavingThrow.TryRerollSavingThrow(attacker, defender, savingThrowData, hasHitVisual); } } From 71fd7f460159cb2ad8029ba6d0e16fd300d8a8a9 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 08:43:39 -0800 Subject: [PATCH 14/44] fix Word of Radiance and Bonfire cantrips -fix #5053 --- SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 6eee37667f..cfa7ec0045 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -186,7 +186,7 @@ internal static SpellDefinition BuildBurstOfRadiance() .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Enemy, RangeType.Self, 0, TargetType.Cube, 3) + .SetTargetingData(Side.Enemy, RangeType.Distance, 1, TargetType.IndividualsUnique, 8) .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Constitution, false, EffectDifficultyClassComputation.SpellCastingFeature) @@ -240,7 +240,7 @@ internal static SpellDefinition BuildCreateBonfire() EffectDescriptionBuilder .Create(WallOfFireLine) .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.Cube) + .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.Position, onlyGround: true) .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, true, EffectDifficultyClassComputation.SpellCastingFeature) @@ -264,6 +264,8 @@ internal static SpellDefinition BuildCreateBonfire() .Build()) .AddToDB(); + spell.EffectDescription.canBePlacedOnCharacter = true; + return spell; } From fc92b7d458be1345ace2c1517b91f1fb69d84b47 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 10:45:52 -0800 Subject: [PATCH 15/44] fix aimed attack maneuver --- .../Subclasses/Builders/GambitsBuilders.cs | 65 +++---------------- 1 file changed, 10 insertions(+), 55 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs index cc6c0403dd..4fc5d1d8ae 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs @@ -569,13 +569,13 @@ internal static void BuildGambits() name = "GambitFeint"; sprite = Sprites.GetSprite(name, Resources.GambitFeint, 128); - power = FeatureDefinitionPowerBuilder + power = FeatureDefinitionPowerSharedPoolBuilder .Create($"Power{name}Activate") .SetGuiPresentation(name, Category.Feature, sprite) .SetShowCasting(false) .AddCustomSubFeatures(ModifyPowerFromInvocation.Marker, hasGambitDice) .SetUniqueInstance() - .SetUsesFixed(ActivationTime.NoCost) + .SetSharedPool(ActivationTime.BonusAction, GambitPool) .SetEffectDescription( EffectDescriptionBuilder .Create() @@ -587,17 +587,13 @@ internal static void BuildGambits() .Create($"Condition{name}") .SetGuiPresentation(name, Category.Feature, Sprites.ConditionGambit) .SetPossessive() - .SetSpecialInterruptions( - ExtraConditionInterruption.UsesBonusAction, - ExtraConditionInterruption.AttacksWithWeaponOrUnarmed) + .SetSpecialInterruptions(ExtraConditionInterruption.AttacksWithWeaponOrUnarmed) .SetFeatures(gambitDieDamage) - .AddCustomSubFeatures(new Feint(GambitPool)) + .AddCustomSubFeatures(new Feint()) .AddToDB())) .Build()) .AddToDB(); - power.AddCustomSubFeatures(new ValidatorsValidatePowerUse(ValidatorsCharacter.HasAvailableBonusAction)); - BuildFeatureInvocation(name, sprite, power); #endregion @@ -1269,67 +1265,26 @@ private static bool IsValidAttack( // Feint // - private sealed class Feint(FeatureDefinitionPower pool) - : IModifyAttackActionModifier, IPhysicalAttackInitiatedByMe, IPhysicalAttackFinishedByMe + private sealed class Feint : IModifyAttackActionModifier { private const string ConditionGambitFeint = "ConditionGambitFeint"; private readonly TrendInfo _trendInfo = new(1, FeatureSourceType.Condition, ConditionGambitFeint, null); - public void OnAttackComputeModifier(RulesetCharacter myself, + public void OnAttackComputeModifier( + RulesetCharacter myself, RulesetCharacter defender, BattleDefinitions.AttackProximity attackProximity, RulesetAttackMode attackMode, string effectName, ref ActionModifier attackModifier) { - if (attackMode?.SourceDefinition is not ItemDefinition || - attackMode.ActionType == ActionDefinitions.ActionType.Bonus || - !ValidatorsCharacter.HasAvailableBonusAction(myself)) + if (attackProximity + is BattleDefinitions.AttackProximity.PhysicalReach or BattleDefinitions.AttackProximity.PhysicalRange) { - return; - } - - attackModifier.AttackAdvantageTrends.Add(_trendInfo); - } - - public IEnumerator OnPhysicalAttackFinishedByMe( - GameLocationBattleManager battleManager, - CharacterAction action, - GameLocationCharacter attacker, - GameLocationCharacter defender, - RulesetAttackMode attackMode, - RollOutcome rollOutcome, - int damageAmount) - { - var rulesetCharacter = attacker.RulesetCharacter; - - if (attackMode?.SourceDefinition is not ItemDefinition || - !ValidatorsCharacter.HasAvailableBonusAction(rulesetCharacter)) - { - yield break; - } - - attacker.SpendActionType(ActionDefinitions.ActionType.Bonus); - rulesetCharacter.UpdateUsageForPower(pool, 1); - } - - public IEnumerator OnPhysicalAttackInitiatedByMe( - GameLocationBattleManager battleManager, - CharacterAction action, - GameLocationCharacter attacker, - GameLocationCharacter defender, - ActionModifier attackModifier, - RulesetAttackMode attackMode) - { - if (action.ActionType != ActionDefinitions.ActionType.Bonus) - { - yield break; + attackModifier.AttackAdvantageTrends.Add(_trendInfo); } - - attacker.RulesetCharacter.RemoveAllConditionsOfCategoryAndType( - AttributeDefinitions.TagEffect, ConditionGambitFeint); } } From 9fb24d9f22d2180a040ad7979c7fd5517279c490 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 10:46:24 -0800 Subject: [PATCH 16/44] fix lay on hands using bonus action --- SolastaUnfinishedBusiness/Behaviors/Specific/PowerBundle.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/Specific/PowerBundle.cs b/SolastaUnfinishedBusiness/Behaviors/Specific/PowerBundle.cs index e5a4ffb98a..1190e7b2c5 100644 --- a/SolastaUnfinishedBusiness/Behaviors/Specific/PowerBundle.cs +++ b/SolastaUnfinishedBusiness/Behaviors/Specific/PowerBundle.cs @@ -216,8 +216,7 @@ internal static int GetRemainingPowerUses(this RulesetCharacter character, [NotN character.UsedChannelDivinity) / power.CostPerUse; case RechargeRate.HealingPool: - return (character.TryGetAttributeValue(AttributeDefinitions.HealingPool) - character.UsedHealingPool) / - power.CostPerUse; + return character.TryGetAttributeValue(AttributeDefinitions.HealingPool) - character.UsedHealingPool; case RechargeRate.MaxHitPoints: return character.TryGetAttributeValue(AttributeDefinitions.HitPoints) / power.CostPerUse; case RechargeRate.RagePoints: From 1cfaa9c1cecb81e3552ee5d8f24ea1aa0d988fb3 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 11:03:02 -0800 Subject: [PATCH 17/44] fix cantrips getting auto immunity if target is a cube --- SolastaUnfinishedBusiness/Patches/RuleDefinitionsPatcher.cs | 2 +- SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/RuleDefinitionsPatcher.cs b/SolastaUnfinishedBusiness/Patches/RuleDefinitionsPatcher.cs index d32e4fef8d..cd47242d42 100644 --- a/SolastaUnfinishedBusiness/Patches/RuleDefinitionsPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RuleDefinitionsPatcher.cs @@ -56,7 +56,7 @@ public static class IsPositionImmuneToSpell_Patch [UsedImplicitly] public static void Postfix(out bool __result, int spellLevel, int totalSpellLevel) { - __result = spellLevel <= totalSpellLevel; + __result = totalSpellLevel != 0 && spellLevel <= totalSpellLevel; } } diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index cfa7ec0045..1440a4f77c 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -240,7 +240,7 @@ internal static SpellDefinition BuildCreateBonfire() EffectDescriptionBuilder .Create(WallOfFireLine) .SetDurationData(DurationType.Minute, 1) - .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.Position, onlyGround: true) + .SetTargetingData(Side.All, RangeType.Distance, 6, TargetType.Cube, onlyGround: true) .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) .SetSavingThrowData(false, AttributeDefinitions.Dexterity, true, EffectDifficultyClassComputation.SpellCastingFeature) @@ -264,8 +264,6 @@ internal static SpellDefinition BuildCreateBonfire() .Build()) .AddToDB(); - spell.EffectDescription.canBePlacedOnCharacter = true; - return spell; } From e80f482dcade12267757c9c62983e6e51c8e1e09 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 11:14:28 -0800 Subject: [PATCH 18/44] move switches to LateLoad so Artificer can also benefit from additional feats --- SolastaUnfinishedBusiness/Models/FeatsContext.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/FeatsContext.cs b/SolastaUnfinishedBusiness/Models/FeatsContext.cs index 1d315e6a14..7c6833f7f4 100644 --- a/SolastaUnfinishedBusiness/Models/FeatsContext.cs +++ b/SolastaUnfinishedBusiness/Models/FeatsContext.cs @@ -35,10 +35,6 @@ internal static class FeatsContext internal static void Load() { LoadFeatsPointPools(); - SwitchAsiAndFeat(); - SwitchFirstLevelTotalFeats(); - SwitchEveryFourLevelsFeats(); - SwitchEveryFourLevelsFeats(true); } internal static void LateLoad() @@ -119,6 +115,11 @@ internal static void LateLoad() // avoids restart on level up UI GuiWrapperContext.RecacheFeats(); + + SwitchAsiAndFeat(); + SwitchFirstLevelTotalFeats(); + SwitchEveryFourLevelsFeats(); + SwitchEveryFourLevelsFeats(true); } private static void LoadFeat([NotNull] FeatDefinition featDefinition) From 17d73669ad4001b7ff32d9fff74eb77cd43db405 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 11:47:45 -0800 Subject: [PATCH 19/44] fix IMagicEffectFinishedByMeOrAlly behavior passing a null battle manager instance on SpendPower action -fix #5048 --- .../Patches/CharacterActionSpendPowerPatcher.cs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs index af67be369d..ab7bb656d6 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterActionSpendPowerPatcher.cs @@ -64,6 +64,8 @@ public static bool Prefix( private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) { + var battleManager = + ServiceRepository.GetService() as GameLocationBattleManager; var actingCharacter = __instance.ActingCharacter; var actionParams = __instance.ActionParams; var rulesetEffect = actionParams.RulesetEffect; @@ -147,9 +149,6 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) __instance.SaveOutcome = saveOutcome; __instance.SaveOutcomeDelta = saveOutcomeDelta; - var battleManager = - ServiceRepository.GetService() as GameLocationBattleManager; - if (__instance.RolledSaveThrow) { var savingThrowData = new SavingThrowData @@ -371,7 +370,7 @@ private static IEnumerator ExecuteImpl(CharacterActionSpendPower __instance) { yield return magicEffectFinishedByMeOrAlly .OnMagicEffectFinishedByMeOrAlly( - null, __instance, actingCharacter, ally, targets); + battleManager, __instance, actingCharacter, ally, targets); } } From 0c2deae15a82fedb5f08aaa062b4224af41e1a65 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 12:22:52 -0800 Subject: [PATCH 20/44] fix Roguish Blade Caller hail of blades doing zero damage --- SolastaUnfinishedBusiness/Subclasses/RoguishBladeCaller.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishBladeCaller.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishBladeCaller.cs index d5118e568d..62a3b61bb9 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishBladeCaller.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishBladeCaller.cs @@ -99,7 +99,7 @@ public RoguishBladeCaller() EffectFormBuilder.ConditionForm(conditionBladeMark)) .SetParticleEffectParameters(SpellDefinitions.ShadowDagger) .Build()) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) + .AddCustomSubFeatures(ClassHolder.Rogue) .AddToDB(); var actionAffinityHailOfBladesToggle = FeatureDefinitionActionAffinityBuilder From 1dc148e8cfceefbae9b6799d12dc3fbf241b440f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 12:23:16 -0800 Subject: [PATCH 21/44] remove seize the chance condition on probe --- .../Subclasses/RoguishOpportunist.cs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs index 332d160353..671525eaa2 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs @@ -349,9 +349,9 @@ public IEnumerator OnMagicEffectFinishedByMeOrAlly( // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (var target in targets) { - if (target.RulesetActor.HasConditionOfCategoryAndType(TagEffect, conditionSeizeTheChance.Name)) + if (target.RulesetActor.TryGetConditionOfCategoryAndType(TagEffect, conditionSeizeTheChance.Name, out var activeCondition)) { - yield return HandleReaction(battleManager, attacker, target, helper); + yield return HandleReaction(battleManager, attacker, target, helper, activeCondition); } } } @@ -366,9 +366,9 @@ public IEnumerator OnPhysicalAttackFinishedByMeOrAlly( RollOutcome rollOutcome, int damageAmount) { - if (defender.RulesetActor.HasConditionOfCategoryAndType(TagEffect, conditionSeizeTheChance.Name)) + if (defender.RulesetActor.TryGetConditionOfCategoryAndType(TagEffect, conditionSeizeTheChance.Name, out var activeCondition)) { - yield return HandleReaction(battleManager, attacker, defender, helper); + yield return HandleReaction(battleManager, attacker, defender, helper, activeCondition); } } @@ -408,8 +408,11 @@ private static IEnumerator HandleReaction( GameLocationBattleManager battleManager, GameLocationCharacter attacker, GameLocationCharacter defender, - GameLocationCharacter helper) + GameLocationCharacter helper, + RulesetCondition activeCondition) { + defender.RulesetActor.RemoveCondition(activeCondition); + if (!helper.CanReact()) { yield break; From ff77d7da8a7de100a00843f5aae4a962c77a6442 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 12:23:47 -0800 Subject: [PATCH 22/44] update collaterals --- .../UnfinishedBusinessBlueprints/Assets.txt | 6 ++- .../ConditionGambitFeint.json | 1 - .../ActionAffinityPotionBonusAction.json | 50 +++++++++++++++++++ .../PowerGambitFeintActivate.json | 6 +-- .../SpellDefinition/BurstOfRadiance.json | 10 ++-- .../SpellDefinition/CreateBonfire.json | 2 +- .../ChangelogHistory.txt | 20 ++++++-- 7 files changed, 78 insertions(+), 17 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityPotionBonusAction.json rename Diagnostics/UnfinishedBusinessBlueprints/{FeatureDefinitionPower => FeatureDefinitionPowerSharedPool}/PowerGambitFeintActivate.json (98%) diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 483767c7cc..f0da34df0e 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1738,6 +1738,7 @@ ActionAffinityPathOfTheWildMagicSummonFree FeatureDefinitionActionAffinity Featu ActionAffinityPathOfTheWildMagicTeleport FeatureDefinitionActionAffinity FeatureDefinition 4e317955-9e8c-59cb-b1e6-a579feed847f ActionAffinityPathOfTheWildMagicTeleportFree FeatureDefinitionActionAffinity FeatureDefinition 4873dfdf-57d6-5b97-ac1c-eb896707a67c ActionAffinityPathOfTheYeomanStaggeringBlow FeatureDefinitionActionAffinity FeatureDefinition 5121306c-f96d-5159-8365-4b256bf27bcb +ActionAffinityPotionBonusAction FeatureDefinitionActionAffinity FeatureDefinition 9e5daf9c-6696-548b-819d-1290194f300c ActionAffinityPowerAttackToggle FeatureDefinitionActionAffinity FeatureDefinition 662a830a-0f98-5adb-805a-0fe7f8ecf5d7 ActionAffinityPowerSurgeToggle FeatureDefinitionActionAffinity FeatureDefinition 61452ea0-047f-518a-92f1-349a78f77c3f ActionAffinityPressTheAdvantageToggle FeatureDefinitionActionAffinity FeatureDefinition 54e9367a-c1f0-537c-90c2-fa88d23e7d4d @@ -3448,7 +3449,7 @@ PowerGambitCoordinatedAttackReact FeatureDefinitionPowerSharedPool FeatureDefini PowerGambitDebilitateActivate FeatureDefinitionPower FeatureDefinition 9ed7ee44-6353-5166-a2cc-063334b7c8bf PowerGambitDebilitateReact FeatureDefinitionPowerSharedPool FeatureDefinition 6314b54e-7811-5516-a284-9166f5de1ae8 PowerGambitElusiveMovementActivate FeatureDefinitionPowerSharedPool FeatureDefinition 65eaf125-d4c2-5f88-8afa-ae4a54f6a86f -PowerGambitFeintActivate FeatureDefinitionPower FeatureDefinition d83dbc53-7eeb-5771-8b3d-2cad7bec688d +PowerGambitFeintActivate FeatureDefinitionPowerSharedPool FeatureDefinition d83dbc53-7eeb-5771-8b3d-2cad7bec688d PowerGambitGoadingActivate FeatureDefinitionPower FeatureDefinition ed46f667-969f-520a-9bcb-b91eec4b5c63 PowerGambitGoadingReact FeatureDefinitionPowerSharedPool FeatureDefinition 3b111ac2-9ad2-5fea-8ac2-a9743d9fac52 PowerGambitKnockdownActivate FeatureDefinitionPower FeatureDefinition 16c57eae-97cd-5586-8b67-289c04b90a75 @@ -4442,6 +4443,7 @@ ActionAffinityPathOfTheWildMagicSummonFree FeatureDefinitionActionAffinity Featu ActionAffinityPathOfTheWildMagicTeleport FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 4e317955-9e8c-59cb-b1e6-a579feed847f ActionAffinityPathOfTheWildMagicTeleportFree FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 4873dfdf-57d6-5b97-ac1c-eb896707a67c ActionAffinityPathOfTheYeomanStaggeringBlow FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 5121306c-f96d-5159-8365-4b256bf27bcb +ActionAffinityPotionBonusAction FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 9e5daf9c-6696-548b-819d-1290194f300c ActionAffinityPowerAttackToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 662a830a-0f98-5adb-805a-0fe7f8ecf5d7 ActionAffinityPowerSurgeToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 61452ea0-047f-518a-92f1-349a78f77c3f ActionAffinityPressTheAdvantageToggle FeatureDefinitionActionAffinity FeatureDefinitionActionAffinity 54e9367a-c1f0-537c-90c2-fa88d23e7d4d @@ -6337,7 +6339,7 @@ PowerGambitCoordinatedAttackReact FeatureDefinitionPowerSharedPool FeatureDefini PowerGambitDebilitateActivate FeatureDefinitionPower FeatureDefinitionPower 9ed7ee44-6353-5166-a2cc-063334b7c8bf PowerGambitDebilitateReact FeatureDefinitionPowerSharedPool FeatureDefinitionPower 6314b54e-7811-5516-a284-9166f5de1ae8 PowerGambitElusiveMovementActivate FeatureDefinitionPowerSharedPool FeatureDefinitionPower 65eaf125-d4c2-5f88-8afa-ae4a54f6a86f -PowerGambitFeintActivate FeatureDefinitionPower FeatureDefinitionPower d83dbc53-7eeb-5771-8b3d-2cad7bec688d +PowerGambitFeintActivate FeatureDefinitionPowerSharedPool FeatureDefinitionPower d83dbc53-7eeb-5771-8b3d-2cad7bec688d PowerGambitGoadingActivate FeatureDefinitionPower FeatureDefinitionPower ed46f667-969f-520a-9bcb-b91eec4b5c63 PowerGambitGoadingReact FeatureDefinitionPowerSharedPool FeatureDefinitionPower 3b111ac2-9ad2-5fea-8ac2-a9743d9fac52 PowerGambitKnockdownActivate FeatureDefinitionPower FeatureDefinitionPower 16c57eae-97cd-5586-8b67-289c04b90a75 diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGambitFeint.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGambitFeint.json index 51bf987c85..91bad394f7 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGambitFeint.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionGambitFeint.json @@ -18,7 +18,6 @@ "forceTurnOccurence": false, "turnOccurence": "EndOfTurn", "specialInterruptions": [ - 9004, 9002 ], "interruptionRequiresSavingThrow": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityPotionBonusAction.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityPotionBonusAction.json new file mode 100644 index 0000000000..b9f50b876b --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionActionAffinity/ActionAffinityPotionBonusAction.json @@ -0,0 +1,50 @@ +{ + "$type": "FeatureDefinitionActionAffinity, Assembly-CSharp", + "allowedActionTypes": [ + true, + true, + true, + true, + true, + true + ], + "eitherMainOrBonus": false, + "maxAttacksNumber": -1, + "forbiddenActions": [], + "authorizedActions": [ + "UseItemBonus" + ], + "restrictedActions": [], + "actionExecutionModifiers": [], + "specialBehaviour": "None", + "randomBehaviorDie": "D10", + "randomBehaviourOptions": [], + "rechargeReactionsAtEveryTurn": 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": "9e5daf9c-6696-548b-819d-1290194f300c", + "contentPack": 9999, + "name": "ActionAffinityPotionBonusAction" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGambitFeintActivate.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerGambitFeintActivate.json similarity index 98% rename from Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGambitFeintActivate.json rename to Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerGambitFeintActivate.json index 44e7284a0a..ba0181b64b 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerGambitFeintActivate.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerGambitFeintActivate.json @@ -1,5 +1,5 @@ { - "$type": "FeatureDefinitionPower, Assembly-CSharp", + "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", "rangeType": "Self", @@ -292,7 +292,7 @@ "delegatedToAction": false, "surrogateToSpell": null, "triggeredBySpecialMove": false, - "activationTime": "NoCost", + "activationTime": "BonusAction", "autoActivationRequiredTargetSenseType": "None", "autoActivationRequiredTargetCreatureTag": "", "autoActivationPowerTag": "", @@ -308,7 +308,7 @@ "canUseInDialog": false, "disableIfConditionIsOwned": null, "disableIfTargetConditionIsOwned": null, - "rechargeRate": "AtWill", + "rechargeRate": "ShortRest", "costPerUse": 1, "spellcastingFeature": null, "usesDetermination": "Fixed", diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/BurstOfRadiance.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/BurstOfRadiance.json index a2c57b367c..6814b075a9 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/BurstOfRadiance.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/BurstOfRadiance.json @@ -14,14 +14,14 @@ "requiresConcentration": false, "effectDescription": { "$type": "EffectDescription, Assembly-CSharp", - "rangeType": "Self", - "rangeParameter": 0, + "rangeType": "Distance", + "rangeParameter": 1, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], - "targetType": "Cube", + "targetType": "IndividualsUnique", "itemSelectionType": "None", - "targetParameter": 3, - "targetParameter2": 0, + "targetParameter": 8, + "targetParameter2": 2, "emissiveBorder": "None", "emissiveParameter": 1, "requiresTargetProximity": false, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json index 65db5814c2..b0931f1218 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/CreateBonfire.json @@ -28,7 +28,7 @@ "targetProximityDistance": 30, "targetExcludeCaster": false, "canBePlacedOnCharacter": true, - "affectOnlyGround": false, + "affectOnlyGround": true, "targetFilteringMethod": "AllCharacterAndGadgets", "targetFilteringTag": "No", "requiresVisibilityForPosition": true, diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index c4b6378fb9..11664f2367 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,3 +1,18 @@ +1.5.97.39: + +- fixed 'Enable all Casters to use new prepared spells tables' not considering bonuses +- fixed 'Enable Lay on Hands as bonus action' not getting offered in combat +- fixed 'Enable Second Wind to use 5e 2024 usages progression' adding +1 usage +- fixed Aimed Attack maneuver not consuming bonus action, and not adding die damage to attack +- fixed Bonfire and Word of Radiance cantrips getting auto immunity from positions +- fixed Roguish Blade Caller hail of blades doing zero damage +- fixed SpendPower action passing a null battle manager instance to mod custom behaviors [desyncs and soft locks] + +KNOWN ISSUES: + +- Artillerist Force Ballista tiny cannon won't force disadvantage if defender is within 5 ft +- Chaos Bolt spell damage won't deal the correct damage type if under multiplayer, twinned, and one bolt misses + 1.5.97.38: - added False Life to 'Enable healing spells 5e 2024 spells version' @@ -11,11 +26,6 @@ - fixed Rogue stroke of luck missing foreign translations introduced on v37 - improved Armor of Agathys, and Power Word Heal to 5e 2024 versions -KNOWN ISSUES: - -- Artillerist Force Ballista tiny cannon won't force disadvantage if defender is within 5 ft -- Chaos Bolt spell damage won't deal the correct damage type if under multiplayer, twinned, and one bolt misses - 1.5.97.37: - added 25+ new settings under tabletop 5e 2024 section From 406e5a48a4a34bbb2367c2627357810360477635 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 13:10:55 -0800 Subject: [PATCH 23/44] fix dice damage progression on powers and additional damage blueprints defined in mod subclasses --- SolastaUnfinishedBusiness/Behaviors/ClassHolder.cs | 3 +++ SolastaUnfinishedBusiness/ChangelogHistory.txt | 4 ++-- SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs | 2 ++ SolastaUnfinishedBusiness/Subclasses/DomainDefiler.cs | 1 + SolastaUnfinishedBusiness/Subclasses/DomainNature.cs | 1 + SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs | 1 + SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs | 3 ++- SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs | 4 ++-- .../Subclasses/InnovationArtillerist.cs | 2 ++ .../Subclasses/InnovationVitriolist.cs | 6 +++--- .../Subclasses/InnovationVivisectionist.cs | 2 ++ .../Subclasses/MartialArcaneArcher.cs | 8 ++++++++ SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs | 1 + SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs | 3 +++ SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs | 3 +++ .../Subclasses/PathOfTheWildMagic.cs | 1 + SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs | 1 + .../Subclasses/PatronMoonlitScion.cs | 2 ++ SolastaUnfinishedBusiness/Subclasses/RangerArcanist.cs | 2 ++ SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs | 2 ++ .../Subclasses/RoguishArcaneScoundrel.cs | 1 + .../Subclasses/SorcerousSorrAkkath.cs | 2 ++ 22 files changed, 47 insertions(+), 8 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/ClassHolder.cs b/SolastaUnfinishedBusiness/Behaviors/ClassHolder.cs index 1ecefd5d2c..76c73d4a31 100644 --- a/SolastaUnfinishedBusiness/Behaviors/ClassHolder.cs +++ b/SolastaUnfinishedBusiness/Behaviors/ClassHolder.cs @@ -14,7 +14,10 @@ public record ClassHolder(CharacterClassDefinition Class) public static readonly ClassHolder Bard = new(clazz.Bard); public static readonly ClassHolder Cleric = new(clazz.Cleric); public static readonly ClassHolder Druid = new(clazz.Druid); + public static readonly ClassHolder Fighter = new(clazz.Fighter); public static readonly ClassHolder Inventor = new(InventorClass.Class); + public static readonly ClassHolder Paladin = new(clazz.Paladin); + public static readonly ClassHolder Ranger = new(clazz.Ranger); public static readonly ClassHolder Rogue = new(clazz.Rogue); public static readonly ClassHolder Sorcerer = new(clazz.Sorcerer); public static readonly ClassHolder Warlock = new(clazz.Warlock); diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 11664f2367..d0c03a3712 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -5,8 +5,8 @@ - fixed 'Enable Second Wind to use 5e 2024 usages progression' adding +1 usage - fixed Aimed Attack maneuver not consuming bonus action, and not adding die damage to attack - fixed Bonfire and Word of Radiance cantrips getting auto immunity from positions -- fixed Roguish Blade Caller hail of blades doing zero damage -- fixed SpendPower action passing a null battle manager instance to mod custom behaviors [desyncs and soft locks] +- fixed dice damage progression on powers and additional damage blueprints defined in mod subclasses [i.e: Hail of Blades] +- fixed SpendPower action passing a null battle manager instance to mod custom behaviors leading to desyncs and soft locks KNOWN ISSUES: diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index 52113ef096..969aadd437 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -346,6 +346,7 @@ private static FeatureDefinitionPowerSharedPool BuildArcher( .SetCasterEffectParameters(PowerOathOfTirmarGoldenSpeech) .SetImpactEffectParameters(Sunbeam) .Build()) + .AddCustomSubFeatures(ClassHolder.Druid) .AddToDB(); var powerArcherNoCost = FeatureDefinitionPowerBuilder @@ -445,6 +446,7 @@ private static FeatureDefinitionPowerSharedPool BuildChalice( .Build()) .SetParticleEffectParameters(CureWounds) .Build()) + .AddCustomSubFeatures(ClassHolder.Druid) .AddToDB(); var conditionChaliceHealing = ConditionDefinitionBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainDefiler.cs b/SolastaUnfinishedBusiness/Subclasses/DomainDefiler.cs index 13e07aa390..4375b76f5a 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainDefiler.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainDefiler.cs @@ -135,6 +135,7 @@ public DomainDefiler() .SetFrequencyLimit(FeatureLimitedUsage.OnceInMyTurn) .SetAttackModeOnly() .AddConditionOperation(ConditionOperationDescription.ConditionOperation.Add, conditionInsidiousDeathMagic) + .AddCustomSubFeatures(ClassHolder.Cleric) .AddToDB(); // LEVEL 14 diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs index 54e89f899e..0c2ae8d42d 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs @@ -193,6 +193,7 @@ public DomainNature() .SetFrequencyLimit(FeatureLimitedUsage.OnceInMyTurn) .SetAttackModeOnly() .SetImpactParticleReference(ConeOfCold) + .AddCustomSubFeatures(ClassHolder.Cleric) .AddToDB(); // LEVEL 17 - Master of Nature diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs b/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs index d5b7ae455f..335dfadef6 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs @@ -277,6 +277,7 @@ public DomainSmith() .SetFrequencyLimit(FeatureLimitedUsage.OnceInMyTurn) .SetAttackModeOnly() .SetImpactParticleReference(FireBolt) + .AddCustomSubFeatures(ClassHolder.Cleric) .AddToDB(); // LEVEL 17 diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs b/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs index 9128b07f77..285c7984cc 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs @@ -103,7 +103,7 @@ public DomainTempest() .Build()) .SetImpactEffectParameters(LightningBolt) .Build()) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) + .AddCustomSubFeatures(ClassHolder.Cleric, ModifyPowerVisibility.Hidden) .AddToDB(); var powerWrathOfTheStormThunder = FeatureDefinitionPowerSharedPoolBuilder @@ -199,6 +199,7 @@ public DomainTempest() .SetFrequencyLimit(FeatureLimitedUsage.OnceInMyTurn) .SetAttackModeOnly() .SetImpactParticleReference(Shatter) + .AddCustomSubFeatures(ClassHolder.Cleric) .AddToDB(); // LEVEL 17 - Stormborn diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs index 70f9c65858..2b7d0f9271 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs @@ -187,10 +187,10 @@ private static FeatureDefinitionFeatureSet BuildArmorModes() .Create() .SetTempHpForm(1) .SetLevelAdvancement( - EffectForm.LevelApplianceType.MultiplyBonus, - LevelSourceType.ClassLevel) + EffectForm.LevelApplianceType.MultiplyBonus, LevelSourceType.ClassLevel) .Build()) .Build()) + .AddCustomSubFeatures(ClassHolder.Inventor) .AddToDB(); return FeatureDefinitionFeatureSetBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs index 257e7b3fca..34153a3932 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs @@ -108,6 +108,7 @@ public InnovationArtillerist() .Build()) .Build()) .DelegatedToAction() + .AddCustomSubFeatures(ClassHolder.Inventor) .AddToDB(); powerFlamethrower.AddCustomSubFeatures(new CustomBehaviorForceCasterSpellDC(powerFlamethrower)); @@ -134,6 +135,7 @@ public InnovationArtillerist() .Build()) .Build()) .DelegatedToAction() + .AddCustomSubFeatures(ClassHolder.Inventor) .AddToDB(); var powerProtector = FeatureDefinitionPowerBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs index 168d503da8..122eb6a1f4 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationVitriolist.cs @@ -155,7 +155,7 @@ public InnovationVitriolist() .Build(), EffectFormBuilder.ConditionForm(conditionMiserable)) .Build()) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) + .AddCustomSubFeatures(ClassHolder.Inventor, ModifyPowerVisibility.Hidden) .AddToDB(); // Affliction @@ -187,7 +187,7 @@ public InnovationVitriolist() .Build(), EffectFormBuilder.ConditionForm(ConditionDefinitions.ConditionPoisoned)) .Build()) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) + .AddCustomSubFeatures(ClassHolder.Inventor, ModifyPowerVisibility.Hidden) .AddToDB(); // Viscosity @@ -214,7 +214,7 @@ public InnovationVitriolist() .Build(), EffectFormBuilder.ConditionForm(ConditionDefinitions.ConditionHindered)) .Build()) - .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) + .AddCustomSubFeatures(ClassHolder.Inventor, ModifyPowerVisibility.Hidden) .AddToDB(); // Mixture diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationVivisectionist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationVivisectionist.cs index fce49eb0d8..83aaf622fb 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationVivisectionist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationVivisectionist.cs @@ -57,6 +57,7 @@ public InnovationVivisectionist() .SetTriggerCondition(AdditionalDamageTriggerCondition.AdvantageOrNearbyAlly) .SetFrequencyLimit(FeatureLimitedUsage.OncePerTurn) .SetAttackModeOnly() + .AddCustomSubFeatures(ClassHolder.Inventor) .AddToDB(); // Emergency Surgery @@ -83,6 +84,7 @@ public InnovationVivisectionist() .SetImpactEffectParameters(PowerTraditionOpenHandWholenessOfBody .EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) + .AddCustomSubFeatures(ClassHolder.Inventor) .AddToDB(); // LEVEL 05 diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs b/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs index 859a7ffea1..409edffaf2 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs @@ -265,6 +265,7 @@ private static List BuildArcaneShotPowers( .SetImpactEffectParameters( SpellDefinitions.Banishment.EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) + .AddCustomSubFeatures(ClassHolder.Fighter) .AddToDB(); powers.Add(powerBanishingArrow); @@ -300,6 +301,7 @@ private static List BuildArcaneShotPowers( .SetImpactEffectParameters( SpellDefinitions.CharmPerson.EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) + .AddCustomSubFeatures(ClassHolder.Fighter) .AddToDB(); powers.Add(powerBeguilingArrow); @@ -336,6 +338,7 @@ private static List BuildArcaneShotPowers( .Build()) .SetImpactEffectParameters(SpellDefinitions.BurningHands_B) .Build()) + .AddCustomSubFeatures(ClassHolder.Fighter) .AddToDB(); powers.Add(powerBurstingArrow); @@ -399,6 +402,7 @@ private static List BuildArcaneShotPowers( SpellDefinitions.RayOfEnfeeblement.EffectDescription.EffectParticleParameters .effectParticleReference) .Build()) + .AddCustomSubFeatures(ClassHolder.Fighter) .AddToDB(); powers.Add(powerEnfeeblingArrow); @@ -441,6 +445,7 @@ private static List BuildArcaneShotPowers( .SetImpactEffectParameters( SpellDefinitions.Entangle.EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) + .AddCustomSubFeatures(ClassHolder.Fighter) .AddToDB(); powers.Add(powerGraspingArrow); @@ -492,6 +497,7 @@ private static List BuildArcaneShotPowers( .SetImpactEffectParameters( SpellDefinitions.Shine.EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) + .AddCustomSubFeatures(ClassHolder.Fighter) .AddToDB(); powers.Add(powerInsightArrow); @@ -527,6 +533,7 @@ private static List BuildArcaneShotPowers( .SetImpactEffectParameters( SpellDefinitions.Blindness.EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) + .AddCustomSubFeatures(ClassHolder.Fighter) .AddToDB(); powers.Add(powerShadowArrow); @@ -562,6 +569,7 @@ private static List BuildArcaneShotPowers( .SetImpactEffectParameters( SpellDefinitions.Slow.EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) + .AddCustomSubFeatures(ClassHolder.Fighter) .AddToDB(); powers.Add(powerSlowingArrow); diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs index 1edd75a808..21341ddb97 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs @@ -72,6 +72,7 @@ public OathOfDemonHunter() .SetSpecificDamageType(DamageTypeRadiant) .SetImpactParticleReference( FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) + .AddCustomSubFeatures(ClassHolder.Paladin) .AddToDB(); var powerTrialMark = FeatureDefinitionPowerBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs index c96e6077b3..aaf2a2fdc0 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs @@ -93,6 +93,7 @@ public OathOfThunder() .SetMotionForm(MotionForm.MotionType.PushFromOrigin, 6) .Build()) .Build()) + .AddCustomSubFeatures(ClassHolder.Paladin) .AddToDB(); powerThunderousRebuke.AddCustomSubFeatures( @@ -139,6 +140,7 @@ public OathOfThunder() .SetConditionForm(conditionDivineBolt, ConditionForm.ConditionOperation.Add) .Build()) .Build()) + .AddCustomSubFeatures(ClassHolder.Paladin) .AddToDB(); // LEVEL 07 @@ -159,6 +161,7 @@ public OathOfThunder() .SetAdvancement(AdditionalDamageAdvancement.ClassLevel, 1, 1, 8, 7) .SetImpactParticleReference(Shatter) .SetFrequencyLimit(FeatureLimitedUsage.OncePerTurn) + .AddCustomSubFeatures(ClassHolder.Paladin) .AddToDB(); var featureGodOfThunder = FeatureDefinitionBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs index 39e80e566f..7d7741ea16 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs @@ -261,6 +261,7 @@ public PathOfTheElements() .SetParticleEffectParameters(PowerDomainElementalLightningBlade) .Build()) .AddCustomSubFeatures( + ClassHolder.Barbarian, new ValidatorsValidatePowerUse(ValidatorsCharacter.HasAnyOfConditions(ConditionRaging))) .AddToDB(); @@ -297,6 +298,7 @@ public PathOfTheElements() .SetEffectEffectParameters(PowerDomainElementalIceLance) .Build()) .AddCustomSubFeatures( + ClassHolder.Barbarian, new ValidatorsValidatePowerUse(ValidatorsCharacter.HasAnyOfConditions(ConditionRaging))) .AddToDB(); @@ -335,6 +337,7 @@ public PathOfTheElements() .SetEffectEffectParameters(PowerDomainElementalFireBurst) .Build()) .AddCustomSubFeatures( + ClassHolder.Barbarian, new ValidatorsValidatePowerUse(ValidatorsCharacter.HasAnyOfConditions(ConditionRaging))) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs index f5cc6877ee..5310c68df1 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs @@ -402,6 +402,7 @@ private static WildSurgeEffect BuildWildSurgeSummon() .SetGuiPresentation(Category.Feature, SpellDefinitions.DelayedBlastFireball) .SetUsesFixed(ActivationTime.NoCost, RechargeRate.TurnStart) .SetEffectDescription(effectDescriptionBlast) + .AddCustomSubFeatures(ClassHolder.Barbarian) .DelegatedToAction() .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs index d380d6d5d1..14ae6c49ed 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs @@ -42,6 +42,7 @@ public PathOfTheYeoman() .SetNotificationTag("Rage") .SetAdvancement(AdditionalDamageAdvancement.ClassLevel) .SetDamageValueDetermination(AdditionalDamageValueDetermination.RageDamage) + .AddCustomSubFeatures(ClassHolder.Barbarian) .AddToDB(); var featureStrongBow = FeatureDefinitionBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs b/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs index 6104b7373d..290f0db6b5 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs @@ -107,6 +107,7 @@ public PatronMoonlitScion() .SetParticleEffectParameters(FeatureDefinitionPowers.PowerTraditionLightBlindingFlash) .SetEffectEffectParameters(new AssetReference()) .Build()) + .AddCustomSubFeatures(ClassHolder.Warlock) .AddToDB(); var conditionFullMoon = ConditionDefinitionBuilder @@ -205,6 +206,7 @@ public PatronMoonlitScion() EffectFormBuilder.ConditionForm(conditionLunarChillEnemy)) .SetParticleEffectParameters(FeatureDefinitionPowers.PowerDomainElementalIceLance) .Build()) + .AddCustomSubFeatures(ClassHolder.Warlock) .AddToDB(); var conditionNewMoon = ConditionDefinitionBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerArcanist.cs b/SolastaUnfinishedBusiness/Subclasses/RangerArcanist.cs index 515eb2b853..261937179c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerArcanist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerArcanist.cs @@ -1,4 +1,5 @@ using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; @@ -70,6 +71,7 @@ public RangerArcanist() AdditionalDamageTriggerCondition.TargetHasConditionCreatedByMe) .AddConditionOperation(ConditionOperationDescription.ConditionOperation.Remove, conditionMarkedByArcanist) .SetImpactParticleReference(MagicMissile.EffectDescription.EffectParticleParameters.impactParticleReference) + .AddCustomSubFeatures(ClassHolder.Ranger) .AddToDB(); // diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs b/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs index a048befa49..59430df922 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs @@ -3,6 +3,7 @@ using System.Linq; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Behaviors.Specific; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; @@ -66,6 +67,7 @@ public RangerHellWalker() .Build()) .SetParticleEffectParameters(SpellsContext.EnduringSting) .Build()) + .AddCustomSubFeatures(ClassHolder.Ranger) .AddToDB(); var featureSetFirebolt = FeatureDefinitionFeatureSetBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs index 1967c474e4..67aae5f3d8 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs @@ -136,6 +136,7 @@ public RoguishArcaneScoundrel() .AddToDB(); powerArcaneBacklashSneakDamage.AddCustomSubFeatures( + ClassHolder.Rogue, ModifyPowerVisibility.Hidden, new MagicEffectFinishedByMeArcaneBackslash( powerArcaneBacklashSneakDamage, powerArcaneBackslashCounterSpell)); diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousSorrAkkath.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousSorrAkkath.cs index 803a52aad2..7df0d4a97a 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousSorrAkkath.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousSorrAkkath.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; +using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Behaviors.Specific; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; @@ -76,6 +77,7 @@ public SorcerousSorrAkkath() .SetTriggerCondition(AdditionalDamageTriggerCondition.AdvantageOrNearbyAlly) .SetFrequencyLimit(FeatureLimitedUsage.OncePerTurn) .SetSavingThrowData(EffectDifficultyClassComputation.SpellCastingFeature, EffectSavingThrowType.None) + .AddCustomSubFeatures(ClassHolder.Sorcerer) .AddToDB(); // LEVEL 06 From a9f77fd7741361bd5a7d4aebeb73355efdc0ac9e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 13:37:56 -0800 Subject: [PATCH 24/44] fix Stealthy action from key bind not broadcasting status on multiplayer sessions --- .../Models/InputContext.cs | 39 +++++++++++-------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/SolastaUnfinishedBusiness/Models/InputContext.cs b/SolastaUnfinishedBusiness/Models/InputContext.cs index 1fc6e33dfe..7aaa014ec7 100644 --- a/SolastaUnfinishedBusiness/Models/InputContext.cs +++ b/SolastaUnfinishedBusiness/Models/InputContext.cs @@ -157,31 +157,38 @@ internal static void HandleInput(GameLocationBaseScreen gameLocationBaseScreen, CampaignsContext.SetFormationGrid(4); return; case InputCommandsExtra.Hide: + var actionService = ServiceRepository.GetService(); + foreach (var selectedCharacter in ServiceRepository .GetService().SelectedCharacters) { if (Gui.Battle == null) { - selectedCharacter.SetStealthy(!selectedCharacter.Stealthy); + var actionParams = new CharacterActionParams(selectedCharacter, ActionDefinitions.Id.HideMain); + + actionService.ExecuteAction(actionParams, null, false); } - else if (!selectedCharacter.Stealthy) + else if (selectedCharacter.Stealthy) { - if (selectedCharacter.GetActionStatus(ActionDefinitions.Id.HideBonus, - ActionDefinitions.ActionScope.Battle) == ActionDefinitions.ActionStatus.Available) - { - selectedCharacter.SetStealthy(true); - selectedCharacter.SpendActionType(ActionDefinitions.ActionType.Bonus); - } - else if (selectedCharacter.GetActionStatus(ActionDefinitions.Id.HideBonus, - ActionDefinitions.ActionScope.Battle) == ActionDefinitions.ActionStatus.Available) - { - selectedCharacter.SetStealthy(true); - selectedCharacter.SpendActionType(ActionDefinitions.ActionType.Main); - } + var actionParams = new CharacterActionParams(selectedCharacter, ActionDefinitions.Id.Unhide); + + actionService.ExecuteAction(actionParams, null, false); } - else + else if (selectedCharacter.GetActionStatus(ActionDefinitions.Id.HideBonus, + ActionDefinitions.ActionScope.Battle) == ActionDefinitions.ActionStatus.Available) { - selectedCharacter.SetStealthy(false); + var actionParams = + new CharacterActionParams(selectedCharacter, ActionDefinitions.Id.HideBonus); + + actionService.ExecuteAction(actionParams, null, false); + } + else if (selectedCharacter.GetActionStatus(ActionDefinitions.Id.HideMain, + ActionDefinitions.ActionScope.Battle) == ActionDefinitions.ActionStatus.Available) + { + var actionParams = + new CharacterActionParams(selectedCharacter, ActionDefinitions.Id.HideMain); + + actionService.ExecuteAction(actionParams, null, false); } } From df6343bea6b96bb9a8ffef413e39779454337743 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 13:38:19 -0800 Subject: [PATCH 25/44] update collaterals --- .../ChangelogHistory.txt | 3 +++ .../Subclasses/RoguishOpportunist.png | Bin 31839 -> 40669 bytes .../Translations/en/Settings-en.txt | 2 +- 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index d0c03a3712..cd2c33fbb4 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -1,5 +1,7 @@ 1.5.97.39: +- added 'Allow Potions and Scrolls to be carried and used in the ammunition slots' setting [by SilverGriffon] +- added 'Allow Potions and Scrolls to be carried and used in the off-hand weapon slot' setting [by SilverGriffon] - fixed 'Enable all Casters to use new prepared spells tables' not considering bonuses - fixed 'Enable Lay on Hands as bonus action' not getting offered in combat - fixed 'Enable Second Wind to use 5e 2024 usages progression' adding +1 usage @@ -7,6 +9,7 @@ - fixed Bonfire and Word of Radiance cantrips getting auto immunity from positions - fixed dice damage progression on powers and additional damage blueprints defined in mod subclasses [i.e: Hail of Blades] - fixed SpendPower action passing a null battle manager instance to mod custom behaviors leading to desyncs and soft locks +- fixed Stealthy action from key bind not broadcasting status on multiplayer sessions KNOWN ISSUES: diff --git a/SolastaUnfinishedBusiness/Resources/Subclasses/RoguishOpportunist.png b/SolastaUnfinishedBusiness/Resources/Subclasses/RoguishOpportunist.png index ad52cc816356a8f2366020730d32233a4264b02d..4b9d2e5cb242d958bde02e8575bbfd7be8109b56 100644 GIT binary patch literal 40669 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 Zd<9lMIS;)vBKrUU002ovPDHLkV1jgKTC)HE literal 31839 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 diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index e06db0be12..d466857377 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -181,7 +181,7 @@ ModUi/&EnableTooltipDistance=Enable showing distance on tooltips when hovering o ModUi/&EnableUnarmedMainAttackAction=Enable the Unarmed Attack action [if actor has weapon in main, is a Monk or has handwraps or gauntlet equipped] ModUi/&EnableUpcastConjureElementalAndFey=Enable upcast of Conjure Elemental and Conjure Fey ModUi/&EnableVariablePlaceholdersOnTexts=Enable variable placeholders on descriptions [use {VARIABLE_NAME} as placeholder] -ModUi/&EnableVersatileAmmunitionSlots=Allow Potions and Scrolls to be carried and used in the Ammuntion slots +ModUi/&EnableVersatileAmmunitionSlots=Allow Potions and Scrolls to be carried and used in the Ammunition slots ModUi/&EnableVersatileOffHandSlot=Allow Potions and Scrolls to be carried and used in the Off-hand Weapon slot ModUi/&EnableWarlockMagicalCunningAtLevel2=Enable Magical Cunning at level 2 ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Enable Magical Cunning at level 2 and improve Eldritch Master at 20 From 9b1e9fd6027b44f77bbb77e5642aa24a9ae1fa1e Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 14:49:04 -0800 Subject: [PATCH 26/44] fix 'Enable bonus action on Healing Potions and Antitoxin usages' bleeding into scrolls --- .../ChangelogHistory.txt | 1 + .../Models/Tabletop2024Context.cs | 19 ++++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index cd2c33fbb4..b2acbab3ea 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -3,6 +3,7 @@ - added 'Allow Potions and Scrolls to be carried and used in the ammunition slots' setting [by SilverGriffon] - added 'Allow Potions and Scrolls to be carried and used in the off-hand weapon slot' setting [by SilverGriffon] - fixed 'Enable all Casters to use new prepared spells tables' not considering bonuses +- fixed 'Enable bonus action on Healing Potions and Antitoxin usages' bleeding into scrolls - fixed 'Enable Lay on Hands as bonus action' not getting offered in combat - fixed 'Enable Second Wind to use 5e 2024 usages progression' adding +1 usage - fixed Aimed Attack maneuver not consuming bonus action, and not adding die damage to attack diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 4c4063137b..37ac09970b 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -893,23 +893,24 @@ internal static void SwitchOneDndEnableBardWordsOfCreationAtLevel20() internal static void SwitchOneDndHealingPotionBonusAction() { - //By adding the feature to all backpacks(all characters should have one) instead of to all races, we avoid the need for a new character or respec if (Main.Settings.OneDndHealingPotionBonusAction) { - foreach (var pack in DatabaseRepository.GetDatabase() - .Where(a => a.SlotsWhereActive.Contains("BackSlot") && - !a.StaticProperties.Contains(ItemPropertyPotionBonusAction))) + foreach (var potion in DatabaseRepository.GetDatabase() + .Where(a => + a.UsableDeviceDescription != null && + a.UsableDeviceDescription.usableDeviceTags.Contains("Potion"))) { - pack.StaticProperties.Add(ItemPropertyPotionBonusAction); + potion.StaticProperties.TryAdd(ItemPropertyPotionBonusAction); } } else { - foreach (var pack in DatabaseRepository.GetDatabase() - .Where(a => a.SlotsWhereActive.Contains("BackSlot") && - a.StaticProperties.Contains(ItemPropertyPotionBonusAction))) + foreach (var potion in DatabaseRepository.GetDatabase() + .Where(a => + a.UsableDeviceDescription != null && + a.UsableDeviceDescription.usableDeviceTags.Contains("Potion"))) { - pack.StaticProperties.Clear(); + potion.StaticProperties.Clear(); } } } From 3135db67f1f38df25466ccc2501e47b486c3fbbe Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 15:17:07 -0800 Subject: [PATCH 27/44] add AttackAfterMagicEffect.Marker --- .../Behaviors/Specific/AttackAfterMagicEffect.cs | 1 + SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs b/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs index 6231c68387..4f78f34ed7 100644 --- a/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs +++ b/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs @@ -9,6 +9,7 @@ namespace SolastaUnfinishedBusiness.Behaviors.Specific; internal sealed class AttackAfterMagicEffect : IFilterTargetingCharacter { + internal static readonly AttackAfterMagicEffect Marker = new(); internal const string AttackAfterMagicEffectTag = "AttackAfterMagicEffectTag"; private const RollOutcome MinOutcomeToAttack = RollOutcome.Success; private const RollOutcome MinSaveOutcomeToAttack = RollOutcome.Failure; diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs index 1440a4f77c..90a48156fb 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersCantrips.cs @@ -753,7 +753,7 @@ internal static SpellDefinition BuildSunlightBlade() ConditionForm.ConditionOperation.Add, true)) .SetParticleEffectParameters(DivineFavor) .Build()) - .AddCustomSubFeatures(FixesContext.NoTwinned.Mark, new AttackAfterMagicEffect()) + .AddCustomSubFeatures(FixesContext.NoTwinned.Mark, AttackAfterMagicEffect.Marker) .AddToDB(); return spell; @@ -1019,7 +1019,7 @@ internal static SpellDefinition BuildBoomingBlade() ConditionForm.ConditionOperation.Add, true)) .SetParticleEffectParameters(Shatter) .Build()) - .AddCustomSubFeatures(FixesContext.NoTwinned.Mark, new AttackAfterMagicEffect()) + .AddCustomSubFeatures(FixesContext.NoTwinned.Mark, AttackAfterMagicEffect.Marker) .AddToDB(); // need to use same spell reference so power texts update properly on AllowBladeCantripsToUseReach setting @@ -1131,11 +1131,11 @@ internal static SpellDefinition BuildResonatingStrike() .SetImpactEffectParameters(new AssetReference()) .Build()) .AddCustomSubFeatures( - FixesContext.NoTwinned.Mark, // order matters here as CustomBehaviorResonatingStrike.IFilterTargetingCharacter // should trigger before AttackAfterMagicEffect.IFilterTargetingCharacter new CustomBehaviorResonatingStrike(), - new AttackAfterMagicEffect()) + FixesContext.NoTwinned.Mark, + AttackAfterMagicEffect.Marker) .AddToDB(); // need to use same spell reference so power texts update properly on AllowBladeCantripsToUseReach setting From a3133c8e89d787d605e0e1eda0accb3362e49374 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 16:17:21 -0800 Subject: [PATCH 28/44] add 'Enable True Strike 5e 2024 cantrip version' --- .../UnfinishedBusinessBlueprints/Assets.txt | 3 + .../ConditionTrueStrike2024.json | 159 +++++++++++++++ .../AdditionalDamageTrueStrike.json | 186 ++++++++++++++++++ .../ChangelogHistory.txt | 1 + .../Displays/GeneralDisplay.cs | 11 +- .../Displays/SpellsDisplay.cs | 6 + .../Models/Tabletop2024Context.cs | 111 +++++++++++ .../Portraits/DragonBorn5.png | Bin 0 -> 194893 bytes SolastaUnfinishedBusiness/Settings.cs | 3 +- SolastaUnfinishedBusiness/Settings/empty.xml | 3 + .../Translations/de/Others-de.txt | 3 + .../Translations/de/Settings-de.txt | 3 +- .../Translations/en/Others-en.txt | 3 + .../Translations/en/Settings-en.txt | 5 +- .../Translations/es/Others-es.txt | 3 + .../Translations/es/Settings-es.txt | 3 +- .../Translations/fr/Others-fr.txt | 3 + .../Translations/fr/Settings-fr.txt | 3 +- .../Translations/it/Others-it.txt | 3 + .../Translations/it/Settings-it.txt | 3 +- .../Translations/ja/Others-ja.txt | 3 + .../Translations/ja/Settings-ja.txt | 3 +- .../Translations/ko/Others-ko.txt | 3 + .../Translations/ko/Settings-ko.txt | 3 +- .../Translations/pt-BR/Others-pt-BR.txt | 3 + .../Translations/pt-BR/Settings-pt-BR.txt | 3 +- .../Translations/ru/Others-ru.txt | 3 + .../Translations/ru/Settings-ru.txt | 3 +- .../Translations/zh-CN/Others-zh-CN.txt | 3 + .../Translations/zh-CN/Settings-zh-CN.txt | 3 +- 30 files changed, 530 insertions(+), 15 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionTrueStrike2024.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageTrueStrike.json create mode 100644 SolastaUnfinishedBusiness/Portraits/DragonBorn5.png diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index f0da34df0e..88955cbb8c 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -1236,6 +1236,7 @@ ConditionTimeStopEnemy ConditionDefinition ConditionDefinition 637edef6-8b8b-524 ConditionTraditionOpenHandQuiveringPalm ConditionDefinition ConditionDefinition fd7fb9c8-b520-585a-afe2-7617cbf3f3b5 ConditionTraditionSurvivalPhysicalPerfection ConditionDefinition ConditionDefinition 8ea61016-4655-5566-8ab4-0091c411dac3 ConditionTreeForestGuardian ConditionDefinition ConditionDefinition 345a53aa-1f78-5f27-b286-8dd263210fda +ConditionTrueStrike2024 ConditionDefinition ConditionDefinition 24769393-0575-5491-8f76-fe16805a76eb ConditionVileBrew ConditionDefinition ConditionDefinition 7c519d9b-1391-5b0e-b4ed-bb0f66a14851 ConditionVitriolicSphere ConditionDefinition ConditionDefinition 91941437-a832-54c5-b0b5-b1ee0e9716dd ConditionVoidGrasp ConditionDefinition ConditionDefinition 3a29e018-ae36-546b-95a1-112dcd7a8e7a @@ -1899,6 +1900,7 @@ AdditionalDamageSuckerPunch FeatureDefinitionAdditionalDamage FeatureDefinition AdditionalDamageSunlightBlade FeatureDefinitionAdditionalDamage FeatureDefinition 1bd17141-b9ba-5502-a83b-00a846cf4c39 AdditionalDamageTraditionLightRadiantStrikesLuminousKiD6 FeatureDefinitionAdditionalDamage FeatureDefinition 3c4f70ef-3a56-5436-b35a-3228d9e5fdaa AdditionalDamageTraditionLightRadiantStrikesShineD6 FeatureDefinitionAdditionalDamage FeatureDefinition 46d19e1f-83a7-5678-8cd6-edbc7b4b5e7c +AdditionalDamageTrueStrike FeatureDefinitionAdditionalDamage FeatureDefinition 18f52365-8d14-5df9-b590-afa61692bbea AdditionalDamageWayOfSilhouetteStrikeTheVitals FeatureDefinitionAdditionalDamage FeatureDefinition faeef1b6-3f34-5a9b-a26f-539f4d3bd1fd AdditionalDamageWayOfTheDragonDragonFuryAcid FeatureDefinitionAdditionalDamage FeatureDefinition d1c05c8a-c8d1-5a30-b57d-dff80dc9fb71 AdditionalDamageWayOfTheDragonDragonFuryCold FeatureDefinitionAdditionalDamage FeatureDefinition 5c1ce5c4-f54a-51e6-a276-6bb332dca97b @@ -4594,6 +4596,7 @@ AdditionalDamageSuckerPunch FeatureDefinitionAdditionalDamage FeatureDefinitionA AdditionalDamageSunlightBlade FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 1bd17141-b9ba-5502-a83b-00a846cf4c39 AdditionalDamageTraditionLightRadiantStrikesLuminousKiD6 FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 3c4f70ef-3a56-5436-b35a-3228d9e5fdaa AdditionalDamageTraditionLightRadiantStrikesShineD6 FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 46d19e1f-83a7-5678-8cd6-edbc7b4b5e7c +AdditionalDamageTrueStrike FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 18f52365-8d14-5df9-b590-afa61692bbea AdditionalDamageWayOfSilhouetteStrikeTheVitals FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage faeef1b6-3f34-5a9b-a26f-539f4d3bd1fd AdditionalDamageWayOfTheDragonDragonFuryAcid FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage d1c05c8a-c8d1-5a30-b57d-dff80dc9fb71 AdditionalDamageWayOfTheDragonDragonFuryCold FeatureDefinitionAdditionalDamage FeatureDefinitionAdditionalDamage 5c1ce5c4-f54a-51e6-a276-6bb332dca97b diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionTrueStrike2024.json b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionTrueStrike2024.json new file mode 100644 index 0000000000..7335509a49 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ConditionDefinition/ConditionTrueStrike2024.json @@ -0,0 +1,159 @@ +{ + "$type": "ConditionDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "parentCondition": null, + "conditionType": "Beneficial", + "features": [ + "Definition:AdditionalDamageTrueStrike:18f52365-8d14-5df9-b590-afa61692bbea" + ], + "allowMultipleInstances": false, + "silentWhenAdded": true, + "silentWhenRemoved": true, + "silentWhenRefreshed": false, + "terminateWhenRemoved": false, + "specialDuration": false, + "durationType": "Hour", + "durationParameterDie": "D4", + "durationParameter": 1, + "forceTurnOccurence": false, + "turnOccurence": "EndOfTurn", + "specialInterruptions": [ + 9002 + ], + "interruptionRequiresSavingThrow": false, + "interruptionSavingThrowComputationMethod": "SaveOverride", + "interruptionSavingThrowAbility": "", + "interruptionDamageThreshold": 0, + "keepConditionIfSavingThrowSucceeds": false, + "interruptionSavingThrowAffinity": "None", + "conditionTags": [], + "recurrentEffectForms": [], + "cancellingConditions": [], + "additionalDamageWhenHit": false, + "additionalDamageTypeDetermination": "Specific", + "additionalDamageType": "", + "additionalDamageQuantity": "AbilityBonus", + "additionalDamageDieType": "D1", + "additionalDamageDieNumber": 1, + "additionalConditionWhenHit": false, + "additionalCondition": null, + "additionalConditionDurationType": "Round", + "additionalConditionDurationParameter": 1, + "additionalConditionTurnOccurenceType": "StartOfTurn", + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "recurrentEffectParticleReference": null, + "characterShaderReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidParticleParameters": null, + "coldParticleParameters": null, + "fireParticleParameters": null, + "lightningParticleParameters": null, + "poisonParticleParameters": null, + "overrideCharacterShaderColors": false, + "firstCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "secondCharacterShaderColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "timeToWaitBeforeApplyingShader": 0.5, + "timeToWaitBeforeRemovingShader": 0.5, + "possessive": false, + "amountOrigin": "None", + "baseAmount": 0, + "additiveAmount": false, + "sourceAbilityBonusMinValue": 1, + "subsequentOnRemoval": null, + "subsequentHasSavingThrow": false, + "subsequentSavingThrowAbilityScore": "Constitution", + "subsequentVariableForDC": "FrenzyExhaustionDC", + "subsequentDCIncrease": 5, + "effectFormsOnRemoved": [], + "forceBehavior": false, + "addBehavior": false, + "fearSource": false, + "battlePackage": null, + "explorationPackage": null, + "removedFromTheGame": false, + "permanentlyRemovedIfExtraPlanar": false, + "refundReceivedDamageWhenRemoved": false, + "followSourcePosition": false, + "disolveCharacterOnDeath": false, + "disolveParameters": { + "$type": "GraphicsCharacterDefinitions+DisolveParameters, Assembly-CSharp", + "color": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "colorWidth": 0.0, + "noiseScale": 5.0, + "hueScale": 0.0, + "vertexOffset": 0.0, + "curve": { + "$type": "UnityEngine.AnimationCurve, UnityEngine.CoreModule" + }, + "startAfterDeathAnimation": false, + "duration": 0.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": "24769393-0575-5491-8f76-fe16805a76eb", + "contentPack": 9999, + "name": "ConditionTrueStrike2024" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageTrueStrike.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageTrueStrike.json new file mode 100644 index 0000000000..08360b6d9f --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionAdditionalDamage/AdditionalDamageTrueStrike.json @@ -0,0 +1,186 @@ +{ + "$type": "FeatureDefinitionAdditionalDamage, Assembly-CSharp", + "notificationTag": "TrueStrike", + "limitedUsage": "None", + "firstTargetOnly": true, + "targetSide": "Enemy", + "otherSimilarAdditionalDamages": [], + "triggerCondition": "AlwaysActive", + "requiredProperty": "MeleeWeapon", + "attackModeOnly": true, + "attackOnly": false, + "requiredTargetCondition": null, + "requiredTargetSenseType": "Darkvision", + "requiredTargetCreatureTag": "", + "requiredCharacterFamily": null, + "requiredSpecificSpell": null, + "requiredAncestryType": "Sorcerer", + "damageValueDetermination": "Die", + "flatBonus": 0, + "damageDieType": "D6", + "damageDiceNumber": 0, + "additionalDamageType": "Specific", + "specificDamageType": "DamageRadiant", + "ancestryTypeForDamageType": "Sorcerer", + "damageAdvancement": 9000, + "diceByRankTable": [ + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 0, + "diceNumber": 0 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 1, + "diceNumber": 0 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 2, + "diceNumber": 0 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 3, + "diceNumber": 0 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 4, + "diceNumber": 0 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 5, + "diceNumber": 1 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 6, + "diceNumber": 1 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 7, + "diceNumber": 1 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 8, + "diceNumber": 1 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 9, + "diceNumber": 1 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 10, + "diceNumber": 1 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 11, + "diceNumber": 2 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 12, + "diceNumber": 2 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 13, + "diceNumber": 2 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 14, + "diceNumber": 2 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 15, + "diceNumber": 2 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 16, + "diceNumber": 2 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 17, + "diceNumber": 3 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 18, + "diceNumber": 3 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 19, + "diceNumber": 3 + }, + { + "$type": "DiceByRank, Assembly-CSharp", + "rank": 20, + "diceNumber": 3 + } + ], + "familiesWithAdditionalDice": [], + "familiesDiceNumber": 1, + "ignoreCriticalDoubleDice": false, + "hasSavingThrow": false, + "savingThrowAbility": "Dexterity", + "dcComputation": "FixedValue", + "savingThrowDC": 10, + "savingThrowDCAbilityModifier": "Dexterity", + "damageSaveAffinity": "None", + "conditionOperations": [], + "addLightSource": false, + "lightSourceForm": null, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "435cd68bae4d39746b56e94687e6d44f", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "particlesBasedOnAncestryDamageType": false, + "ancestryType": "Sorcerer", + "acidImpactParticleReference": null, + "coldImpactParticleReference": null, + "fireImpactParticleReference": null, + "lightningImpactParticleReference": null, + "poisonImpactParticleReference": null, + "computeDescription": 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": "18f52365-8d14-5df9-b590-afa61692bbea", + "contentPack": 9999, + "name": "AdditionalDamageTrueStrike" +} \ No newline at end of file diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index b2acbab3ea..955294f470 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -2,6 +2,7 @@ - added 'Allow Potions and Scrolls to be carried and used in the ammunition slots' setting [by SilverGriffon] - added 'Allow Potions and Scrolls to be carried and used in the off-hand weapon slot' setting [by SilverGriffon] +- added 'Enable True Strike 5e 2024 cantrip version' - fixed 'Enable all Casters to use new prepared spells tables' not considering bonuses - fixed 'Enable bonus action on Healing Potions and Antitoxin usages' bleeding into scrolls - fixed 'Enable Lay on Hands as bonus action' not getting offered in combat diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 7a1b005521..22d17a7150 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics; +using System.Diagnostics; using SolastaUnfinishedBusiness.Api.ModKit; using SolastaUnfinishedBusiness.Models; using SolastaUnfinishedBusiness.Subclasses; @@ -189,7 +188,7 @@ private static void DisplayMultiplayer() var text = ExportFileName; - UI.ActionTextField(ref text, String.Empty, s => { ExportFileName = s; }, null, UI.Width(144f)); + UI.ActionTextField(ref text, string.Empty, s => { ExportFileName = s; }, null, UI.Width(144f)); } using (UI.HorizontalScope()) @@ -634,6 +633,12 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchOneDndSpellGuidance(); } + toggle = Main.Settings.EnableOneDndTrueStrikeCantrip; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndTrueStrikeCantrip"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndTrueStrikeCantrip = toggle; + } + UI.Label(); UI.Label("" + Gui.Localize("ModUi/&DocsSubclasses") + ":"); UI.Label(); diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index c03869e2b8..77b32943e0 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -172,6 +172,12 @@ private static void DisplaySpellsGeneral() Tabletop2024Context.SwitchOneDndSpellGuidance(); } + toggle = Main.Settings.EnableOneDndTrueStrikeCantrip; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndTrueStrikeCantrip"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndTrueStrikeCantrip = toggle; + } + UI.Label(); toggle = Main.Settings.AllowHasteCasting; diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 37ac09970b..cb71dda705 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -253,6 +253,29 @@ internal static class Tabletop2024Context .AddCustomSubFeatures(ModifyPowerVisibility.Hidden) .AddToDB(); + private static readonly ConditionDefinition ConditionTrueStrike2024 = ConditionDefinitionBuilder + .Create("ConditionTrueStrike2024") + .SetGuiPresentationNoContent(true) + .SetSilent(Silent.WhenAddedOrRemoved) + .SetFeatures( + FeatureDefinitionAdditionalDamageBuilder + .Create("AdditionalDamageTrueStrike") + .SetGuiPresentationNoContent(true) + .SetNotificationTag("TrueStrike") + .SetRequiredProperty(RestrictedContextRequiredProperty.MeleeWeapon) + .SetDamageDice(DieType.D6, 0) + .SetSpecificDamageType(DamageTypeRadiant) + .SetAdvancement( + ExtraAdditionalDamageAdvancement.CharacterLevel, + DiceByRankBuilder.InterpolateDiceByRankTable(0, 20, (5, 1), (11, 2), (17, 3))) + .SetImpactParticleReference(SacredFlame + .EffectDescription.EffectParticleParameters.effectParticleReference) + .SetAttackModeOnly() + .AddToDB()) + .SetSpecialInterruptions(ExtraConditionInterruption.AttacksWithWeaponOrUnarmed) + .AddCustomSubFeatures(new ModifyAttackActionModifierTrueStrike()) + .AddToDB(); + internal static void LateLoad() { BuildBarbarianBrutalStrike(); @@ -261,6 +284,7 @@ internal static void LateLoad() LoadMonkHeightenedMetabolism(); LoadSecondWindToUseOneDndUsagesProgression(); LoadOneDndEnableBardCounterCharmAsReactionAtLevel7(); + LoadOneDndTrueStrike(); LoadSorcerousRestorationAtLevel5(); SwitchBarbarianBrutalCritical(); SwitchBarbarianBrutalStrike(); @@ -915,6 +939,28 @@ internal static void SwitchOneDndHealingPotionBonusAction() } } + private static void LoadOneDndTrueStrike() + { + if (!Main.Settings.EnableOneDndTrueStrikeCantrip) + { + return; + } + + TrueStrike.AddCustomSubFeatures(FixesContext.NoTwinned.Mark, AttackAfterMagicEffect.Marker); + TrueStrike.GuiPresentation.description = "Spell/&TrueStrike2024Description"; + TrueStrike.effectDescription = EffectDescriptionBuilder + .Create() + .SetDurationData(DurationType.Round) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) + .SetIgnoreCover() + .SetEffectAdvancement(EffectIncrementMethod.CasterLevelTable, additionalDicePerIncrement: 1) + .SetEffectForms( + EffectFormBuilder.ConditionForm(ConditionTrueStrike2024, ConditionForm.ConditionOperation.Add, true)) + .SetParticleEffectParameters(SacredFlame) + .SetImpactEffectParameters(new AssetReference()) + .Build(); + } + internal static void SwitchOneDndHealingSpellsBuf() { var dice = Main.Settings.EnableOneDndHealingSpellsUpgrade ? 2 : 1; @@ -1058,6 +1104,71 @@ internal static void SwitchOneDndWarlockInvocationsProgression() Warlock.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock); } + private sealed class ModifyAttackActionModifierTrueStrike : IModifyAttackActionModifier + { + public void OnAttackComputeModifier( + RulesetCharacter attacker, + RulesetCharacter defender, + BattleDefinitions.AttackProximity attackProximity, + RulesetAttackMode attackMode, + string effectName, + ref ActionModifier attackModifier) + { + if (attackMode == null) + { + return; + } + + var oldAttribute = attackMode.AbilityScore; + var newAttribute = attacker.SpellsCastByMe[attacker.SpellsCastByMe.Count - 1].SourceAbility; + var oldValue = attacker.TryGetAttributeValue(oldAttribute); + var newValue = attacker.TryGetAttributeValue(newAttribute); + + oldValue = AttributeDefinitions.ComputeAbilityScoreModifier(oldValue); + newValue = AttributeDefinitions.ComputeAbilityScoreModifier(newValue); + attackMode.AbilityScore = newAttribute; + attackMode.toHitBonus -= oldValue; + attackMode.toHitBonus += newValue; + + var info = new TrendInfo(newValue, FeatureSourceType.AbilityScore, + attackMode.AbilityScore, null); + + var i = attackMode.toHitBonusTrends + .FindIndex(x => x.value == oldValue + && x.sourceType == FeatureSourceType.AbilityScore + && x.sourceName == oldAttribute); + + if (i >= 0) + { + attackMode.toHitBonusTrends.RemoveAt(i); + attackMode.toHitBonusTrends.Insert(i, info); + } + + var damage = attackMode.EffectDescription.FindFirstDamageForm(); + + if (damage == null) + { + return; + } + + damage.damageType = DamageTypeRadiant; + damage.BonusDamage -= oldValue; + damage.BonusDamage += newValue; + + i = damage.DamageBonusTrends + .FindIndex(x => x.value == oldValue + && x.sourceType == FeatureSourceType.AbilityScore + && x.sourceName == oldAttribute); + if (i < 0) + { + return; + } + + damage.DamageBonusTrends.RemoveAt(i); + damage.DamageBonusTrends.Insert(i, info); + } + } + private sealed class PowerOrSpellFinishedByMeMagicalCunning : IPowerOrSpellFinishedByMe { public IEnumerator OnPowerOrSpellFinishedByMe(CharacterActionMagicEffect action, BaseDefinition baseDefinition) diff --git a/SolastaUnfinishedBusiness/Portraits/DragonBorn5.png b/SolastaUnfinishedBusiness/Portraits/DragonBorn5.png new file mode 100644 index 0000000000000000000000000000000000000000..710cd7934d25fe83afcd4a569740d587eec65365 GIT binary patch literal 194893 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�DKXwHQ#Iy7{MO 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 KMNUMnLSTZ-XGc%~ literal 0 HcmV?d00001 diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 330af0a673..8b4be49308 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -230,7 +230,7 @@ public class Settings : UnityModManager.ModSettings public bool EnableInventoryTaintNonProficientItemsRed { get; set; } public bool EnableInventoryTintKnownRecipesRed { get; set; } public bool EnableVersatileAmmunitionSlots { get; set; } - public bool EnableVersatileOffHandSlot { get; set; } + public bool EnableVersatileOffHandSlot { get; set; } public int SetBeltOfDwarvenKindBeardChances { get; set; } = 50; // Crafting @@ -383,6 +383,7 @@ public class Settings : UnityModManager.ModSettings public bool EnableOneDndBarkskinSpell { get; set; } public bool EnableOneDndHealingSpellsUpgrade { get; set; } public bool EnableOneDndGuidanceSpell { get; set; } + public bool EnableOneDndTrueStrikeCantrip { get; set; } public bool AllowHasteCasting { get; set; } public bool AllowStackedMaterialComponent { get; set; } public bool EnableRelearnSpells { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 3ef999709c..f206515811 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -527,6 +527,8 @@ false false false + false + false 50 false false @@ -656,6 +658,7 @@ false false false + false false false false diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index d5d0639d1a..0095c3e597 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -215,6 +215,8 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Brutaler Schlag Feedback/&AdditionalDamageBrutalStrikeLine=Brutaler Schlag verursacht zusätzlichen +{2} Schaden! Feedback/&AdditionalDamageSunderingBlowFormat=Trennender Schlag Feedback/&AdditionalDamageSunderingBlowLine=Sundering Blow verursacht zusätzlichen +{2} Schaden! +Feedback/&AdditionalDamageTrueStrikeFormat=Wahrer Schlag! +Feedback/&AdditionalDamageTrueStrikeLine={0} schlägt {1} und verursacht zusätzlichen {2} Strahlungsschaden! Feedback/&BreakFreeAttempt={0} versucht sich von {2} zu befreien Feedback/&ChangeGloombladeDieType={1} ändert den Gloomblade-Würfeltyp von {2} zu {3} Feedback/&ChangeSneakDiceDieType={1} ändert den Schleichwürfeltyp von {2} zu {3} @@ -339,6 +341,7 @@ Screen/&SpellSlotsUsedShortLongDescription=Sie haben auf dieser Ebene {0} Paktma Screen/&SubclassClassExtraSpellDescriptionFormat=Du kennst diesen Zauber aus der Unterklasse {0}. Screen/&SwitchConfigurationDescription=Wechseln Sie bei Ihren ausgerüsteten Gegenständen zu dieser Konfiguration: {0}.\nHalten Sie die STRG-Taste gedrückt, um die andere Hand möglichst beizubehalten. Spell/&ConjureElementalInvisibleStalkerTitle=Elementar beschwören [Unsichtbarer Pirscher] +Spell/&TrueStrike2024Description=Geleitet von einem Geistesblitz führen Sie einen Angriff mit der Waffe aus, die Sie beim Wirken des Zaubers verwendet haben. Der Angriff nutzt Ihre Zauberfähigkeit statt Stärke oder Geschicklichkeit und verursacht Strahlungsschaden statt des Schadens der Basiswaffe. Der Angriff verursacht außerdem zusätzlichen Strahlungsschaden, wenn Sie die Stufen 5 (1W6), 11 (2W6) und 17 (3W6) erreichen. Stage/&IdentityMorphotypeEyeHeader=Augenstil Tag/&PrimalOrderCantripSpecialTagTitle=Zauberspruch der Urordnung ToolTip/&CheckBoxDefaultPartyTitle=Aktivieren Sie dieses Kontrollkästchen, um Ihre Standardgruppe festzulegen, wenn Sie neue Abenteuer beginnen oder benutzerdefinierte Orte testen. Sie können bis zu {0} Helden nach dem First-In/First-Out-Prinzip auswählen. diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index dfb5d1cfcc..a6fcb72443 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -7,7 +7,7 @@ ModUi/&AddDarknessPerceptiveToDarkRaces=Aktiviere Dunkelheitswahr ModUi/&AddDexModifierToEnemiesInitiativeRoll=DEX-Modifikator zu Feinden hinzufügen Initiative Roll ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Aktiviere Primal Order auf Level 1 und entferne Medium Armor Proficiency ModUi/&AddFighterLevelToIndomitableSavingReroll=Füge die Klassenstufe als Bonus zur Wiederholung des Rettungswurfs für Unbezwingbaren Widerstand hinzu -ModUi/&AddHumanoidFavoredEnemyToRanger=Aktivieren Sie Humanoide als bevorzugte Feinde +ModUi/&AddHumanoidFavoredEnemyToRanger=Aktiviere Humanoide bevorzugte Feinde [Neustart erforderlich] ModUi/&AddNewWeaponsAndRecipesToShops=Neue Waffen und Rezepte zu den Läden hinzufügen [Handbandagen, Hellebarden, Piken, lange Streitkolben, Handarmbrüste] [Neustart erforderlich] ModUi/&AddPaladinSmiteToggle=Fügen Sie einen Schalter hinzu, um Paladinen zu erlauben, Smites nur bei kritischen Treffern zu aktivieren [nützlich, um Reaktionsaufforderungen zu minimieren] ModUi/&AddPersuasionToFighterSkillOptions=Fügen Sie Überredung zu den Fertigkeitsoptionen auf Stufe 1 hinzu @@ -150,6 +150,7 @@ ModUi/&EnableOneDnDPreparedSpellsTables=Ermöglichen Sie allen Za ModUi/&EnableOneDndBarkskinSpell=Aktiviere Barkskin 5e 2024 Zauberversion [Bonusaktion, keine Konzentration, AC auf 17 gesetzt] ModUi/&EnableOneDndGuidanceSpell=Aktivieren Sie die Zauberversion Anleitung 5e 2024 [Wählen Sie beim Zaubern eine Fertigkeit aus und erhalten Sie bis zu 1 Minute lang einen Bonus.] ModUi/&EnableOneDndHealingSpellsUpgrade=Aktiviere Wunden heilen, Falsches Leben, Heilendes Wort, Massenheilung von Wunden und Massenheilendes Wort 5e 2024 Zauberversion +ModUi/&EnableOneDndTrueStrikeCantrip=Aktiviere True Strike 5e 2024 Cantrip-Version [Neustart erforderlich]\n[Angriff nutzt deine Zauberfähigkeit für den Angriffswurf und Schadensbonus sowie zusätzlichen Strahlungsschaden ab Level 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Aktiviere Handauflegen als Bonusaktion ModUi/&EnablePaladinSmiteAsBonusAction=Aktiviere Smite als Bonusaktion ModUi/&EnablePaladinSpellCastingAtLevel1=Aktiviere Zauberwirken auf Stufe 1 statt 2. diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 5bd9859c21..53fd36d161 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -215,6 +215,8 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Brutal Strike Feedback/&AdditionalDamageBrutalStrikeLine=Brutal Strike deals extra +{2} damage! Feedback/&AdditionalDamageSunderingBlowFormat=Sundering Blow Feedback/&AdditionalDamageSunderingBlowLine=Sundering Blow deals extra +{2} damage! +Feedback/&AdditionalDamageTrueStrikeFormat=True Strike! +Feedback/&AdditionalDamageTrueStrikeLine={0} strikes {1} and deals extra {2} radiant damage! Feedback/&BreakFreeAttempt={0} tries to break free from {2} Feedback/&ChangeGloombladeDieType={1} changes the gloomblade die type from {2} to {3} Feedback/&ChangeSneakDiceDieType={1} changes the sneak die type from {2} to {3} @@ -339,6 +341,7 @@ Screen/&SpellSlotsUsedShortLongDescription=You have expended {0} pact magic slot Screen/&SubclassClassExtraSpellDescriptionFormat=You know this spell from {0} subclass. Screen/&SwitchConfigurationDescription=Switch your equipped items to this configuration: {0}.\nHold CTRL to keep off-hand if possible. Spell/&ConjureElementalInvisibleStalkerTitle=Conjure Elemental [Invisible Stalker] +Spell/&TrueStrike2024Description=Guided by a flash of magical insight, you make one attack with the weapon used in the spell's casting. The attack uses your spellcasting ability instead of using Strength or Dexterity, and deals radiant damage instead of the base weapon one. The attack also deals extra Radiant damage when you reach levels 5 (1d6), 11 (2d6), and 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Eye Style Tag/&PrimalOrderCantripSpecialTagTitle=Primal Order Cantrip ToolTip/&CheckBoxDefaultPartyTitle=Check this box to set your default party when starting new adventures or testing custom locations. You can select up to {0} heroes in a first-in / first-out basis diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index d466857377..4e5ad969e0 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -7,7 +7,7 @@ ModUi/&AddDarknessPerceptiveToDarkRaces=Enable Darkness Perceptiv ModUi/&AddDexModifierToEnemiesInitiativeRoll=Add DEX modifier to enemies Initiative Roll ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Enable Primal Order at level 1 and remove Medium Armor Proficiency ModUi/&AddFighterLevelToIndomitableSavingReroll=Add the class level as a bonus to Indomitable Resistance saving throw reroll -ModUi/&AddHumanoidFavoredEnemyToRanger=Enable Humanoid preferred enemies +ModUi/&AddHumanoidFavoredEnemyToRanger=Enable Humanoid preferred enemies [Requires Restart] ModUi/&AddNewWeaponsAndRecipesToShops=Add new weapons and recipes to shops [hand wraps, halberds, pikes, long maces, hand crossbows] [Requires Restart] ModUi/&AddPaladinSmiteToggle=Add a toggle to allow Paladins to only enable smites on critical hits [useful to minimize reaction prompts] ModUi/&AddPersuasionToFighterSkillOptions=Add Persuasion to skill options at level 1 @@ -148,8 +148,9 @@ ModUi/&EnableMonkWeaponSpecialization=Enable Weapon Specializatio ModUi/&EnableMulticlass=Enable multiclass [Requires Restart] ModUi/&EnableOneDnDPreparedSpellsTables=Enable all Casters to use new prepared spells tables [Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard] ModUi/&EnableOneDndBarkskinSpell=Enable Barkskin 5e 2024 spell version [bonus action, no concentration, AC set to 17] -ModUi/&EnableOneDndGuidanceSpell=Enable Guidance 5e 2024 spell version [Choose one skill at casting and get bonus for up to 1 minute.] +ModUi/&EnableOneDndGuidanceSpell=Enable Guidance 5e 2024 spell version [Choose one skill at casting and get bonus for up to 1 minute] ModUi/&EnableOneDndHealingSpellsUpgrade=Enable Cure Wounds, False Life, Healing Word, Mass Cure Wounds, and Mass Healing Word 5e 2024 spells version +ModUi/&EnableOneDndTrueStrikeCantrip=Enable True Strike 5e 2024 cantrip version [Requires Restart]\n[attack uses your spellcasting ability for the attack roll and damage bonus, and additional radiant damage from level 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Enable Lay on Hands as bonus action ModUi/&EnablePaladinSmiteAsBonusAction=Enable Smite as bonus action ModUi/&EnablePaladinSpellCastingAtLevel1=Enable spellcasting at level 1 instead of 2 diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index 3d88ba68d5..a28e787366 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -215,6 +215,8 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Golpe brutal Feedback/&AdditionalDamageBrutalStrikeLine=¡Golpe brutal inflige +{2} de daño adicional! Feedback/&AdditionalDamageSunderingBlowFormat=Golpe desgarrador Feedback/&AdditionalDamageSunderingBlowLine=¡Golpe desgarrador inflige +{2} de daño adicional! +Feedback/&AdditionalDamageTrueStrikeFormat=¡Golpe verdadero! +Feedback/&AdditionalDamageTrueStrikeLine=¡{0} golpea a {1} y causa {2} de daño radiante adicional! Feedback/&BreakFreeAttempt={0} intenta liberarse de {2} Feedback/&ChangeGloombladeDieType={1} cambia el tipo de dado de Gloomblade de {2} a {3} Feedback/&ChangeSneakDiceDieType={1} cambia el tipo de dado furtivo de {2} a {3} @@ -339,6 +341,7 @@ Screen/&SpellSlotsUsedShortLongDescription=Has gastado {0} espacio(s) de magia d Screen/&SubclassClassExtraSpellDescriptionFormat=Conoces este hechizo de la subclase {0}. Screen/&SwitchConfigurationDescription=Cambia los objetos equipados a esta configuración: {0}.\nMantén presionada la tecla CTRL para mantener la mano izquierda si es posible. Spell/&ConjureElementalInvisibleStalkerTitle=Conjurar elemental [Acosador invisible] +Spell/&TrueStrike2024Description=Guiado por un destello de perspicacia mágica, realizas un ataque con el arma utilizada para lanzar el hechizo. El ataque utiliza tu capacidad de lanzamiento de hechizos en lugar de usar Fuerza o Destreza, e inflige daño radiante en lugar del daño del arma base. El ataque también inflige daño radiante adicional cuando alcanzas los niveles 5 (1d6), 11 (2d6) y 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Estilo de ojos Tag/&PrimalOrderCantripSpecialTagTitle=Truco de la Orden Primordial ToolTip/&CheckBoxDefaultPartyTitle=Marca esta casilla para configurar tu grupo predeterminado al iniciar nuevas aventuras o probar ubicaciones personalizadas. Puedes seleccionar hasta {0} héroes por orden de llegada diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 191c180e94..57f11e141e 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -7,7 +7,7 @@ ModUi/&AddDarknessPerceptiveToDarkRaces=Habilita Percepción de l ModUi/&AddDexModifierToEnemiesInitiativeRoll=Añade el modificador DEX a los enemigos Tiro de iniciativa ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Habilita Orden primigenia en el nivel 1 y elimina Competencia en armadura media ModUi/&AddFighterLevelToIndomitableSavingReroll=Añade el nivel de clase como bonificación a la repetición de la tirada de salvación de Resistencia indomable. -ModUi/&AddHumanoidFavoredEnemyToRanger=Habilitar enemigos preferidos humanoides +ModUi/&AddHumanoidFavoredEnemyToRanger=Habilitar enemigos preferidos humanoides [Requiere reinicio] ModUi/&AddNewWeaponsAndRecipesToShops=Añade nuevas armas y recetas a las tiendas [vendas de mano, alabardas, picas, mazas largas, ballestas de mano] [Requiere reinicio] ModUi/&AddPaladinSmiteToggle=Agregar un interruptor para permitir que los Paladines solo habiliten golpes críticos. [útil para minimizar las solicitudes de reacción] ModUi/&AddPersuasionToFighterSkillOptions=Añade Persuasión a las opciones de habilidad en el nivel 1 @@ -150,6 +150,7 @@ ModUi/&EnableOneDnDPreparedSpellsTables=Permitir que todos los la ModUi/&EnableOneDndBarkskinSpell=Habilitar la versión del hechizo Corteza 5e 2024 [acción adicional, sin concentración, CA establecida en 17] ModUi/&EnableOneDndGuidanceSpell=Habilitar Orientación versión del hechizo 5e 2024 [Elige una habilidad al lanzar y obtén una bonificación por hasta 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar heridas, Falsa vida, Palabra de sanación, Curar heridas en masa y Palabra de sanación en masa versión 5e 2024 +ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar Golpe verdadero versión 5e 2024 del truco [Requiere reinicio]\n[el ataque usa tu capacidad de lanzamiento de conjuros para la tirada de ataque y la bonificación de daño, y daño radiante adicional a partir del nivel 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Imposición de manos como acción adicional ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Castigar como acción adicional ModUi/&EnablePaladinSpellCastingAtLevel1=Habilitar el lanzamiento de hechizos en el nivel 1 en lugar del 2 diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index f903be28f0..fa665f1c58 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -215,6 +215,8 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Grève brutale Feedback/&AdditionalDamageBrutalStrikeLine=Frappe brutale inflige +{2} dégâts supplémentaires ! Feedback/&AdditionalDamageSunderingBlowFormat=Coup destructeur Feedback/&AdditionalDamageSunderingBlowLine=Coup de Fracture inflige +{2} dégâts supplémentaires ! +Feedback/&AdditionalDamageTrueStrikeFormat=Véritable frappe ! +Feedback/&AdditionalDamageTrueStrikeLine={0} frappe {1} et inflige {2} dégâts radiants supplémentaires ! Feedback/&BreakFreeAttempt={0} essaie de se libérer de {2} Feedback/&ChangeGloombladeDieType={1} change le type de dé de la lame sombre de {2} à {3} Feedback/&ChangeSneakDiceDieType={1} change le type de dé furtif de {2} à {3} @@ -339,6 +341,7 @@ Screen/&SpellSlotsUsedShortLongDescription=Vous avez dépensé {0} emplacement(s Screen/&SubclassClassExtraSpellDescriptionFormat=Vous connaissez ce sort de la sous-classe {0}. Screen/&SwitchConfigurationDescription=Changez vos objets équipés selon cette configuration : {0}.\nMaintenez la touche CTRL enfoncée pour garder la main secondaire si possible. Spell/&ConjureElementalInvisibleStalkerTitle=Invocation d'élémentaire [Invisible Stalker] +Spell/&TrueStrike2024Description=Guidé par un éclair de perspicacité magique, vous effectuez une attaque avec l'arme utilisée pour lancer le sort. L'attaque utilise votre capacité de lancer de sorts au lieu d'utiliser la Force ou la Dextérité, et inflige des dégâts radiants au lieu de ceux de l'arme de base. L'attaque inflige également des dégâts radiants supplémentaires lorsque vous atteignez les niveaux 5 (1d6), 11 (2d6) et 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Style des yeux Tag/&PrimalOrderCantripSpecialTagTitle=Sort de l'Ordre Primaire ToolTip/&CheckBoxDefaultPartyTitle=Cochez cette case pour définir votre groupe par défaut lorsque vous démarrez de nouvelles aventures ou testez des emplacements personnalisés. Vous pouvez sélectionner jusqu'à {0} héros selon le principe du premier entré/premier sorti diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index f756279969..e2bc8d1d52 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -7,7 +7,7 @@ ModUi/&AddDarknessPerceptiveToDarkRaces=Activez la Perception des ModUi/&AddDexModifierToEnemiesInitiativeRoll=Ajoutez un modificateur DEX aux ennemis Initiative Roll ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Activez Ordre primordial au niveau 1 et supprimez la Maîtrise de l'armure moyenne ModUi/&AddFighterLevelToIndomitableSavingReroll=Ajoutez le niveau de classe comme bonus à la relance du jet de sauvegarde de Résistance indomptable -ModUi/&AddHumanoidFavoredEnemyToRanger=Activer les ennemis préférés des humanoïdes +ModUi/&AddHumanoidFavoredEnemyToRanger=Activer les ennemis préférés humanoïdes [Nécessite un redémarrage] ModUi/&AddNewWeaponsAndRecipesToShops=Ajoutez de nouvelles armes et recettes aux magasins [bandages de main, hallebardes, piques, longues masses, arbalètes à main] [Nécessite un redémarrage] ModUi/&AddPaladinSmiteToggle=Ajoutez une option pour permettre aux paladins d'activer uniquement les coups critiques [utile pour minimiser les invites de réaction] ModUi/&AddPersuasionToFighterSkillOptions=Ajoutez Persuasion aux options de compétence au niveau 1 @@ -150,6 +150,7 @@ ModUi/&EnableOneDnDPreparedSpellsTables=Permettre à tous les lan ModUi/&EnableOneDndBarkskinSpell=Activer Écorce 5e 2024 version du sort [action bonus, pas de concentration, CA fixée à 17] ModUi/&EnableOneDndGuidanceSpell=Activer Guidage 5e version du sort 2024 [Choisissez une compétence au lancement et obtenez un bonus jusqu'à 1 minute.] ModUi/&EnableOneDndHealingSpellsUpgrade=Activer les sorts Soin des blessures, Fausse vie, Mot de guérison, Soin de masse des blessures et Mot de guérison de masse version 5e 2024 +ModUi/&EnableOneDndTrueStrikeCantrip=Activer True Strike 5e 2024 version du tour de passe-passe [Nécessite un redémarrage]\n[L'attaque utilise votre capacité de lancement de sorts pour le jet d'attaque et le bonus de dégâts, ainsi que des dégâts radiants supplémentaires à partir du niveau 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Activer Imposition des mains comme action bonus ModUi/&EnablePaladinSmiteAsBonusAction=Activer Smite comme action bonus ModUi/&EnablePaladinSpellCastingAtLevel1=Activer le lancement de sorts au niveau 1 au lieu de 2 diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index bed87431b9..c5f0b62227 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -215,6 +215,8 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Colpo brutale Feedback/&AdditionalDamageBrutalStrikeLine=Colpo Brutale infligge +{2} danni extra! Feedback/&AdditionalDamageSunderingBlowFormat=Colpo dirompente Feedback/&AdditionalDamageSunderingBlowLine=Colpo dirompente infligge +{2} danni extra! +Feedback/&AdditionalDamageTrueStrikeFormat=Vero colpo! +Feedback/&AdditionalDamageTrueStrikeLine={0} colpisce {1} e infligge {2} danni radianti extra! Feedback/&BreakFreeAttempt={0} cerca di liberarsi da {2} Feedback/&ChangeGloombladeDieType={1} cambia il tipo di dado della lama oscura da {2} a {3} Feedback/&ChangeSneakDiceDieType={1} cambia il tipo di dado furtivo da {2} a {3} @@ -339,6 +341,7 @@ Screen/&SpellSlotsUsedShortLongDescription=Hai speso {0} slot magia patto e {1} Screen/&SubclassClassExtraSpellDescriptionFormat=Conosci questo incantesimo della sottoclasse {0}. Screen/&SwitchConfigurationDescription=Sostituisci gli oggetti equipaggiati con questa configurazione: {0}.\nSe possibile, tieni premuto CTRL per tenerli nella mano secondaria. Spell/&ConjureElementalInvisibleStalkerTitle=Evoca Elementale [Invisibile Stalker] +Spell/&TrueStrike2024Description=Guidato da un lampo di intuizione magica, esegui un attacco con l'arma usata per lanciare l'incantesimo. L'attacco usa la tua capacità di lanciare incantesimi invece di usare Forza o Destrezza e infligge danni radianti invece di quelli dell'arma base. L'attacco infligge anche danni radianti extra quando raggiungi i livelli 5 (1d6), 11 (2d6) e 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Stile degli occhi Tag/&PrimalOrderCantripSpecialTagTitle=Trucchetto dell'Ordine Primordiale ToolTip/&CheckBoxDefaultPartyTitle=Seleziona questa casella per impostare il tuo gruppo predefinito quando inizi nuove avventure o quando provi luoghi personalizzati. Puoi selezionare fino a {0} eroi in base al primo arrivato/primo uscito diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 9b3c46e86d..052ab62ae0 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -7,7 +7,7 @@ ModUi/&AddDarknessPerceptiveToDarkRaces=Abilita Percezione dell'o ModUi/&AddDexModifierToEnemiesInitiativeRoll=Aggiungi modificatore DEX al tiro di iniziativa dei nemici ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Abilita Ordine Primordiale al livello 1 e rimuovi Competenza in Armatura Media ModUi/&AddFighterLevelToIndomitableSavingReroll=Aggiungere il livello di classe come bonus al tiro salvezza ripetuto di Resistenza indomabile. -ModUi/&AddHumanoidFavoredEnemyToRanger=Abilita i nemici preferiti Umanoidi +ModUi/&AddHumanoidFavoredEnemyToRanger=Abilita i nemici preferiti Umanoidi [Richiede riavvio] ModUi/&AddNewWeaponsAndRecipesToShops=Aggiungi nuove armi e ricette ai negozi [fasce per le mani, alabarde, picche, mazze lunghe, balestre a mano] [Richiede riavvio] ModUi/&AddPaladinSmiteToggle=Aggiungi un'opzione per consentire ai Paladini di abilitare le punizioni solo sui colpi critici [utile per ridurre al minimo le richieste di reazione] ModUi/&AddPersuasionToFighterSkillOptions=Aggiungi Persuasione alle opzioni delle abilità al livello 1 @@ -150,6 +150,7 @@ ModUi/&EnableOneDnDPreparedSpellsTables=Abilita tutti i incantato ModUi/&EnableOneDndBarkskinSpell=Abilita la versione dell'incantesimo Barkskin 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] ModUi/&EnableOneDndGuidanceSpell=Abilita la versione dell'incantesimo Guida 5e 2024 [Scegli un'abilità al momento del lancio e ottieni un bonus fino a 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Abilita Cura Ferite, Falsa Vita, Parola Guaritrice, Cura Ferite di Massa e Parola Guaritrice di Massa versione incantesimi 5e 2024 +ModUi/&EnableOneDndTrueStrikeCantrip=Abilita True Strike versione trucchetto 5e 2024 [Richiede riavvio]\n[l'attacco usa la tua capacità di lanciare incantesimi per il tiro di attacco e il bonus al danno, e danni radianti aggiuntivi dal livello 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Abilita Imposizione delle mani come azione bonus ModUi/&EnablePaladinSmiteAsBonusAction=Abilita Colpisci come azione bonus ModUi/&EnablePaladinSpellCastingAtLevel1=Abilita lancio di incantesimi al livello 1 invece che 2 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index d0c1267a9f..27eebe757a 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -215,6 +215,8 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=ブルータル・ストライク Feedback/&AdditionalDamageBrutalStrikeLine=残忍な一撃は追加の +{2} ダメージを与える! Feedback/&AdditionalDamageSunderingBlowFormat=サンダーブロウ Feedback/&AdditionalDamageSunderingBlowLine=サンダーブロウは追加の +{2} ダメージを与える! +Feedback/&AdditionalDamageTrueStrikeFormat=トゥルーストライク! +Feedback/&AdditionalDamageTrueStrikeLine={0} が {1} を攻撃し、追加の {2} 光ダメージを与えます。 Feedback/&BreakFreeAttempt={0} は {2} から抜け出そうとします Feedback/&ChangeGloombladeDieType={1} はグルームブレードのダイスの種類を {2} から {3} に変更します Feedback/&ChangeSneakDiceDieType={1} はスニークダイスの種類を {2} から {3} に変更します @@ -339,6 +341,7 @@ Screen/&SpellSlotsUsedShortLongDescription=このレベルで、{0} 個の契約 Screen/&SubclassClassExtraSpellDescriptionFormat=あなたはこの呪文を{0}サブクラスから知っています。 Screen/&SwitchConfigurationDescription=装備しているアイテムを次の構成に切り替えます: {0}。\nCTRL キーを押したままにして、可能であれば手を離してください。 Spell/&ConjureElementalInvisibleStalkerTitle=コンジュア・エレメンタル [インビジブル・ストーカー] +Spell/&TrueStrike2024Description=魔法の洞察力のひらめきに導かれて、呪文を唱える際に使用した武器で 1 回の攻撃を行います。攻撃では、筋力や敏捷性の代わりに呪文発動能力を使用し、基本武器のダメージの代わりに光輝ダメージを与えます。また、レベル 5 (1d6)、11 (2d6)、および 17 (3d6) に達すると、攻撃は追加の光輝ダメージを与えます。 Stage/&IdentityMorphotypeEyeHeader=アイスタイル Tag/&PrimalOrderCantripSpecialTagTitle=原始秩序の呪文 ToolTip/&CheckBoxDefaultPartyTitle=新しい冒険を開始するとき、またはカスタムの場所をテストするときにデフォルトのパーティーを設定するには、このボックスをチェックします。先入れ先出し方式で最大 {0} 人のヒーローを選択できます diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index bc5e6cb864..50ae215a07 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -7,7 +7,7 @@ ModUi/&AddDarknessPerceptiveToDarkRaces=ダークエルフイニシアティブ ロール ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=レベル 1 で Primal Order を有効にし、Medium Armor Proficiency を削除します。 ModUi/&AddFighterLevelToIndomitableSavingReroll=不屈の抵抗セーヴィングスローの再ロールにクラスレベルをボーナスとして追加します -ModUi/&AddHumanoidFavoredEnemyToRanger=ヒューマノイド優先敵を有効にする +ModUi/&AddHumanoidFavoredEnemyToRanger=ヒューマノイド優先敵を有効にする [再起動が必要] ModUi/&AddNewWeaponsAndRecipesToShops=新しい武器とレシピをショップに追加します [ハンドラップ、ハルバード、パイク、ロングメイス、ハンドクロスボウ] [再起動が必要です] ModUi/&AddPaladinSmiteToggle=パラディンがクリティカルヒット時にのみスマイトを有効にするようにするトグルを追加します [反応プロンプトを最小限に抑えるのに役立ちます] ModUi/&AddPersuasionToFighterSkillOptions=レベル1のスキルオプションに説得を追加します @@ -150,6 +150,7 @@ ModUi/&EnableOneDnDPreparedSpellsTables=すべての キャスタ ModUi/&EnableOneDndBarkskinSpell=樹皮の皮 5e 2024 呪文バージョンを有効にする [ボーナスアクション、集中力なし、AC を 17 に設定] ModUi/&EnableOneDndGuidanceSpell=ガイダンス 5e 2024 呪文バージョンを有効にします [発動時にスキルを 1 つ選択し、最大 1 分間ボーナスを獲得します。] ModUi/&EnableOneDndHealingSpellsUpgrade=治癒術、偽りの生命、治癒の言葉、大量治癒術、大量治癒の言葉 5e 2024 呪文バージョンを有効にする +ModUi/&EnableOneDndTrueStrikeCantrip=トゥルーストライク 5e 2024 キャントリップ バージョンを有効にします [再起動が必要]{99>[攻撃は、攻撃ロールとダメージ ボーナスに呪文発動能力を使用し、レベル 5 から追加の光ダメージを与えます] ModUi/&EnablePaladinLayOnHandsAsBonusAction=ボーナスアクションとして手を置くを有効にする ModUi/&EnablePaladinSmiteAsBonusAction=ボーナスアクションとしてスマイトを有効にする ModUi/&EnablePaladinSpellCastingAtLevel1=呪文発動をレベル2ではなくレベル1で有効にする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index 390ec194e2..b79c1b3ad4 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -215,6 +215,8 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=잔인한 일격 Feedback/&AdditionalDamageBrutalStrikeLine=잔인한 일격이 추가로 +{2} 피해를 입힙니다! Feedback/&AdditionalDamageSunderingBlowFormat=가르는 일격 Feedback/&AdditionalDamageSunderingBlowLine=Sundering Blow는 추가 +{2} 피해를 입힙니다! +Feedback/&AdditionalDamageTrueStrikeFormat=트루 스트라이크! +Feedback/&AdditionalDamageTrueStrikeLine={0}이 {1}을 공격하여 추가로 {2}의 광휘 피해를 입힙니다! Feedback/&BreakFreeAttempt={0}이(가) {2}으로부터 벗어나려고 시도합니다. Feedback/&ChangeGloombladeDieType={1}은 Gloomblade 다이 유형을 {2}에서 {3}으로 변경합니다. Feedback/&ChangeSneakDiceDieType={1}은 몰래 주사위 유형을 {2}에서 {3}으로 변경합니다. @@ -339,6 +341,7 @@ Screen/&SpellSlotsUsedShortLongDescription=이 레벨에서 조약 마법 슬롯 Screen/&SubclassClassExtraSpellDescriptionFormat=당신은 {0} 하위 클래스에서 이 주문을 알고 있습니다. Screen/&SwitchConfigurationDescription=장착된 항목을 다음 구성으로 전환하세요: {0}.\n가능하면 손을 떼지 않으려면 Ctrl 키를 누르세요. Spell/&ConjureElementalInvisibleStalkerTitle=정령 소환 [투명 추적자] +Spell/&TrueStrike2024Description=마법적 통찰력의 섬광에 이끌려 주문을 시전하는 데 사용된 무기로 한 번의 공격을 합니다. 공격은 힘이나 민첩성을 사용하는 대신 주문 시전 능력을 사용하고 기본 무기 대신 광휘 피해를 입힙니다. 또한 레벨 5(1d6), 11(2d6), 17(3d6)에 도달하면 추가 광휘 피해를 입힙니다. Stage/&IdentityMorphotypeEyeHeader=아이 스타일 Tag/&PrimalOrderCantripSpecialTagTitle=원시 주문 주문 ToolTip/&CheckBoxDefaultPartyTitle=새로운 모험을 시작하거나 사용자 지정 위치를 테스트할 때 기본 파티를 설정하려면 이 상자를 선택하세요. 선입선출 방식으로 최대 {0}명의 영웅을 선택할 수 있습니다. diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index aa8049c83f..dacfc17939 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -7,7 +7,7 @@ ModUi/&AddDarknessPerceptiveToDarkRaces=다크엘프, 이니셔티브 롤 ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=레벨 1에서 원시 질서를 활성화하고 중간 방어구 숙련도를 제거합니다. ModUi/&AddFighterLevelToIndomitableSavingReroll=불굴의 저항력 세이빙 스로우 재시전에 보너스로 클래스 레벨을 추가합니다. -ModUi/&AddHumanoidFavoredEnemyToRanger=인간형 선호 적 활성화 +ModUi/&AddHumanoidFavoredEnemyToRanger=인간형 선호 적 활성화 [재시작 필요] ModUi/&AddNewWeaponsAndRecipesToShops=상점에 새로운 무기와 제조법을 추가하세요 [손가락 묶는 무기, 도끼창, 창, 긴 메이스, 손 석궁] [재시작 필요] ModUi/&AddPaladinSmiteToggle=성기사가 치명타에만 스마이트를 사용할 수 있도록 토글을 추가합니다. [반응 프롬프트를 최소화하는 데 유용함] ModUi/&AddPersuasionToFighterSkillOptions=1레벨 스킬 옵션에 설득을 추가합니다. @@ -150,6 +150,7 @@ ModUi/&EnableOneDnDPreparedSpellsTables=모든 주문자 ModUi/&EnableOneDndBarkskinSpell=Barkskin 5e 2024 주문 버전 활성화 [보너스 액션, 집중 없음, AC 17로 설정] ModUi/&EnableOneDndGuidanceSpell=지침 5e 2024 주문 버전을 활성화합니다. [시전 시 스킬 하나를 선택하고 최대 1분 동안 보너스를 받습니다.] ModUi/&EnableOneDndHealingSpellsUpgrade=상처 치료, 거짓 생명, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀 5e 2024 주문 버전을 활성화합니다. +ModUi/&EnableOneDndTrueStrikeCantrip=True Strike 5e 2024 캔트립 버전 사용 [재시작 필요]\n[공격 시 공격 굴림과 피해 보너스에 주문 시전 능력을 사용하고, 레벨 5부터 추가 방사형 피해] ModUi/&EnablePaladinLayOnHandsAsBonusAction=안수를 보너스 액션으로 활성화합니다. ModUi/&EnablePaladinSmiteAsBonusAction=Smite를 보너스 액션으로 활성화합니다. ModUi/&EnablePaladinSpellCastingAtLevel1=레벨 2 대신 레벨 1에서 주문 시전을 활성화합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index e9e43c3c94..e71b4b7b40 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -215,6 +215,8 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Ataque Brutal Feedback/&AdditionalDamageBrutalStrikeLine=Ataque Brutal causa dano extra de +{2}! Feedback/&AdditionalDamageSunderingBlowFormat=Golpe de separação Feedback/&AdditionalDamageSunderingBlowLine=Golpe Destruidor causa +{2} de dano extra! +Feedback/&AdditionalDamageTrueStrikeFormat=Ataque Verdadeiro! +Feedback/&AdditionalDamageTrueStrikeLine={0} ataca {1} e causa {2} de dano radiante extra! Feedback/&BreakFreeAttempt={0} tenta se libertar de {2} Feedback/&ChangeGloombladeDieType={1} altera o tipo de dado da lâmina sombria de {2} para {3} Feedback/&ChangeSneakDiceDieType={1} altera o tipo de dado furtivo de {2} para {3} @@ -339,6 +341,7 @@ Screen/&SpellSlotsUsedShortLongDescription=Você gastou {0} espaço(s) de magia Screen/&SubclassClassExtraSpellDescriptionFormat=Você conhece essa magia da subclasse {0}. Screen/&SwitchConfigurationDescription=Troque seus itens equipados para esta configuração: {0}.\nSegure CTRL para manter a mão secundária, se possível. Spell/&ConjureElementalInvisibleStalkerTitle=Conjurar Elemental [Perseguidor Invisível] +Spell/&TrueStrike2024Description=Guiado por um lampejo de percepção mágica, você faz um ataque com a arma usada na conjuração da magia. O ataque usa sua habilidade de conjuração em vez de usar Força ou Destreza, e causa dano radiante em vez do dano da arma base. O ataque também causa dano Radiante extra quando você alcança os níveis 5 (1d6), 11 (2d6) e 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Estilo dos olhos Tag/&PrimalOrderCantripSpecialTagTitle=Truque da Ordem Primordial ToolTip/&CheckBoxDefaultPartyTitle=Marque esta caixa para definir seu grupo padrão ao iniciar novas aventuras ou testar locais personalizados. Você pode selecionar até {0} heróis em uma base de primeiro a entrar / primeiro a sair diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 873e8b6532..8220b936a1 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -7,7 +7,7 @@ ModUi/&AddDarknessPerceptiveToDarkRaces=Habilitar Percepção da ModUi/&AddDexModifierToEnemiesInitiativeRoll=Adicione modificador de DEX aos inimigos Rolagem de Iniciativa ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Habilite Ordem Primordial no nível 1 e remova Proficiência em Armadura Média ModUi/&AddFighterLevelToIndomitableSavingReroll=Adicione o nível de classe como um bônus para a nova jogada de resistência de Resistência Indomável -ModUi/&AddHumanoidFavoredEnemyToRanger=Habilitar inimigos preferenciais Humanoides +ModUi/&AddHumanoidFavoredEnemyToRanger=Habilitar inimigos preferenciais Humanoides [Requer reinicialização] ModUi/&AddNewWeaponsAndRecipesToShops=Adicionar novas armas e receitas às lojas [bandagens de mão, alabardas, lanças, maças longas, bestas de mão] [Requer reinicialização] ModUi/&AddPaladinSmiteToggle=Adicione uma alternância para permitir que Paladinos habilitem golpes somente em acertos críticos [útil para minimizar prompts de reação] ModUi/&AddPersuasionToFighterSkillOptions=Adicione Persuasão às opções de habilidade no nível 1 @@ -150,6 +150,7 @@ ModUi/&EnableOneDnDPreparedSpellsTables=Permitir que todos os Con ModUi/&EnableOneDndBarkskinSpell=Habilitar Barkskin versão de magia 5e 2024 [ação bônus, sem concentração, CA definida como 17] ModUi/&EnableOneDndGuidanceSpell=Habilitar Orientação versão de magia 5e 2024 [Escolha uma habilidade na conjuração e ganhe bônus por até 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar Ferimentos, Vida Falsa, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa versão de feitiços 5e 2024 +ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar True Strike versão 5e 2024 do truque [Requer reinicialização]\n[o ataque usa sua habilidade de conjuração para a jogada de ataque e bônus de dano, além de dano radiante adicional do nível 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Impor as Mãos como ação bônus ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Smite como ação bônus ModUi/&EnablePaladinSpellCastingAtLevel1=Habilitar conjuração de feitiços no nível 1 em vez de 2 diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 243808fb5c..6d78bec38c 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -215,6 +215,8 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=Жестокий удар Feedback/&AdditionalDamageBrutalStrikeLine=Жестокий удар наносит дополнительно +{2} урона! Feedback/&AdditionalDamageSunderingBlowFormat=Раскалывающий удар Feedback/&AdditionalDamageSunderingBlowLine=Раскалывающий наносит дополнительно +{2} урона! +Feedback/&AdditionalDamageTrueStrikeFormat=Настоящий удар! +Feedback/&AdditionalDamageTrueStrikeLine={0} поражает {1} и наносит дополнительный {2} урона излучением! Feedback/&BreakFreeAttempt={0} пытается вырваться из {2} Feedback/&ChangeGloombladeDieType={1} меняет тип кости сумрачного клинка с {2} на {3} Feedback/&ChangeSneakDiceDieType={1} изменяет тип кости скрытой атаки с {2} на {3} @@ -339,6 +341,7 @@ Screen/&SpellSlotsUsedShortLongDescription=Вы потратили {0} ячее Screen/&SubclassClassExtraSpellDescriptionFormat=Вам известно это заклинание из архетипа {0}. Screen/&SwitchConfigurationDescription=Поменять экипированные предметы на эту конфигурацию: {0}.\nЗажмите CTRL, чтобы оставить предмет в левой руке, если возможно. Spell/&ConjureElementalInvisibleStalkerTitle=Призыв элементаля [Невидимый охотник] +Spell/&TrueStrike2024Description=Руководствуясь вспышкой магического озарения, вы совершаете одну атаку оружием, использованным при произнесении заклинания. Атака использует вашу способность к заклинанию вместо использования Силы или Ловкости и наносит урон излучением вместо урона базового оружия. Атака также наносит дополнительный урон излучением, когда вы достигаете уровней 5 (1d6), 11 (2d6) и 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Вид глаз Tag/&PrimalOrderCantripSpecialTagTitle=Заговор Первобытного порядка ToolTip/&CheckBoxDefaultPartyTitle=Отметьте этот пункт, чтобы задать группу по умолчанию для начала нового приключения или тестирования кастомных локаций. Вы можете выбрать вплоть до {0} персонажей по приципу первый на вход / первый на выход diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index d185b74440..0072161ecd 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -7,7 +7,7 @@ ModUi/&AddDarknessPerceptiveToDarkRaces=Включить Восп ModUi/&AddDexModifierToEnemiesInitiativeRoll=Добавлять модификатор Ловкости к броскам Инициативы противников ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=Включить Первобытный порядок на уровне 1 и убрать Владение средней бронёй ModUi/&AddFighterLevelToIndomitableSavingReroll=Добавлять уровень класса к повторным спасброскам умения Упорный -ModUi/&AddHumanoidFavoredEnemyToRanger=Включить Гуманоидов в список предпочтительных противников +ModUi/&AddHumanoidFavoredEnemyToRanger=Включить Гуманоидов предпочитаемых врагов [Требуется перезапуск] ModUi/&AddNewWeaponsAndRecipesToShops=Добавить новые оружия и рецепты в магазины [обмотки, алебарды, пики, длинные булавы, ручные арбалеты] [Необходим перезапуск] ModUi/&AddPaladinSmiteToggle=Добавить переключатель, чтобы позволить Паладинам использовать кару только при критах [полезно для уменьшения количества запросов на реакции] ModUi/&AddPersuasionToFighterSkillOptions=Добавить Убеждение к выбору навыков на уровне 1 @@ -150,6 +150,7 @@ ModUi/&EnableOneDnDPreparedSpellsTables=Включить всем Дубовая кора из 5e 2024 [бонусное действие, не требует концентрации, КД на 17] ModUi/&EnableOneDndGuidanceSpell=Включить версию заклинания Указание из 5e 2024 [Выберите один навык при наложении и получите бонус на срок до 1 минуты.] ModUi/&EnableOneDndHealingSpellsUpgrade=Включить версии заклинаний Лечение ран, Псевдожизнь, Лечащее слово, Множественное лечение ран и Множественное лечащее слово из 5e 2024 +ModUi/&EnableOneDndTrueStrikeCantrip=Включить версию колдовства True Strike 5e 2024 [Требуется перезапуск]\n[атака использует вашу способность к заклинаниям для броска атаки и бонуса к урону, а также дополнительный урон от излучения с 5-го уровня] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Включить Наложение рук бонусным действием ModUi/&EnablePaladinSmiteAsBonusAction=Включить Кару бонусным действием ModUi/&EnablePaladinSpellCastingAtLevel1=Включить возможность наложения заклинаний на 1-м уровне вместо 2-го diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 11b9a07454..03efcd518f 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -215,6 +215,8 @@ Feedback/&AdditionalDamageBrutalStrikeFormat=凶蛮打击 Feedback/&AdditionalDamageBrutalStrikeLine=凶蛮打击造成额外 +{2} 伤害! Feedback/&AdditionalDamageSunderingBlowFormat=粉碎殴击 Feedback/&AdditionalDamageSunderingBlowLine=粉碎殴击造成额外 +{2} 伤害! +Feedback/&AdditionalDamageTrueStrikeFormat=真实打击! +Feedback/&AdditionalDamageTrueStrikeLine={0} 攻击 {1} 并造成额外的 {2} 点辐射伤害! Feedback/&BreakFreeAttempt={0} 试图摆脱 {2} Feedback/&ChangeGloombladeDieType={1} 将 gloomblade 模具类型从 {2} 更改为 {3} Feedback/&ChangeSneakDiceDieType={1} 将偷袭骰类型从 {2} 更改为 {3} @@ -339,6 +341,7 @@ Screen/&SpellSlotsUsedShortLongDescription=你在这个等级已经扩展了 {0} Screen/&SubclassClassExtraSpellDescriptionFormat=你从 {0} 子职知道这个法术。 Screen/&SwitchConfigurationDescription=将你装备的物品切换到此配置:{0}。\n如果可能,按住 CTRL 以保持副手状态。 Spell/&ConjureElementalInvisibleStalkerTitle=元素咒唤【隐形潜伏怪】 +Spell/&TrueStrike2024Description=在魔法洞察力的指引下,你使用施放法术时使用的武器发动一次攻击。这次攻击使用你的施法能力,而不是力量或敏捷,并造成辐射伤害,而不是基本武器伤害。当你达到等级 5(1d6)、11(2d6)和 17(3d6)时,这次攻击还会造成额外的辐射伤害。 Stage/&IdentityMorphotypeEyeHeader=眼型 Tag/&PrimalOrderCantripSpecialTagTitle=元始秩序戏法 ToolTip/&CheckBoxDefaultPartyTitle=在开始新的冒险或测试自定义位置时,选中此框以设置你的默认队伍。你最多可以选择 {0} 个英雄,以先进先出的方式进行 diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index ed7e8f9131..3eae4a457f 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -7,7 +7,7 @@ ModUi/&AddDarknessPerceptiveToDarkRaces=对暗精灵、主动掷骰 ModUi/&AddDruidPrimalOrderAndRemoveMediumArmorProficiency=在 1 级启用原始秩序并移除中等护甲熟练度 ModUi/&AddFighterLevelToIndomitableSavingReroll=将职业等级作为奖励添加到不屈抵抗豁免检定重掷中 -ModUi/&AddHumanoidFavoredEnemyToRanger=启用人形首选敌人 +ModUi/&AddHumanoidFavoredEnemyToRanger=启用人形首选敌人[需要重启] ModUi/&AddNewWeaponsAndRecipesToShops=在商店中添加新武器和配方[手套、戟、长矛、长锤、手弩] [需要重启] ModUi/&AddPaladinSmiteToggle=添加一个开关以允许圣骑士仅在暴击时启用惩击[有助于最大限度地减少反应提示] ModUi/&AddPersuasionToFighterSkillOptions=将说服添加到 1 级技能选项中 @@ -150,6 +150,7 @@ ModUi/&EnableOneDnDPreparedSpellsTables=允许所有施法者Barkskin 5e 2024 法术版本 [奖励行动,无专注,AC 设置为 17] ModUi/&EnableOneDndGuidanceSpell=启用Guidance 5e 2024 法术版本[施法时选择一项技能并获得最多 1 分钟的奖励。] ModUi/&EnableOneDndHealingSpellsUpgrade=启用治愈伤口、虚假生命、治疗之语、群体治愈伤口和群体治疗之语 5e 2024 法术版本 +ModUi/&EnableOneDndTrueStrikeCantrip=启用 True Strike 5e 2024 法术版本 [需要重启]{99>[攻击使用你的施法能力进行攻击掷骰和伤害加成,并从 5 级开始造成额外的辐射伤害] ModUi/&EnablePaladinLayOnHandsAsBonusAction=启用圣疗术作为奖励行动 ModUi/&EnablePaladinSmiteAsBonusAction=启用 Smite 作为奖励行动 ModUi/&EnablePaladinSpellCastingAtLevel1=在 1 级(而非 2 级)启用施法 From d3cad4bab516ab9a0316a87192a5a390997a6cfc Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 18:03:17 -0800 Subject: [PATCH 29/44] review type references String -> string Int32 -> int Object -> object Byte -> byte --- .../GameExtensions/FlankingMathExtensions.cs | 4 ++-- .../Api/Helpers/LevelUpHelper.cs | 2 +- .../Api/Helpers/MulticlassInOutRulesHelper.cs | 2 +- .../Behaviors/Specific/MirrorImage.cs | 5 ++--- .../CharacterClassDefinitionBuilder.cs | 2 +- .../Builders/FeatDefinitionBuilder.cs | 2 +- .../Builders/ItemBuilder.cs | 5 ++--- SolastaUnfinishedBusiness/Builders/_Helpers.cs | 12 ++++++------ .../CustomUI/CustomInvocationSelectionPanel.cs | 7 ++++--- .../CustomUI/CustomTooltipProvider.cs | 5 ++--- SolastaUnfinishedBusiness/CustomUI/Sprites.cs | 11 +++++------ .../DataViewer/ReflectionTree.cs | 4 ++-- .../Displays/PartyEditor.cs | 7 +++---- SolastaUnfinishedBusiness/Main.cs | 6 +++--- .../Models/CraftingContext.cs | 4 ++-- .../Models/DungeonMakerContext.cs | 4 ++-- .../Models/EncountersContext.cs | 6 +++--- .../Models/FeatsContext.cs | 4 ++-- .../Models/InventoryManagementContext.cs | 2 +- .../Models/SaveByLocationContext.cs | 3 +-- .../Models/UpdateContext.cs | 8 ++++---- ...rStageFightingStyleSelectionPanelPatcher.cs | 2 +- ...racterStageSubclassSelectionPanelPatcher.cs | 2 +- .../Patches/FeatureElementEffectLinePatcher.cs | 5 ++--- .../Patches/RecipesByTooltypeLinePatcher.cs | 2 +- .../Patches/RulesetCharacterPatcher.cs | 4 ++-- .../Patches/UserCampaignEditorScreenPatcher.cs | 18 +++++++++--------- 27 files changed, 66 insertions(+), 72 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/FlankingMathExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/FlankingMathExtensions.cs index 85d4562851..4a687272ae 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/FlankingMathExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/FlankingMathExtensions.cs @@ -98,7 +98,7 @@ public Point3D(int3 pt) : this(pt.x, pt.y, pt.z) public double Y { get; } = y; public double Z { get; } = z; - public override String ToString() + public override string ToString() { return "(" + X + "," + Y + "," + Z + ")"; } @@ -158,7 +158,7 @@ internal class Cube(Point3D minPoint, Point3D maxPoint) public Plane BottomFace { get; } = new(minPoint.X, maxPoint.X, minPoint.Y, minPoint.Y, minPoint.Z, maxPoint.Z, new Vector3D(0, -1, 0), -minPoint.Y); - public override String ToString() + public override string ToString() { return "(" + minPoint + ":" + maxPoint + ")"; } diff --git a/SolastaUnfinishedBusiness/Api/Helpers/LevelUpHelper.cs b/SolastaUnfinishedBusiness/Api/Helpers/LevelUpHelper.cs index 60d3d6dad0..f69e28c694 100644 --- a/SolastaUnfinishedBusiness/Api/Helpers/LevelUpHelper.cs +++ b/SolastaUnfinishedBusiness/Api/Helpers/LevelUpHelper.cs @@ -658,7 +658,7 @@ internal static void SortHeroRepertoires(RulesetCharacterHero hero) : b.SpellCastingRace.FormatTitle(); return a.SaveDC == b.SaveDC - ? String.Compare(title1, title2, StringComparison.CurrentCultureIgnoreCase) + ? string.Compare(title1, title2, StringComparison.CurrentCultureIgnoreCase) : a.SaveDC.CompareTo(b.SaveDC); }); } diff --git a/SolastaUnfinishedBusiness/Api/Helpers/MulticlassInOutRulesHelper.cs b/SolastaUnfinishedBusiness/Api/Helpers/MulticlassInOutRulesHelper.cs index f8fdc326da..4be7b61ac5 100644 --- a/SolastaUnfinishedBusiness/Api/Helpers/MulticlassInOutRulesHelper.cs +++ b/SolastaUnfinishedBusiness/Api/Helpers/MulticlassInOutRulesHelper.cs @@ -47,7 +47,7 @@ internal static void EnumerateHeroAllowedClassDefinitions([NotNull] RulesetChara hero.ClassesAndLevels.TryGetValue(b, out var bLevels); return aLevels == bLevels - ? String.Compare(a.FormatTitle(), b.FormatTitle(), StringComparison.CurrentCultureIgnoreCase) + ? string.Compare(a.FormatTitle(), b.FormatTitle(), StringComparison.CurrentCultureIgnoreCase) : bLevels.CompareTo(aLevels); }); diff --git a/SolastaUnfinishedBusiness/Behaviors/Specific/MirrorImage.cs b/SolastaUnfinishedBusiness/Behaviors/Specific/MirrorImage.cs index 062963d3b2..9fec5f66f8 100644 --- a/SolastaUnfinishedBusiness/Behaviors/Specific/MirrorImage.cs +++ b/SolastaUnfinishedBusiness/Behaviors/Specific/MirrorImage.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Builders; @@ -180,7 +179,7 @@ internal static void AttackRollPostfix( } outcome = RuleDefinitions.RollOutcome.Failure; - successDelta = Int32.MaxValue; + successDelta = int.MaxValue; } private static void ReportAttackerIsBlind(RulesetActor attacker) diff --git a/SolastaUnfinishedBusiness/Builders/CharacterClassDefinitionBuilder.cs b/SolastaUnfinishedBusiness/Builders/CharacterClassDefinitionBuilder.cs index 8534193c6b..28182f9a63 100644 --- a/SolastaUnfinishedBusiness/Builders/CharacterClassDefinitionBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/CharacterClassDefinitionBuilder.cs @@ -44,7 +44,7 @@ internal CharacterClassDefinitionBuilder AddPersonality(string personalityFlag, }); Definition.PersonalityFlagOccurences.Sort((x, y) => - String.Compare(x.PersonalityFlag, y.PersonalityFlag, StringComparison.CurrentCultureIgnoreCase)); + string.Compare(x.PersonalityFlag, y.PersonalityFlag, StringComparison.CurrentCultureIgnoreCase)); return this; } diff --git a/SolastaUnfinishedBusiness/Builders/FeatDefinitionBuilder.cs b/SolastaUnfinishedBusiness/Builders/FeatDefinitionBuilder.cs index bc43b1980a..061a828cc6 100644 --- a/SolastaUnfinishedBusiness/Builders/FeatDefinitionBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/FeatDefinitionBuilder.cs @@ -78,7 +78,7 @@ internal TBuilder SetFeatFamily(string family) internal TBuilder SetArmorProficiencyPrerequisite(string category = null) { Definition.armorProficiencyPrerequisite = category != null; - Definition.armorProficiencyCategory = category ?? String.Empty; + Definition.armorProficiencyCategory = category ?? string.Empty; return (TBuilder)this; } diff --git a/SolastaUnfinishedBusiness/Builders/ItemBuilder.cs b/SolastaUnfinishedBusiness/Builders/ItemBuilder.cs index 23532d17e7..be5bb242ca 100644 --- a/SolastaUnfinishedBusiness/Builders/ItemBuilder.cs +++ b/SolastaUnfinishedBusiness/Builders/ItemBuilder.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.LanguageExtensions; @@ -89,7 +88,7 @@ internal static ItemDefinition BuildNewMagicArmor( var newItem = builder.AddToDB(); - if (newItem.ItemPresentation.armorAddressableName != String.Empty) + if (newItem.ItemPresentation.armorAddressableName != string.Empty) { return newItem; } diff --git a/SolastaUnfinishedBusiness/Builders/_Helpers.cs b/SolastaUnfinishedBusiness/Builders/_Helpers.cs index 6a1995ebca..e8662180dc 100644 --- a/SolastaUnfinishedBusiness/Builders/_Helpers.cs +++ b/SolastaUnfinishedBusiness/Builders/_Helpers.cs @@ -74,32 +74,32 @@ internal static int CompareFeatureUnlock(FeatureUnlockByLevel a, FeatureUnlockBy internal static int CompareTitle(BaseDefinition x, BaseDefinition y) { - return String.Compare(x.FormatTitle(), y.FormatTitle(), StringComparison.CurrentCultureIgnoreCase); + return string.Compare(x.FormatTitle(), y.FormatTitle(), StringComparison.CurrentCultureIgnoreCase); } internal static int Compare(BaseDefinition x, BaseDefinition y) { - return String.Compare(x.Name, y.Name, StringComparison.CurrentCultureIgnoreCase); + return string.Compare(x.Name, y.Name, StringComparison.CurrentCultureIgnoreCase); } internal static int Compare(SavingThrowAffinityGroup x, SavingThrowAffinityGroup y) { - var result = String.Compare(x.abilityScoreName, y.abilityScoreName, StringComparison.CurrentCultureIgnoreCase); + var result = string.Compare(x.abilityScoreName, y.abilityScoreName, StringComparison.CurrentCultureIgnoreCase); return result == 0 ? x.affinity.CompareTo(y.affinity) : result; } internal static int Compare(AbilityCheckAffinityGroup x, AbilityCheckAffinityGroup y) { - var result = String.Compare(x.abilityScoreName, y.abilityScoreName, StringComparison.CurrentCultureIgnoreCase); + var result = string.Compare(x.abilityScoreName, y.abilityScoreName, StringComparison.CurrentCultureIgnoreCase); return result == 0 - ? String.Compare(x.proficiencyName, y.proficiencyName, StringComparison.CurrentCultureIgnoreCase) + ? string.Compare(x.proficiencyName, y.proficiencyName, StringComparison.CurrentCultureIgnoreCase) : result; } internal static int Compare(MonsterSkillProficiency x, MonsterSkillProficiency y) { - return String.Compare(x.SkillName, y.SkillName, StringComparison.CurrentCultureIgnoreCase); // then by bonus? + return string.Compare(x.SkillName, y.SkillName, StringComparison.CurrentCultureIgnoreCase); // then by bonus? } } diff --git a/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSelectionPanel.cs b/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSelectionPanel.cs index eaa311d000..719119a468 100644 --- a/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSelectionPanel.cs +++ b/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSelectionPanel.cs @@ -25,7 +25,7 @@ internal class CustomInvocationSelectionPanel : CharacterStagePanel private readonly Comparison _poolCompare = (a, b) => { - var r = String.CompareOrdinal(a.Id.Tag, b.Id.Tag); + var r = string.CompareOrdinal(a.Id.Tag, b.Id.Tag); if (r != 0) { @@ -34,7 +34,7 @@ internal class CustomInvocationSelectionPanel : CharacterStagePanel if (a.IsUnlearn == b.IsUnlearn) { - return String.CompareOrdinal(a.Id.Name, b.Id.Name); + return string.CompareOrdinal(a.Id.Name, b.Id.Name); } if (a.IsUnlearn) @@ -1229,7 +1229,6 @@ private static void RefreshLearning(this SpellsByLevelGroup instance, } } - // ReSharper disable once SuggestBaseTypeForParameter private static void RefreshUnlearning( this SpellsByLevelGroup instance, RulesetCharacterHero hero, @@ -1279,6 +1278,8 @@ internal static void CustomUnbind(this SpellsByLevelGroup instance) Gui.ReleaseChildrenToPool(spellsTable); instance.slotStatusTable.Unbind(); } + + // ReSharper disable once SuggestBaseTypeForParameter } internal static class SpellBoxExtensions diff --git a/SolastaUnfinishedBusiness/CustomUI/CustomTooltipProvider.cs b/SolastaUnfinishedBusiness/CustomUI/CustomTooltipProvider.cs index aa7e330e5a..c55c05fcff 100644 --- a/SolastaUnfinishedBusiness/CustomUI/CustomTooltipProvider.cs +++ b/SolastaUnfinishedBusiness/CustomUI/CustomTooltipProvider.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using JetBrains.Annotations; using UnityEngine; @@ -77,7 +76,7 @@ internal void SetPrerequisites(List missingRequirements) { _prerequisites = missingRequirements == null || missingRequirements.Count == 0 ? string.Empty - : String.Join("\n", missingRequirements.Select(e => Gui.Localize(e))); + : string.Join("\n", missingRequirements.Select(e => Gui.Localize(e))); } internal void SetSubtitle(string subtitle) diff --git a/SolastaUnfinishedBusiness/CustomUI/Sprites.cs b/SolastaUnfinishedBusiness/CustomUI/Sprites.cs index 974162257c..7ff64592c4 100644 --- a/SolastaUnfinishedBusiness/CustomUI/Sprites.cs +++ b/SolastaUnfinishedBusiness/CustomUI/Sprites.cs @@ -1,5 +1,4 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Builders; @@ -88,7 +87,7 @@ public static class Sprites [NotNull] internal static Sprite GetOrCreateSprite( string name, - Byte[] bitmap, + byte[] bitmap, int size) { return GetOrCreateSprite(name, bitmap, size, size); @@ -97,7 +96,7 @@ internal static Sprite GetOrCreateSprite( [NotNull] private static Sprite GetOrCreateSprite( string name, - Byte[] bitmap, + byte[] bitmap, int sizeX, int sizeY) { @@ -148,7 +147,7 @@ private static string GetSpriteGuid([NotNull] string id) [NotNull] internal static AssetReferenceSprite GetSprite( string name, - Byte[] bitmap, + byte[] bitmap, int size) { return GetSprite(name, bitmap, size, size); @@ -157,7 +156,7 @@ internal static AssetReferenceSprite GetSprite( [NotNull] internal static AssetReferenceSprite GetSprite( string name, - Byte[] bitmap, + byte[] bitmap, int sizeX, int sizeY) { diff --git a/SolastaUnfinishedBusiness/DataViewer/ReflectionTree.cs b/SolastaUnfinishedBusiness/DataViewer/ReflectionTree.cs index febf0109ae..52741d34fa 100644 --- a/SolastaUnfinishedBusiness/DataViewer/ReflectionTree.cs +++ b/SolastaUnfinishedBusiness/DataViewer/ReflectionTree.cs @@ -484,7 +484,7 @@ private void UpdateFieldNodes() child.Name)) .ToList(); - _fieldNodes.Sort((x, y) => String.Compare(x.Name, y.Name, StringComparison.CurrentCultureIgnoreCase)); + _fieldNodes.Sort((x, y) => string.Compare(x.Name, y.Name, StringComparison.CurrentCultureIgnoreCase)); } private void UpdatePropertyNodes() @@ -514,7 +514,7 @@ private void UpdatePropertyNodes() FindOrCreateChildForValue(nodeType.MakeGenericType(Type, InstType, child.PropertyType), this, child.Name)).ToList(); - _propertyNodes.Sort((x, y) => String.Compare(x.Name, y.Name, StringComparison.CurrentCultureIgnoreCase)); + _propertyNodes.Sort((x, y) => string.Compare(x.Name, y.Name, StringComparison.CurrentCultureIgnoreCase)); } internal void UpdateValue() diff --git a/SolastaUnfinishedBusiness/Displays/PartyEditor.cs b/SolastaUnfinishedBusiness/Displays/PartyEditor.cs index a172a84b8b..158442cc9f 100644 --- a/SolastaUnfinishedBusiness/Displays/PartyEditor.cs +++ b/SolastaUnfinishedBusiness/Displays/PartyEditor.cs @@ -1,6 +1,5 @@ // Copyright < 2021 > Narria (github user Cabarius) - License: MIT -using System; using System.Collections.Generic; using System.Linq; using SolastaUnfinishedBusiness.Api.Helpers; @@ -83,7 +82,7 @@ internal static void OnGUI() { case > 1: hero.Name = parts[0]; - hero.SurName = String.Join(" ", parts.Skip(1).ToArray()).Trim(); + hero.SurName = string.Join(" ", parts.Skip(1).ToArray()).Trim(); break; case 1: hero.Name = parts[0]; @@ -113,9 +112,9 @@ internal static void OnGUI() var attribute = attr.Value; var baseValue = attribute.baseValue; var modifiers = attribute.ActiveModifiers.Where(m => m.Value != 0).Select(m => - $"{m.Value:+0;-#} {String.Join(" ", m.Tags).TrimStart('0', '1', '2', '3', '4', '5', '6', '7', '8', '9').Cyan()}") + $"{m.Value:+0;-#} {string.Join(" ", m.Tags).TrimStart('0', '1', '2', '3', '4', '5', '6', '7', '8', '9').Cyan()}") .ToArray(); - var modifiersString = String.Join(" ", modifiers); + var modifiersString = string.Join(" ", modifiers); using (HorizontalScope()) { diff --git a/SolastaUnfinishedBusiness/Main.cs b/SolastaUnfinishedBusiness/Main.cs index 15db3b7566..d5e4b03712 100644 --- a/SolastaUnfinishedBusiness/Main.cs +++ b/SolastaUnfinishedBusiness/Main.cs @@ -23,7 +23,7 @@ internal static class Main internal static string SettingsFolder => Path.Combine(ModFolder, "Settings"); internal static string[] SettingsFiles { get; private set; } - internal static string SettingsFilename { get; private set; } = String.Empty; + internal static string SettingsFilename { get; private set; } = string.Empty; internal static Settings Settings => Mod.Settings; [Conditional("DEBUG")] @@ -163,7 +163,7 @@ internal static void SaveSettings(string filename) SettingsFilename = Path.Combine(SettingsFolder, filename); UnityModManager.ModSettings.Save(Settings, ModEntry); - SettingsFilename = String.Empty; + SettingsFilename = string.Empty; LoadSettingFilenames(); } @@ -172,7 +172,7 @@ internal static void LoadSettings(string filename) { SettingsFilename = Path.Combine(SettingsFolder, $"{filename}.xml"); Mod.Settings = UnityModManager.ModSettings.Load(ModEntry); - SettingsFilename = String.Empty; + SettingsFilename = string.Empty; } internal static void RemoveSettings(string filename) diff --git a/SolastaUnfinishedBusiness/Models/CraftingContext.cs b/SolastaUnfinishedBusiness/Models/CraftingContext.cs index 883d3f208b..a543e13bff 100644 --- a/SolastaUnfinishedBusiness/Models/CraftingContext.cs +++ b/SolastaUnfinishedBusiness/Models/CraftingContext.cs @@ -4,8 +4,8 @@ using TMPro; using UnityEngine; using UnityEngine.UI; -using Object = System.Object; - +using Object = object; + namespace SolastaUnfinishedBusiness.Models; internal static class CraftingContext diff --git a/SolastaUnfinishedBusiness/Models/DungeonMakerContext.cs b/SolastaUnfinishedBusiness/Models/DungeonMakerContext.cs index 2cbe427e89..62b1465fc4 100644 --- a/SolastaUnfinishedBusiness/Models/DungeonMakerContext.cs +++ b/SolastaUnfinishedBusiness/Models/DungeonMakerContext.cs @@ -78,7 +78,7 @@ internal static int Compare([NotNull] BaseBlueprint left, [NotNull] BaseBlueprin { var leftCategory = DatabaseHelper.GetDefinition(left.Category); var rightCategory = DatabaseHelper.GetDefinition(right.Category); - var result = String.Compare(leftCategory.FormatTitle(), rightCategory.FormatTitle(), + var result = string.Compare(leftCategory.FormatTitle(), rightCategory.FormatTitle(), StringComparison.CurrentCultureIgnoreCase); if (result != 0) @@ -86,7 +86,7 @@ internal static int Compare([NotNull] BaseBlueprint left, [NotNull] BaseBlueprin return result; } - result = String.Compare(left.name, right.name, StringComparison.CurrentCultureIgnoreCase); + result = string.Compare(left.name, right.name, StringComparison.CurrentCultureIgnoreCase); if (result == 0) { diff --git a/SolastaUnfinishedBusiness/Models/EncountersContext.cs b/SolastaUnfinishedBusiness/Models/EncountersContext.cs index d9ae750659..916fbcb9ac 100644 --- a/SolastaUnfinishedBusiness/Models/EncountersContext.cs +++ b/SolastaUnfinishedBusiness/Models/EncountersContext.cs @@ -62,7 +62,7 @@ internal static List GetMonsters() Monsters.AddRange(monsterDefinitionDatabase.Where(x => x.DungeonMakerPresence == MonsterDefinition.DungeonMaker.Monster)); Monsters.Sort((a, b) => Math.Abs(a.ChallengeRating - b.ChallengeRating) < 0.001f - ? String.Compare(a.FormatTitle(), b.FormatTitle(), StringComparison.CurrentCultureIgnoreCase) + ? string.Compare(a.FormatTitle(), b.FormatTitle(), StringComparison.CurrentCultureIgnoreCase) : a.ChallengeRating.CompareTo(b.ChallengeRating)); return Monsters; @@ -92,11 +92,11 @@ internal static List GetHeroes() Heroes.Sort((a, b) => { - var compareName = String.Compare(a.Name, b.Name, StringComparison.CurrentCultureIgnoreCase); + var compareName = string.Compare(a.Name, b.Name, StringComparison.CurrentCultureIgnoreCase); if (compareName == 0) { - compareName = String.Compare(a.SurName, b.SurName, StringComparison.CurrentCultureIgnoreCase); + compareName = string.Compare(a.SurName, b.SurName, StringComparison.CurrentCultureIgnoreCase); } return compareName; diff --git a/SolastaUnfinishedBusiness/Models/FeatsContext.cs b/SolastaUnfinishedBusiness/Models/FeatsContext.cs index 7c6833f7f4..914f39946c 100644 --- a/SolastaUnfinishedBusiness/Models/FeatsContext.cs +++ b/SolastaUnfinishedBusiness/Models/FeatsContext.cs @@ -91,7 +91,7 @@ internal static void LateLoad() foreach (var groupedFeat in GroupFeats.Groups .Select(groupDefinition => groupDefinition.GetFirstSubFeatureOfType())) { - groupedFeat?.Feats.Sort((a, b) => String.CompareOrdinal(a.FormatTitle(), b.FormatTitle())); + groupedFeat?.Feats.Sort((a, b) => string.CompareOrdinal(a.FormatTitle(), b.FormatTitle())); } // settings paring feats @@ -115,7 +115,7 @@ internal static void LateLoad() // avoids restart on level up UI GuiWrapperContext.RecacheFeats(); - + SwitchAsiAndFeat(); SwitchFirstLevelTotalFeats(); SwitchEveryFourLevelsFeats(); diff --git a/SolastaUnfinishedBusiness/Models/InventoryManagementContext.cs b/SolastaUnfinishedBusiness/Models/InventoryManagementContext.cs index 0d19b7def6..da2b8d90d7 100644 --- a/SolastaUnfinishedBusiness/Models/InventoryManagementContext.cs +++ b/SolastaUnfinishedBusiness/Models/InventoryManagementContext.cs @@ -187,7 +187,7 @@ internal static void Load() new() { text = TagsDefinitions.WeaponTagAmmunition }, new() { text = CeContentPackContext.CeTag } }); - taggedOptions.Sort((x, y) => String.Compare(x.text, y.text, StringComparison.Ordinal)); + taggedOptions.Sort((x, y) => string.Compare(x.text, y.text, StringComparison.Ordinal)); taggedOptions.Insert(0, new OptionDataAdvanced { text = Gui.Localize("UI/&InventoryFilterAnyTags") }); TaggedGuiDropdown.onValueChanged.AddListener(delegate { Refresh(containerPanel); }); diff --git a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs index 13c171006b..11d479e826 100644 --- a/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs +++ b/SolastaUnfinishedBusiness/Models/SaveByLocationContext.cs @@ -230,7 +230,6 @@ private static string GetTitle(LocationType locationType, string title) switch (locationType) { case LocationType.Default: - return title; case LocationType.StandardCampaign: return title; case LocationType.CustomCampaign: @@ -322,7 +321,7 @@ public int CompareTo(SavePlace other) var type = Type.CompareTo(other.Type); return type != 0 ? type - : String.Compare(Name, other.Name, StringComparison.Ordinal); + : string.Compare(Name, other.Name, StringComparison.Ordinal); } public static SavePlace Default() diff --git a/SolastaUnfinishedBusiness/Models/UpdateContext.cs b/SolastaUnfinishedBusiness/Models/UpdateContext.cs index 58234292a4..e762ae49dc 100644 --- a/SolastaUnfinishedBusiness/Models/UpdateContext.cs +++ b/SolastaUnfinishedBusiness/Models/UpdateContext.cs @@ -48,7 +48,7 @@ private static string GetInstalledVersion() private static string GetPreviousVersion() { var a1 = InstalledVersion.Split('.'); - var minor = Int32.Parse(a1[3]); + var minor = int.Parse(a1[3]); a1[3] = (--minor).ToString(); @@ -76,10 +76,10 @@ private static string GetLatestVersion(out bool shouldUpdate) var a1 = InstalledVersion.Split('.'); var a2 = version.Split('.'); - var v1 = a1[0] + a1[1] + a1[2] + Int32.Parse(a1[3]).ToString("D3"); - var v2 = a2[0] + a2[1] + a2[2] + Int32.Parse(a2[3]).ToString("D3"); + var v1 = a1[0] + a1[1] + a1[2] + int.Parse(a1[3]).ToString("D3"); + var v2 = a2[0] + a2[1] + a2[2] + int.Parse(a2[3]).ToString("D3"); - shouldUpdate = String.Compare(v2, v1, StringComparison.Ordinal) > 0; + shouldUpdate = string.Compare(v2, v1, StringComparison.Ordinal) > 0; } catch { diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs index d2e7a645c0..6bbecdd233 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs @@ -57,7 +57,7 @@ public static void Prefix([NotNull] CharacterStageFightingStyleSelectionPanel __ __instance.compatibleFightingStyles .Sort((a, b) => - String.Compare(a.FormatTitle(), b.FormatTitle(), StringComparison.CurrentCultureIgnoreCase)); + string.Compare(a.FormatTitle(), b.FormatTitle(), StringComparison.CurrentCultureIgnoreCase)); } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs index 32c9fe6c0f..8eb172a2c4 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs @@ -41,7 +41,7 @@ public static void Prefix([NotNull] CharacterStageSubclassSelectionPanel __insta __instance.compatibleSubclasses .Sort((a, b) => - String.Compare(a.FormatTitle(), b.FormatTitle(), StringComparison.CurrentCultureIgnoreCase)); + string.Compare(a.FormatTitle(), b.FormatTitle(), StringComparison.CurrentCultureIgnoreCase)); } } diff --git a/SolastaUnfinishedBusiness/Patches/FeatureElementEffectLinePatcher.cs b/SolastaUnfinishedBusiness/Patches/FeatureElementEffectLinePatcher.cs index f1ad9c0816..e337995156 100644 --- a/SolastaUnfinishedBusiness/Patches/FeatureElementEffectLinePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/FeatureElementEffectLinePatcher.cs @@ -1,5 +1,4 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; @@ -29,7 +28,7 @@ public static void Prefix([NotNull] FeatureElementEffectLine __instance) if (tooltip) { - tooltip.Content = String.Empty; + tooltip.Content = string.Empty; } } } diff --git a/SolastaUnfinishedBusiness/Patches/RecipesByTooltypeLinePatcher.cs b/SolastaUnfinishedBusiness/Patches/RecipesByTooltypeLinePatcher.cs index c0e36ec723..c9f50d0b1b 100644 --- a/SolastaUnfinishedBusiness/Patches/RecipesByTooltypeLinePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RecipesByTooltypeLinePatcher.cs @@ -20,7 +20,7 @@ public static void Prefix(List recipes) { //PATCH: sort the recipes by crafted item title recipes.Sort((a, b) => - String.Compare(a.CraftedItem.FormatTitle(), b.CraftedItem.FormatTitle(), + string.Compare(a.CraftedItem.FormatTitle(), b.CraftedItem.FormatTitle(), StringComparison.CurrentCultureIgnoreCase)); } } diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs index fb3a1de7a1..bec0e8dcc0 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterPatcher.cs @@ -2527,7 +2527,7 @@ public static class SpendSpellSlot_Patch public static bool Prefix(RulesetCharacter __instance, RulesetEffectSpell activeSpell) { FeatureDefinition preserveSlotThresholdFeature = null; - var preserveSlotThreshold = Int32.MaxValue; + var preserveSlotThreshold = int.MaxValue; var effectLevel = activeSpell.EffectLevel; @@ -2546,7 +2546,7 @@ public static bool Prefix(RulesetCharacter __instance, RulesetEffectSpell active var rolledValue = 0; - if (preserveSlotThreshold != Int32.MaxValue) + if (preserveSlotThreshold != int.MaxValue) { rolledValue = RollDie(DieType.D20, AdvantageType.None, out _, out _); } diff --git a/SolastaUnfinishedBusiness/Patches/UserCampaignEditorScreenPatcher.cs b/SolastaUnfinishedBusiness/Patches/UserCampaignEditorScreenPatcher.cs index 4ceba814ae..6c1fede8ba 100644 --- a/SolastaUnfinishedBusiness/Patches/UserCampaignEditorScreenPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/UserCampaignEditorScreenPatcher.cs @@ -23,23 +23,23 @@ public static void Prefix(UserCampaign campaign) } campaign.userLocations.Sort((a, b) => - String.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); + string.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); campaign.userDialogs.Sort((a, b) => - String.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); + string.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); campaign.userItems.Sort((a, b) => - String.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); + string.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); campaign.userMonsters.Sort((a, b) => - String.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); + string.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); campaign.userNpcs.Sort((a, b) => - String.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); + string.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); campaign.userQuests.Sort((a, b) => - String.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); + string.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); campaign.userVariables.Sort((a, b) => - String.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); + string.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); campaign.userLootPacks.Sort((a, b) => - String.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); + string.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); campaign.userMerchantInventories.Sort((a, b) => - String.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); + string.Compare(a.Title, b.Title, StringComparison.CurrentCultureIgnoreCase)); } } } From 22c9d5e1941e56b8e0dc2a923a3415485cab4d32 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 18:04:26 -0800 Subject: [PATCH 30/44] auto format and clean up --- .../Api/DatabaseHelper-RELEASE.cs | 51 +++---------------- .../RulesetCharacterHeroExtensions.cs | 2 +- .../Api/Helpers/EffectHelpers.cs | 5 +- .../Specific/AttackAfterMagicEffect.cs | 2 +- .../Models/ItemCraftingMerchantContext.cs | 24 ++++----- .../Models/PickPocketContext.cs | 11 ++-- .../Patches/RulesetCharacterHeroPatcher.cs | 1 - .../Patches/UnityModManagerUIPatcher.cs | 1 + .../Spells/SpellBuildersLevel01.cs | 1 - .../Subclasses/Builders/GambitsBuilders.cs | 2 +- .../Subclasses/RoguishOpportunist.cs | 6 ++- 11 files changed, 32 insertions(+), 74 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index dd3cfd08b0..913d4e48d6 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1446,21 +1446,12 @@ internal static FeatureDefinitionConditionAffinity ConditionAffinityWeatherChill internal static class FeatureDefinitionDamageAffinitys { - internal static FeatureDefinitionDamageAffinity DamageAffinityFireImmunityRemorhaz { get; } = - GetDefinition("DamageAffinityFireImmunityRemorhaz"); - - internal static FeatureDefinitionDamageAffinity DamageAffinityFireImmunityYoungRemorhaz { get; } = - GetDefinition("DamageAffinityFireImmunityYoungRemorhaz"); - internal static FeatureDefinitionDamageAffinity DamageAffinityPatronTreePiercingBranch { get; } = GetDefinition("DamageAffinityPatronTreePiercingBranch"); internal static FeatureDefinitionDamageAffinity DamageAffinityPatronTreePiercingBranchOneWithTheTree { get; } = GetDefinition("DamageAffinityPatronTreePiercingBranchOneWithTheTree"); - internal static FeatureDefinitionDamageAffinity DamageAffinityWightLord_NecroticImmunity { get; } = - GetDefinition("DamageAffinityWightLord_NecroticImmunity"); - internal static FeatureDefinitionDamageAffinity DamageAffinityConditionRagingBludgeoning { get; } = GetDefinition("DamageAffinityConditionRagingBludgeoning"); @@ -1710,6 +1701,9 @@ internal static class FeatureDefinitionMovementAffinitys internal static class FeatureDefinitionMoveModes { + internal static FeatureDefinitionMoveMode MoveModeFly2 { get; } = + GetDefinition("MoveModeFly2"); + internal static FeatureDefinitionMoveMode MoveModeFly4 { get; } = GetDefinition("MoveModeFly4"); @@ -1725,6 +1719,9 @@ internal static class FeatureDefinitionMoveModes internal static FeatureDefinitionMoveMode MoveModeMove2 { get; } = GetDefinition("MoveModeMove2"); + internal static FeatureDefinitionMoveMode MoveModeMove4 { get; } = + GetDefinition("MoveModeMove4"); + internal static FeatureDefinitionMoveMode MoveModeMove6 { get; } = GetDefinition("MoveModeMove6"); @@ -1824,33 +1821,6 @@ internal static class FeatureDefinitionPowers internal static FeatureDefinitionPower PowerBerserkerFrenzy { get; } = GetDefinition("PowerBerserkerFrenzy"); - internal static FeatureDefinitionPower PowerFunctionAntitoxin { get; } = - GetDefinition("PowerFunctionAntitoxin"); - - internal static FeatureDefinitionPower PowerFunctionPotionOfGreaterHealing { get; } = - GetDefinition("PowerFunctionPotionOfGreaterHealing"); - - internal static FeatureDefinitionPower PowerFunctionPotionOfGreaterHealingOther { get; } = - GetDefinition("PowerFunctionPotionOfGreaterHealingOther"); - - internal static FeatureDefinitionPower PowerFunctionPotionOfHealing { get; } = - GetDefinition("PowerFunctionPotionOfHealing"); - - internal static FeatureDefinitionPower PowerFunctionPotionOfHealingOther { get; } = - GetDefinition("PowerFunctionPotionOfHealingOther"); - - internal static FeatureDefinitionPower PowerFunctionPotionOfSuperiorHealing { get; } = - GetDefinition("PowerFunctionPotionOfSuperiorHealing"); - - internal static FeatureDefinitionPower PowerFunctionPotionOfSuperiorHealingOther { get; } = - GetDefinition("PowerFunctionPotionOfSuperiorHealingOther"); - - internal static FeatureDefinitionPower PowerFunctionPotionRemedy { get; } = - GetDefinition("PowerFunctionPotionRemedy"); - - internal static FeatureDefinitionPower PowerFunctionRemedyOther { get; } = - GetDefinition("PowerFunctionRemedyOther"); - internal static FeatureDefinitionPower PowerWindGuidingWinds { get; } = GetDefinition("PowerWindGuidingWinds"); @@ -3282,15 +3252,6 @@ internal static class ItemFlagDefinitions GetDefinition("ItemFlagPrimed"); } - internal static class LootPackDefinitions - { - internal static LootPackDefinition Pickpocket_generic_loot_LowMoney { get; } = - GetDefinition("Pickpocket_generic_loot_LowMoney"); - - internal static LootPackDefinition Pickpocket_generic_loot_MedMoney { get; } = - GetDefinition("Pickpocket_generic_loot_MedMoney"); - } - internal static class MerchantCategoryDefinitions { internal static MerchantCategoryDefinition All { get; } = GetDefinition("All"); diff --git a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs index 8a0dbd71b1..e069816902 100644 --- a/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs +++ b/SolastaUnfinishedBusiness/Api/GameExtensions/RulesetCharacterHeroExtensions.cs @@ -94,7 +94,7 @@ internal static bool IsWieldingTwoHandedWeapon([NotNull] this RulesetCharacterHe } #endif - internal static void GrantAcquiredSpellWithTagFromSubclassPool(this RulesetCharacterHero hero, string tag) + internal static void GrantAcquiredSpellWithTagFromSubclassPool(this RulesetCharacterHero hero, string tag) { var heroBuildingData = hero.GetHeroBuildingData(); var selectedClass = LevelUpHelper.GetSelectedClass(hero); diff --git a/SolastaUnfinishedBusiness/Api/Helpers/EffectHelpers.cs b/SolastaUnfinishedBusiness/Api/Helpers/EffectHelpers.cs index 653e26f2bd..3879034b6c 100644 --- a/SolastaUnfinishedBusiness/Api/Helpers/EffectHelpers.cs +++ b/SolastaUnfinishedBusiness/Api/Helpers/EffectHelpers.cs @@ -106,14 +106,11 @@ internal static int CalculateSaveDc(RulesetCharacter character, EffectDescriptio return effectDescription.FixedSavingThrowDifficultyClass; //TODO: implement missing computation methods (like Ki and Breath Weapon) case RuleDefinitions.EffectDifficultyClassComputation.Ki: - break; case RuleDefinitions.EffectDifficultyClassComputation.BreathWeapon: - break; case RuleDefinitions.EffectDifficultyClassComputation.CustomAbilityModifierAndProficiency: - break; - // ReSharper disable once RedundantEmptySwitchSection default: break; + // ReSharper disable once RedundantEmptySwitchSection } return def; diff --git a/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs b/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs index 4f78f34ed7..b7dcc338da 100644 --- a/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs +++ b/SolastaUnfinishedBusiness/Behaviors/Specific/AttackAfterMagicEffect.cs @@ -9,10 +9,10 @@ namespace SolastaUnfinishedBusiness.Behaviors.Specific; internal sealed class AttackAfterMagicEffect : IFilterTargetingCharacter { - internal static readonly AttackAfterMagicEffect Marker = new(); internal const string AttackAfterMagicEffectTag = "AttackAfterMagicEffectTag"; private const RollOutcome MinOutcomeToAttack = RollOutcome.Success; private const RollOutcome MinSaveOutcomeToAttack = RollOutcome.Failure; + internal static readonly AttackAfterMagicEffect Marker = new(); public bool EnforceFullSelection => false; diff --git a/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs b/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs index c81b167dbe..8e24a43538 100644 --- a/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs +++ b/SolastaUnfinishedBusiness/Models/ItemCraftingMerchantContext.cs @@ -280,15 +280,14 @@ internal static void SwitchRestockTowerOfKnowledge() } internal static void SwitchVersatileInventorySlots() - { - foreach (var item in DatabaseRepository.GetDatabase() - .Where(a => a.UsableDeviceDescription != null && - a.UsableDeviceDescription.UsableDeviceTags != null && - (a.UsableDeviceDescription.UsableDeviceTags.Contains("Potion") || - a.UsableDeviceDescription.UsableDeviceTags.Contains("Scroll")))) - { - if (Main.Settings.EnableVersatileAmmunitionSlots && Main.Settings.EnableVersatileOffHandSlot) - { + { + foreach (var item in DatabaseRepository.GetDatabase() + .Where(a => a.UsableDeviceDescription is { UsableDeviceTags: not null } && + (a.UsableDeviceDescription.UsableDeviceTags.Contains("Potion") || + a.UsableDeviceDescription.UsableDeviceTags.Contains("Scroll")))) + { + if (Main.Settings.EnableVersatileAmmunitionSlots && Main.Settings.EnableVersatileOffHandSlot) + { item.SlotTypes.SetRange("UtilitySlot", "ContainerSlot", "AmmunitionSlot", @@ -296,9 +295,9 @@ internal static void SwitchVersatileInventorySlots() item.SlotsWhereActive.SetRange("UtilitySlot", "AmmunitionSlot", "OffHandSlot"); - } + } - if (Main.Settings.EnableVersatileAmmunitionSlots && !Main.Settings.EnableVersatileOffHandSlot) + if (Main.Settings.EnableVersatileAmmunitionSlots && !Main.Settings.EnableVersatileOffHandSlot) { item.SlotTypes.SetRange("UtilitySlot", "ContainerSlot", @@ -306,7 +305,7 @@ internal static void SwitchVersatileInventorySlots() item.SlotsWhereActive.SetRange("UtilitySlot", "AmmunitionSlot"); } - + if (!Main.Settings.EnableVersatileAmmunitionSlots && Main.Settings.EnableVersatileOffHandSlot) { item.SlotTypes.SetRange("UtilitySlot", @@ -316,6 +315,7 @@ internal static void SwitchVersatileInventorySlots() "OffHandSlot"); } + // ReSharper disable once InvertIf if (!Main.Settings.EnableVersatileAmmunitionSlots && !Main.Settings.EnableVersatileOffHandSlot) { item.SlotTypes.SetRange("UtilitySlot", diff --git a/SolastaUnfinishedBusiness/Models/PickPocketContext.cs b/SolastaUnfinishedBusiness/Models/PickPocketContext.cs index abc8abd46c..6eac8a36aa 100644 --- a/SolastaUnfinishedBusiness/Models/PickPocketContext.cs +++ b/SolastaUnfinishedBusiness/Models/PickPocketContext.cs @@ -2,7 +2,6 @@ using SolastaUnfinishedBusiness.Builders; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.ItemDefinitions; -using static SolastaUnfinishedBusiness.Api.DatabaseHelper.LootPackDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.TreasureTableDefinitions; namespace SolastaUnfinishedBusiness.Models; @@ -141,9 +140,9 @@ internal static void Load() .AddTreasureOptions(new List { - RandomTreasureTableE_Ingredients.TreasureOptions[3], - RandomTreasureTableE_Ingredients.TreasureOptions[9], - RandomTreasureTableE_Ingredients.TreasureOptions[16] + RandomTreasureTableE_Ingredients.TreasureOptions[3], + RandomTreasureTableE_Ingredients.TreasureOptions[9], + RandomTreasureTableE_Ingredients.TreasureOptions[16] }) .AddToDB(), diceNumber = 1, @@ -184,12 +183,12 @@ internal static void Load() } if (monster.ChallengeRating > 4.9 && - monster.ChallengeRating <7.0) + monster.ChallengeRating < 7.0) { monster.stealableLootDefinition = pickPocketableLootD; } - if (monster.ChallengeRating >6.9) + if (monster.ChallengeRating > 6.9) { monster.stealableLootDefinition = pickPocketableLootE; } diff --git a/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs b/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs index 6cb16be188..4767adc86a 100644 --- a/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RulesetCharacterHeroPatcher.cs @@ -17,7 +17,6 @@ using SolastaUnfinishedBusiness.Models; using SolastaUnfinishedBusiness.Subclasses; using SolastaUnfinishedBusiness.Validators; -using UnityEngine; using static RuleDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.CharacterClassDefinitions; using static SolastaUnfinishedBusiness.Api.DatabaseHelper.FeatureDefinitionAbilityCheckAffinitys; diff --git a/SolastaUnfinishedBusiness/Patches/UnityModManagerUIPatcher.cs b/SolastaUnfinishedBusiness/Patches/UnityModManagerUIPatcher.cs index eb87ee3591..f7fa9bd3dd 100644 --- a/SolastaUnfinishedBusiness/Patches/UnityModManagerUIPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/UnityModManagerUIPatcher.cs @@ -16,6 +16,7 @@ public static class ToggleWindow_Patch { //PATCH: prevents game from receiving input if Mod UI is open [UsedImplicitly] + // ReSharper disable once AsyncVoidMethod public static async void Postfix(bool open) { await ModManagerUI.Set(open); diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs index 4804b60f17..94cbed3c83 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel01.cs @@ -2992,7 +2992,6 @@ public IEnumerator OnActionFinishedByMe(CharacterAction action) { case CharacterActionUsePower when action.ActionParams.RulesetEffect.SourceDefinition == powerWitchBolt: - yield break; case CharacterActionSpendPower actionSpendPower when actionSpendPower.activePower.PowerDefinition.ActivationTime is ActivationTime.OnSpellNoCantripDamageAuto diff --git a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs index 4fc5d1d8ae..394d699352 100644 --- a/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs +++ b/SolastaUnfinishedBusiness/Subclasses/Builders/GambitsBuilders.cs @@ -1280,7 +1280,7 @@ public void OnAttackComputeModifier( string effectName, ref ActionModifier attackModifier) { - if (attackProximity + if (attackProximity is BattleDefinitions.AttackProximity.PhysicalReach or BattleDefinitions.AttackProximity.PhysicalRange) { attackModifier.AttackAdvantageTrends.Add(_trendInfo); diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs index 671525eaa2..90e1620e35 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishOpportunist.cs @@ -349,7 +349,8 @@ public IEnumerator OnMagicEffectFinishedByMeOrAlly( // ReSharper disable once ForeachCanBePartlyConvertedToQueryUsingAnotherGetEnumerator foreach (var target in targets) { - if (target.RulesetActor.TryGetConditionOfCategoryAndType(TagEffect, conditionSeizeTheChance.Name, out var activeCondition)) + if (target.RulesetActor.TryGetConditionOfCategoryAndType(TagEffect, conditionSeizeTheChance.Name, + out var activeCondition)) { yield return HandleReaction(battleManager, attacker, target, helper, activeCondition); } @@ -366,7 +367,8 @@ public IEnumerator OnPhysicalAttackFinishedByMeOrAlly( RollOutcome rollOutcome, int damageAmount) { - if (defender.RulesetActor.TryGetConditionOfCategoryAndType(TagEffect, conditionSeizeTheChance.Name, out var activeCondition)) + if (defender.RulesetActor.TryGetConditionOfCategoryAndType(TagEffect, conditionSeizeTheChance.Name, + out var activeCondition)) { yield return HandleReaction(battleManager, attacker, defender, helper, activeCondition); } From 66c4cc97a138b27ed513dee795c150e788449cc6 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 18:06:05 -0800 Subject: [PATCH 31/44] add 'Enable Arcane Sword, Circle of Death, Flame Strike, Ice Storm, and Vicious Mockery 5e 2024 spells version' --- .../ChangelogHistory.txt | 1 + .../Displays/GeneralDisplay.cs | 9 +++- .../Displays/SpellsDisplay.cs | 9 +++- .../Models/Tabletop2024Context.cs | 51 +++++++++++++++---- .../Properties/Settings.settings | 6 +-- SolastaUnfinishedBusiness/Settings.cs | 1 + SolastaUnfinishedBusiness/Settings/empty.xml | 1 + .../Settings/zappastuff.xml | 5 +- .../Translations/de/Settings-de.txt | 3 +- .../Translations/en/Settings-en.txt | 3 +- .../Translations/es/Settings-es.txt | 3 +- .../Translations/fr/Settings-fr.txt | 3 +- .../Translations/it/Settings-it.txt | 3 +- .../Translations/ja/Settings-ja.txt | 3 +- .../Translations/ko/Settings-ko.txt | 3 +- .../Translations/pt-BR/Settings-pt-BR.txt | 3 +- .../Translations/ru/Settings-ru.txt | 3 +- .../Translations/zh-CN/Settings-zh-CN.txt | 3 +- 18 files changed, 88 insertions(+), 25 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 955294f470..9d8da5e2ef 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -2,6 +2,7 @@ - added 'Allow Potions and Scrolls to be carried and used in the ammunition slots' setting [by SilverGriffon] - added 'Allow Potions and Scrolls to be carried and used in the off-hand weapon slot' setting [by SilverGriffon] +- added 'Enable Arcane Sword, Circle of Death, Flame Strike, Ice Storm, and Vicious Mockery 5e 2024 spells version' - added 'Enable True Strike 5e 2024 cantrip version' - fixed 'Enable all Casters to use new prepared spells tables' not considering bonuses - fixed 'Enable bonus action on Healing Potions and Antitoxin usages' bleeding into scrolls diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 22d17a7150..63a86b98d5 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -619,11 +619,18 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchOneDndSpellBarkskin(); } + toggle = Main.Settings.EnableOneDndDamagingSpellsUpgrade; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndDamagingSpellsUpgrade"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndDamagingSpellsUpgrade = toggle; + Tabletop2024Context.SwitchOneDndDamagingSpellsUpgrade(); + } + toggle = Main.Settings.EnableOneDndHealingSpellsUpgrade; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsUpgrade"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndHealingSpellsUpgrade = toggle; - Tabletop2024Context.SwitchOneDndHealingSpellsBuf(); + Tabletop2024Context.SwitchOneDndHealingSpellsUpgrade(); } toggle = Main.Settings.EnableOneDndGuidanceSpell; diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index 77b32943e0..e485d5b602 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -158,11 +158,18 @@ private static void DisplaySpellsGeneral() Tabletop2024Context.SwitchOneDndSpellBarkskin(); } + toggle = Main.Settings.EnableOneDndDamagingSpellsUpgrade; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndDamagingSpellsUpgrade"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndDamagingSpellsUpgrade = toggle; + Tabletop2024Context.SwitchOneDndDamagingSpellsUpgrade(); + } + toggle = Main.Settings.EnableOneDndHealingSpellsUpgrade; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndHealingSpellsUpgrade"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndHealingSpellsUpgrade = toggle; - Tabletop2024Context.SwitchOneDndHealingSpellsBuf(); + Tabletop2024Context.SwitchOneDndHealingSpellsUpgrade(); } toggle = Main.Settings.EnableOneDndGuidanceSpell; diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index cb71dda705..7a81ba003e 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -306,7 +306,8 @@ internal static void LateLoad() SwitchOneDndEnableBardWordsOfCreationAtLevel20(); SwitchOneDnDEnableDruidUseMetalArmor(); SwitchOneDndHealingPotionBonusAction(); - SwitchOneDndHealingSpellsBuf(); + SwitchOneDndDamagingSpellsUpgrade(); + SwitchOneDndHealingSpellsUpgrade(); SwitchOneDndMonkUnarmedDieTypeProgression(); SwitchOneDndPaladinLayOnHandAsBonusAction(); SwitchOneDndPaladinLearnSpellCastingAtOne(); @@ -961,23 +962,55 @@ private static void LoadOneDndTrueStrike() .Build(); } - internal static void SwitchOneDndHealingSpellsBuf() + internal static void SwitchOneDndHealingSpellsUpgrade() { var dice = Main.Settings.EnableOneDndHealingSpellsUpgrade ? 2 : 1; // Cure Wounds, Healing Word got buf on base damage and add dice - CureWounds.effectDescription.EffectForms[0].healingForm.diceNumber = dice; - CureWounds.effectDescription.effectAdvancement.additionalDicePerIncrement = dice; - FalseLife.effectDescription.EffectForms[0].temporaryHitPointsForm.diceNumber = dice; - HealingWord.effectDescription.EffectForms[0].healingForm.diceNumber = dice; - HealingWord.effectDescription.effectAdvancement.additionalDicePerIncrement = dice; + CureWounds.EffectDescription.EffectForms[0].healingForm.diceNumber = dice; + CureWounds.EffectDescription.effectAdvancement.additionalDicePerIncrement = dice; + FalseLife.EffectDescription.EffectForms[0].temporaryHitPointsForm.diceNumber = dice; + HealingWord.EffectDescription.EffectForms[0].healingForm.diceNumber = dice; + HealingWord.EffectDescription.effectAdvancement.additionalDicePerIncrement = dice; // Mass Cure Wounds and Mass Healing Word only got buf on base damage - MassHealingWord.effectDescription.EffectForms[0].healingForm.diceNumber = dice; + MassHealingWord.EffectDescription.EffectForms[0].healingForm.diceNumber = dice; dice = Main.Settings.EnableOneDndHealingSpellsUpgrade ? 5 : 3; - MassCureWounds.effectDescription.EffectForms[0].healingForm.diceNumber = dice; + MassCureWounds.EffectDescription.EffectForms[0].healingForm.diceNumber = dice; + } + + internal static void SwitchOneDndDamagingSpellsUpgrade() + { + EffectProxyDefinitions.ProxyArcaneSword.AdditionalFeatures.Clear(); + + if (Main.Settings.EnableOneDndDamagingSpellsUpgrade) + { + EffectProxyDefinitions.ProxyArcaneSword.damageDie = DieType.D12; + EffectProxyDefinitions.ProxyArcaneSword.damageDieNum = 4; + EffectProxyDefinitions.ProxyArcaneSword.AdditionalFeatures.AddRange( + FeatureDefinitionMoveModes.MoveModeFly2, + FeatureDefinitionMoveModes.MoveModeMove4); + CircleOfDeath.EffectDescription.EffectForms[0].DamageForm.dieType = DieType.D8; + FlameStrike.EffectDescription.EffectForms[0].DamageForm.diceNumber = 5; + FlameStrike.EffectDescription.EffectForms[1].DamageForm.diceNumber = 5; + IceStorm.EffectDescription.EffectForms[0].DamageForm.dieType = DieType.D10; + ViciousMockery.EffectDescription.EffectForms[0].DamageForm.dieType = DieType.D6; + } + else + { + EffectProxyDefinitions.ProxyArcaneSword.damageDie = DieType.D10; + EffectProxyDefinitions.ProxyArcaneSword.damageDieNum = 3; + EffectProxyDefinitions.ProxyArcaneSword.AdditionalFeatures.AddRange( + FeatureDefinitionMoveModes.MoveModeFly2, + FeatureDefinitionMoveModes.MoveModeMove2); + CircleOfDeath.EffectDescription.EffectForms[0].DamageForm.dieType = DieType.D6; + FlameStrike.EffectDescription.EffectForms[0].DamageForm.diceNumber = 4; + FlameStrike.EffectDescription.EffectForms[1].DamageForm.diceNumber = 4; + IceStorm.EffectDescription.EffectForms[0].DamageForm.dieType = DieType.D8; + ViciousMockery.EffectDescription.EffectForms[0].DamageForm.dieType = DieType.D4; + } } internal static void SwitchOneDndWizardScholar() diff --git a/SolastaUnfinishedBusiness/Properties/Settings.settings b/SolastaUnfinishedBusiness/Properties/Settings.settings index 049245f401..c63a43b312 100644 --- a/SolastaUnfinishedBusiness/Properties/Settings.settings +++ b/SolastaUnfinishedBusiness/Properties/Settings.settings @@ -1,6 +1,6 @@  - - - + + + diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 8b4be49308..014bd8071c 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -381,6 +381,7 @@ public class Settings : UnityModManager.ModSettings public bool FixEldritchBlastRange { get; set; } public bool ModifyGravitySlam { get; set; } public bool EnableOneDndBarkskinSpell { get; set; } + public bool EnableOneDndDamagingSpellsUpgrade { get; set; } public bool EnableOneDndHealingSpellsUpgrade { get; set; } public bool EnableOneDndGuidanceSpell { get; set; } public bool EnableOneDndTrueStrikeCantrip { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index f206515811..2e22c88aad 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -656,6 +656,7 @@ false false false + false false false false diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index 56c623b6a0..f452666fde 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -527,6 +527,8 @@ true true true + false + false 50 true true @@ -919,8 +921,10 @@ true true true + true true true + true true true false @@ -1084,7 +1088,6 @@ - AcidClaws CreateBonfire AirBlast Infestation diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index a6fcb72443..58de007c87 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -148,8 +148,9 @@ ModUi/&EnableMonkWeaponSpecialization=Aktiviere Waffenspezialisie ModUi/&EnableMulticlass=Aktivieren Sie Multiclass [Neustart erforderlich] ModUi/&EnableOneDnDPreparedSpellsTables=Ermöglichen Sie allen Zauberern die Verwendung neuer vorbereiteter Zaubertabellen [Barde, Kleriker, Druide, Paladin, Waldläufer, Zauberer, Magier] ModUi/&EnableOneDndBarkskinSpell=Aktiviere Barkskin 5e 2024 Zauberversion [Bonusaktion, keine Konzentration, AC auf 17 gesetzt] +ModUi/&EnableOneDndDamagingSpellsUpgrade=Aktiviere Arkanes Schwert, Kreis des Todes, Flammenschlag, Eissturm und Bösartige Verhöhnung 5e 2024 Zauberversion [besserer Schaden] ModUi/&EnableOneDndGuidanceSpell=Aktivieren Sie die Zauberversion Anleitung 5e 2024 [Wählen Sie beim Zaubern eine Fertigkeit aus und erhalten Sie bis zu 1 Minute lang einen Bonus.] -ModUi/&EnableOneDndHealingSpellsUpgrade=Aktiviere Wunden heilen, Falsches Leben, Heilendes Wort, Massenheilung von Wunden und Massenheilendes Wort 5e 2024 Zauberversion +ModUi/&EnableOneDndHealingSpellsUpgrade=Aktiviere Wunden heilen, Falsches Leben, Heilendes Wort, Massenheilung von Wunden und Massenheilungswort 5e 2024 Zauberversion [bessere Heilung] ModUi/&EnableOneDndTrueStrikeCantrip=Aktiviere True Strike 5e 2024 Cantrip-Version [Neustart erforderlich]\n[Angriff nutzt deine Zauberfähigkeit für den Angriffswurf und Schadensbonus sowie zusätzlichen Strahlungsschaden ab Level 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Aktiviere Handauflegen als Bonusaktion ModUi/&EnablePaladinSmiteAsBonusAction=Aktiviere Smite als Bonusaktion diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 4e5ad969e0..470f3cb975 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -148,8 +148,9 @@ ModUi/&EnableMonkWeaponSpecialization=Enable Weapon Specializatio ModUi/&EnableMulticlass=Enable multiclass [Requires Restart] ModUi/&EnableOneDnDPreparedSpellsTables=Enable all Casters to use new prepared spells tables [Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard] ModUi/&EnableOneDndBarkskinSpell=Enable Barkskin 5e 2024 spell version [bonus action, no concentration, AC set to 17] +ModUi/&EnableOneDndDamagingSpellsUpgrade=Enable Arcane Sword, Circle of Death, Flame Strike, Ice Storm, and Vicious Mockery 5e 2024 spells version [better damage] ModUi/&EnableOneDndGuidanceSpell=Enable Guidance 5e 2024 spell version [Choose one skill at casting and get bonus for up to 1 minute] -ModUi/&EnableOneDndHealingSpellsUpgrade=Enable Cure Wounds, False Life, Healing Word, Mass Cure Wounds, and Mass Healing Word 5e 2024 spells version +ModUi/&EnableOneDndHealingSpellsUpgrade=Enable Cure Wounds, False Life, Healing Word, Mass Cure Wounds, and Mass Healing Word 5e 2024 spells version [better healing] ModUi/&EnableOneDndTrueStrikeCantrip=Enable True Strike 5e 2024 cantrip version [Requires Restart]\n[attack uses your spellcasting ability for the attack roll and damage bonus, and additional radiant damage from level 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Enable Lay on Hands as bonus action ModUi/&EnablePaladinSmiteAsBonusAction=Enable Smite as bonus action diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 57f11e141e..0c39a1e81e 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -148,8 +148,9 @@ ModUi/&EnableMonkWeaponSpecialization=Habilita la Especializació ModUi/&EnableMulticlass=Habilitar multiclase [Requiere reinicio] ModUi/&EnableOneDnDPreparedSpellsTables=Permitir que todos los lanzadores de conjuros utilicen las nuevas tablas de conjuros preparadas [Bardo, Clérigo, Druida, Paladín, Explorador, Hechicero, Mago] ModUi/&EnableOneDndBarkskinSpell=Habilitar la versión del hechizo Corteza 5e 2024 [acción adicional, sin concentración, CA establecida en 17] +ModUi/&EnableOneDndDamagingSpellsUpgrade=Habilita los hechizos Espada arcana, Círculo de la muerte, Golpe de llamas, Tormenta de hielo y Burla cruel de la versión 5e 2024. [mejor daño] ModUi/&EnableOneDndGuidanceSpell=Habilitar Orientación versión del hechizo 5e 2024 [Elige una habilidad al lanzar y obtén una bonificación por hasta 1 minuto.] -ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar heridas, Falsa vida, Palabra de sanación, Curar heridas en masa y Palabra de sanación en masa versión 5e 2024 +ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar heridas, Vida falsa, Palabra de sanación, Curar heridas en masa y Palabra de sanación en masa versión 5e 2024 hechizos [mejor sanación] ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar Golpe verdadero versión 5e 2024 del truco [Requiere reinicio]\n[el ataque usa tu capacidad de lanzamiento de conjuros para la tirada de ataque y la bonificación de daño, y daño radiante adicional a partir del nivel 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Imposición de manos como acción adicional ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Castigar como acción adicional diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index e2bc8d1d52..298a8fce13 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -148,8 +148,9 @@ ModUi/&EnableMonkWeaponSpecialization=Activez la spécialisation ModUi/&EnableMulticlass=Activer multiclasse [Nécessite un redémarrage] ModUi/&EnableOneDnDPreparedSpellsTables=Permettre à tous les lanceurs de sorts d'utiliser les nouvelles tables de sorts préparés [Barde, Clerc, Druide, Paladin, Rôdeur, Sorcier, Magicien] ModUi/&EnableOneDndBarkskinSpell=Activer Écorce 5e 2024 version du sort [action bonus, pas de concentration, CA fixée à 17] +ModUi/&EnableOneDndDamagingSpellsUpgrade=Activer les sorts Épée arcanique, Cercle de la mort, Frappe de flammes, Tempête de glace et Moquerie vicieuse version 5e 2024 [meilleurs dégâts] ModUi/&EnableOneDndGuidanceSpell=Activer Guidage 5e version du sort 2024 [Choisissez une compétence au lancement et obtenez un bonus jusqu'à 1 minute.] -ModUi/&EnableOneDndHealingSpellsUpgrade=Activer les sorts Soin des blessures, Fausse vie, Mot de guérison, Soin de masse des blessures et Mot de guérison de masse version 5e 2024 +ModUi/&EnableOneDndHealingSpellsUpgrade=Activer les sorts Soin des blessures, Fausse vie, Mot de guérison, Soin de masse des blessures et Mot de guérison de masse 5e 2024 version [meilleure guérison] ModUi/&EnableOneDndTrueStrikeCantrip=Activer True Strike 5e 2024 version du tour de passe-passe [Nécessite un redémarrage]\n[L'attaque utilise votre capacité de lancement de sorts pour le jet d'attaque et le bonus de dégâts, ainsi que des dégâts radiants supplémentaires à partir du niveau 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Activer Imposition des mains comme action bonus ModUi/&EnablePaladinSmiteAsBonusAction=Activer Smite comme action bonus diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 052ab62ae0..fe79b6dfd0 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -148,8 +148,9 @@ ModUi/&EnableMonkWeaponSpecialization=Abilita Specializzazione ne ModUi/&EnableMulticlass=Abilita multiclasse [Richiede riavvio] ModUi/&EnableOneDnDPreparedSpellsTables=Abilita tutti i incantatori a usare le nuove tabelle degli incantesimi preparati [Bardo, Chierico, Druido, Paladino, Ranger, Stregone, Mago] ModUi/&EnableOneDndBarkskinSpell=Abilita la versione dell'incantesimo Barkskin 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] +ModUi/&EnableOneDndDamagingSpellsUpgrade=Abilita Spada Arcana, Cerchio della Morte, Colpo di Fiamma, Tempesta di Ghiaccio e Scherno Vizioso versione incantesimi 5e 2024 [danni migliori] ModUi/&EnableOneDndGuidanceSpell=Abilita la versione dell'incantesimo Guida 5e 2024 [Scegli un'abilità al momento del lancio e ottieni un bonus fino a 1 minuto.] -ModUi/&EnableOneDndHealingSpellsUpgrade=Abilita Cura Ferite, Falsa Vita, Parola Guaritrice, Cura Ferite di Massa e Parola Guaritrice di Massa versione incantesimi 5e 2024 +ModUi/&EnableOneDndHealingSpellsUpgrade=Abilita Cura Ferite, Falsa Vita, Parola Guaritrice, Cura Ferite di Massa e Parola Guaritrice di Massa versione incantesimi 5e 2024 [migliore guarigione] ModUi/&EnableOneDndTrueStrikeCantrip=Abilita True Strike versione trucchetto 5e 2024 [Richiede riavvio]\n[l'attacco usa la tua capacità di lanciare incantesimi per il tiro di attacco e il bonus al danno, e danni radianti aggiuntivi dal livello 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Abilita Imposizione delle mani come azione bonus ModUi/&EnablePaladinSmiteAsBonusAction=Abilita Colpisci come azione bonus diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 50ae215a07..c6e7f28c40 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -148,8 +148,9 @@ ModUi/&EnableMonkWeaponSpecialization=レベル 2 と 11 で 武 ModUi/&EnableMulticlass=マルチクラスを有効にする [再起動が必要] ModUi/&EnableOneDnDPreparedSpellsTables=すべての キャスター が新しい準備済み呪文テーブル [吟遊詩人、聖職者、ドルイド、パラディン、レンジャー、ソーサラー、ウィザード] を使用できるようにします。 ModUi/&EnableOneDndBarkskinSpell=樹皮の皮 5e 2024 呪文バージョンを有効にする [ボーナスアクション、集中力なし、AC を 17 に設定] +ModUi/&EnableOneDndDamagingSpellsUpgrade=Arcane Sword、Circle of Death、Flame Strike、Ice Storm、Vicious Mockery 5e 2024 呪文バージョン [ダメージ増加] を有効にします ModUi/&EnableOneDndGuidanceSpell=ガイダンス 5e 2024 呪文バージョンを有効にします [発動時にスキルを 1 つ選択し、最大 1 分間ボーナスを獲得します。] -ModUi/&EnableOneDndHealingSpellsUpgrade=治癒術、偽りの生命、治癒の言葉、大量治癒術、大量治癒の言葉 5e 2024 呪文バージョンを有効にする +ModUi/&EnableOneDndHealingSpellsUpgrade=Cure Wounds、False Life、Healing Word、Mass Cure Wounds、Mass Healing Word 5e 2024 呪文バージョン [better healing] を有効にします ModUi/&EnableOneDndTrueStrikeCantrip=トゥルーストライク 5e 2024 キャントリップ バージョンを有効にします [再起動が必要]{99>[攻撃は、攻撃ロールとダメージ ボーナスに呪文発動能力を使用し、レベル 5 から追加の光ダメージを与えます] ModUi/&EnablePaladinLayOnHandsAsBonusAction=ボーナスアクションとして手を置くを有効にする ModUi/&EnablePaladinSmiteAsBonusAction=ボーナスアクションとしてスマイトを有効にする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index dacfc17939..49df08f8b8 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -148,8 +148,9 @@ ModUi/&EnableMonkWeaponSpecialization=레벨 2와 11에서 무기 ModUi/&EnableMulticlass=다중클래스 활성화 [재시작 필요] ModUi/&EnableOneDnDPreparedSpellsTables=모든 주문자가 새로 준비된 주문표 [바드, 성직자, 드루이드, 성기사, 레인저, 마법사, 마법사]를 사용할 수 있도록 합니다. ModUi/&EnableOneDndBarkskinSpell=Barkskin 5e 2024 주문 버전 활성화 [보너스 액션, 집중 없음, AC 17로 설정] +ModUi/&EnableOneDndDamagingSpellsUpgrade=비전의 검, 죽음의 원, 불꽃 일격, 얼음 폭풍, 사악한 조롱 5e 2024 주문 버전 [더 높은 데미지]을 활성화합니다. ModUi/&EnableOneDndGuidanceSpell=지침 5e 2024 주문 버전을 활성화합니다. [시전 시 스킬 하나를 선택하고 최대 1분 동안 보너스를 받습니다.] -ModUi/&EnableOneDndHealingSpellsUpgrade=상처 치료, 거짓 생명, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀 5e 2024 주문 버전을 활성화합니다. +ModUi/&EnableOneDndHealingSpellsUpgrade=상처 치료, 거짓 생명, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀 5e 2024 주문 버전 [치유력 향상]을 활성화합니다. ModUi/&EnableOneDndTrueStrikeCantrip=True Strike 5e 2024 캔트립 버전 사용 [재시작 필요]\n[공격 시 공격 굴림과 피해 보너스에 주문 시전 능력을 사용하고, 레벨 5부터 추가 방사형 피해] ModUi/&EnablePaladinLayOnHandsAsBonusAction=안수를 보너스 액션으로 활성화합니다. ModUi/&EnablePaladinSmiteAsBonusAction=Smite를 보너스 액션으로 활성화합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 8220b936a1..670cd393b7 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -148,8 +148,9 @@ ModUi/&EnableMonkWeaponSpecialization=Habilite Especialização e ModUi/&EnableMulticlass=Habilitar multiclasse [Requer reinicialização] ModUi/&EnableOneDnDPreparedSpellsTables=Permitir que todos os Conjuradores usem novas tabelas de magias preparadas [Bardo, Clérigo, Druida, Paladino, Patrulheiro, Feiticeiro, Mago] ModUi/&EnableOneDndBarkskinSpell=Habilitar Barkskin versão de magia 5e 2024 [ação bônus, sem concentração, CA definida como 17] +ModUi/&EnableOneDndDamagingSpellsUpgrade=Habilitar Arcane Sword, Circle of Death, Flame Strike, Ice Storm e Vicious Mockery versão 5e 2024 dos feitiços [melhor dano] ModUi/&EnableOneDndGuidanceSpell=Habilitar Orientação versão de magia 5e 2024 [Escolha uma habilidade na conjuração e ganhe bônus por até 1 minuto.] -ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar Ferimentos, Vida Falsa, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa versão de feitiços 5e 2024 +ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar Ferimentos, Vida Falsa, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa versão de feitiços 5e 2024 [melhor cura] ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar True Strike versão 5e 2024 do truque [Requer reinicialização]\n[o ataque usa sua habilidade de conjuração para a jogada de ataque e bônus de dano, além de dano radiante adicional do nível 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Impor as Mãos como ação bônus ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Smite como ação bônus diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 0072161ecd..f26798191d 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -148,8 +148,9 @@ ModUi/&EnableMonkWeaponSpecialization=Включить Специ ModUi/&EnableMulticlass=Включить мультиклассирование [Необходим перезапуск] ModUi/&EnableOneDnDPreparedSpellsTables=Включить всем Заклинателям использовать новые таблицы подготовленных заклинаний [Бард, Жрец, Друид, Паладин, Следопыт, Чародей, Волшебник] ModUi/&EnableOneDndBarkskinSpell=Включить версию заклинания Дубовая кора из 5e 2024 [бонусное действие, не требует концентрации, КД на 17] +ModUi/&EnableOneDndDamagingSpellsUpgrade=Включить заклинания Arcane Sword, Circle of Death, Flame Strike, Ice Storm и Vicious Mockery 5e 2024 версии [лучший урон] ModUi/&EnableOneDndGuidanceSpell=Включить версию заклинания Указание из 5e 2024 [Выберите один навык при наложении и получите бонус на срок до 1 минуты.] -ModUi/&EnableOneDndHealingSpellsUpgrade=Включить версии заклинаний Лечение ран, Псевдожизнь, Лечащее слово, Множественное лечение ран и Множественное лечащее слово из 5e 2024 +ModUi/&EnableOneDndHealingSpellsUpgrade=Включить Исцеление ран, Ложная жизнь, Слово исцеления, Массовое исцеление ран и Слово массового исцеления 5e 2024 заклинания версии [лучшее исцеление] ModUi/&EnableOneDndTrueStrikeCantrip=Включить версию колдовства True Strike 5e 2024 [Требуется перезапуск]\n[атака использует вашу способность к заклинаниям для броска атаки и бонуса к урону, а также дополнительный урон от излучения с 5-го уровня] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Включить Наложение рук бонусным действием ModUi/&EnablePaladinSmiteAsBonusAction=Включить Кару бонусным действием diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 3eae4a457f..f398528762 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -148,8 +148,9 @@ ModUi/&EnableMonkWeaponSpecialization=在 2 级和 11 级时启用多类 [需要重启] ModUi/&EnableOneDnDPreparedSpellsTables=允许所有施法者使用新的准备好的法术表[吟游诗人、牧师、德鲁伊、圣骑士、游侠、术士、魔法师] ModUi/&EnableOneDndBarkskinSpell=启用 Barkskin 5e 2024 法术版本 [奖励行动,无专注,AC 设置为 17] +ModUi/&EnableOneDndDamagingSpellsUpgrade=启用奥术之剑、死亡之环、烈焰打击、冰风暴和恶毒嘲讽 5e 2024 法术版本[更好的伤害] ModUi/&EnableOneDndGuidanceSpell=启用Guidance 5e 2024 法术版本[施法时选择一项技能并获得最多 1 分钟的奖励。] -ModUi/&EnableOneDndHealingSpellsUpgrade=启用治愈伤口、虚假生命、治疗之语、群体治愈伤口和群体治疗之语 5e 2024 法术版本 +ModUi/&EnableOneDndHealingSpellsUpgrade=启用治疗伤口、虚假生命、治疗之语、群体治疗伤口和群体治疗之语 5e 2024 法术版本 [更好的治疗] ModUi/&EnableOneDndTrueStrikeCantrip=启用 True Strike 5e 2024 法术版本 [需要重启]{99>[攻击使用你的施法能力进行攻击掷骰和伤害加成,并从 5 级开始造成额外的辐射伤害] ModUi/&EnablePaladinLayOnHandsAsBonusAction=启用圣疗术作为奖励行动 ModUi/&EnablePaladinSmiteAsBonusAction=启用 Smite 作为奖励行动 From df3707368f54e6818f62d6ecfb47658eb1017433 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 18:28:48 -0800 Subject: [PATCH 32/44] add 'Enable Divine Favor 5e 2024 spell version', 'Enable Lesser Restoration 5e 2024 spell version', and 'Enable Stone Skin 5e 2024 spell version' --- .../Api/DatabaseHelper-RELEASE.cs | 9 +++++ .../ChangelogHistory.txt | 7 ++-- .../Displays/GeneralDisplay.cs | 21 ++++++++++++ .../Displays/SpellsDisplay.cs | 21 ++++++++++++ .../Models/Tabletop2024Context.cs | 34 +++++++++++++++++++ SolastaUnfinishedBusiness/Settings.cs | 3 ++ SolastaUnfinishedBusiness/Settings/empty.xml | 3 ++ .../Settings/zappastuff.xml | 3 ++ .../Translations/de/Settings-de.txt | 3 ++ .../Translations/en/Settings-en.txt | 3 ++ .../Translations/es/Settings-es.txt | 3 ++ .../Translations/fr/Settings-fr.txt | 3 ++ .../Translations/it/Settings-it.txt | 3 ++ .../Translations/ja/Settings-ja.txt | 3 ++ .../Translations/ko/Settings-ko.txt | 3 ++ .../Translations/pt-BR/Settings-pt-BR.txt | 3 ++ .../Translations/ru/Settings-ru.txt | 3 ++ .../Translations/zh-CN/Settings-zh-CN.txt | 3 ++ 18 files changed, 129 insertions(+), 2 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index 913d4e48d6..dbd997d22f 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -1446,6 +1446,15 @@ internal static FeatureDefinitionConditionAffinity ConditionAffinityWeatherChill internal static class FeatureDefinitionDamageAffinitys { + internal static FeatureDefinitionDamageAffinity DamageAffinityStoneskinBludgeoning { get; } = + GetDefinition("DamageAffinityStoneskinBludgeoning"); + + internal static FeatureDefinitionDamageAffinity DamageAffinityStoneskinPiercing { get; } = + GetDefinition("DamageAffinityStoneskinPiercing"); + + internal static FeatureDefinitionDamageAffinity DamageAffinityStoneskinSlashing { get; } = + GetDefinition("DamageAffinityStoneskinSlashing"); + internal static FeatureDefinitionDamageAffinity DamageAffinityPatronTreePiercingBranch { get; } = GetDefinition("DamageAffinityPatronTreePiercingBranch"); diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 9d8da5e2ef..12da6cd5ed 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -3,9 +3,12 @@ - added 'Allow Potions and Scrolls to be carried and used in the ammunition slots' setting [by SilverGriffon] - added 'Allow Potions and Scrolls to be carried and used in the off-hand weapon slot' setting [by SilverGriffon] - added 'Enable Arcane Sword, Circle of Death, Flame Strike, Ice Storm, and Vicious Mockery 5e 2024 spells version' +- added 'Enable Divine Favor 5e 2024 spell version' +- added 'Enable Lesser Restoration 5e 2024 spell version' +- added 'Enable Stone Skin 5e 2024 spell version' - added 'Enable True Strike 5e 2024 cantrip version' -- fixed 'Enable all Casters to use new prepared spells tables' not considering bonuses -- fixed 'Enable bonus action on Healing Potions and Antitoxin usages' bleeding into scrolls +- fixed 'Enable all Casters to use new prepared spells tables' not considering subclass bonuses +- fixed 'Enable bonus action on Healing Potions and Antitoxin usages' allowing other usable item types - fixed 'Enable Lay on Hands as bonus action' not getting offered in combat - fixed 'Enable Second Wind to use 5e 2024 usages progression' adding +1 usage - fixed Aimed Attack maneuver not consuming bonus action, and not adding die damage to attack diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 63a86b98d5..318d4981c3 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -633,6 +633,13 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchOneDndHealingSpellsUpgrade(); } + toggle = Main.Settings.EnableOneDndDivineFavorSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndDivineFavorSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndDivineFavorSpell = toggle; + Tabletop2024Context.SwitchOneDndSpellDivineFavor(); + } + toggle = Main.Settings.EnableOneDndGuidanceSpell; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) { @@ -640,6 +647,20 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchOneDndSpellGuidance(); } + toggle = Main.Settings.EnableOneDndLesserRestorationSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndLesserRestorationSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndLesserRestorationSpell = toggle; + Tabletop2024Context.SwitchOneDndSpellLesserRestoration(); + } + + toggle = Main.Settings.EnableOneDndStoneSkinSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndStoneSkinSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndStoneSkinSpell = toggle; + Tabletop2024Context.SwitchOneDndSpellStoneSkin(); + } + toggle = Main.Settings.EnableOneDndTrueStrikeCantrip; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndTrueStrikeCantrip"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index e485d5b602..d092f2049d 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -172,6 +172,13 @@ private static void DisplaySpellsGeneral() Tabletop2024Context.SwitchOneDndHealingSpellsUpgrade(); } + toggle = Main.Settings.EnableOneDndDivineFavorSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndDivineFavorSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndDivineFavorSpell = toggle; + Tabletop2024Context.SwitchOneDndSpellDivineFavor(); + } + toggle = Main.Settings.EnableOneDndGuidanceSpell; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndGuidanceSpell"), ref toggle, UI.AutoWidth())) { @@ -179,6 +186,20 @@ private static void DisplaySpellsGeneral() Tabletop2024Context.SwitchOneDndSpellGuidance(); } + toggle = Main.Settings.EnableOneDndLesserRestorationSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndLesserRestorationSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndLesserRestorationSpell = toggle; + Tabletop2024Context.SwitchOneDndSpellLesserRestoration(); + } + + toggle = Main.Settings.EnableOneDndStoneSkinSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndStoneSkinSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndStoneSkinSpell = toggle; + Tabletop2024Context.SwitchOneDndSpellStoneSkin(); + } + toggle = Main.Settings.EnableOneDndTrueStrikeCantrip; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndTrueStrikeCantrip"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 7a81ba003e..b4f81d71e2 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -316,7 +316,10 @@ internal static void LateLoad() SwitchOneDndRemoveBardMagicalSecretAt14And18(); SwitchOneDndRemoveBardSongOfRestAt2(); SwitchOneDndSpellBarkskin(); + SwitchOneDndSpellDivineFavor(); + SwitchOneDndSpellLesserRestoration(); SwitchOneDndSpellGuidance(); + SwitchOneDndSpellStoneSkin(); SwitchOneDndSurprisedEnforceDisadvantage(); SwitchSorcererInnateSorcery(); SwitchSorcerousRestorationAtLevel5(); @@ -521,6 +524,37 @@ private static void BuildOneDndGuidanceSubspells() } } + internal static void SwitchOneDndSpellDivineFavor() + { + DivineFavor.requiresConcentration = !Main.Settings.EnableOneDndDivineFavorSpell; + } + + internal static void SwitchOneDndSpellLesserRestoration() + { + LesserRestoration.castingTime = Main.Settings.EnableOneDndLesserRestorationSpell + ? ActivationTime.BonusAction + : ActivationTime.Action; + } + + internal static void SwitchOneDndSpellStoneSkin() + { + DamageAffinityStoneskinBludgeoning.TagsIgnoringAffinity.Clear(); + DamageAffinityStoneskinPiercing.TagsIgnoringAffinity.Clear(); + DamageAffinityStoneskinSlashing.TagsIgnoringAffinity.Clear(); + + if (Main.Settings.EnableOneDndStoneSkinSpell) + { + return; + } + + DamageAffinityStoneskinBludgeoning.TagsIgnoringAffinity.AddRange( + TagsDefinitions.MagicalWeapon, TagsDefinitions.MagicalEffect); + DamageAffinityStoneskinPiercing.TagsIgnoringAffinity.AddRange( + TagsDefinitions.MagicalWeapon, TagsDefinitions.MagicalEffect); + DamageAffinityStoneskinSlashing.TagsIgnoringAffinity.AddRange( + TagsDefinitions.MagicalWeapon, TagsDefinitions.MagicalEffect); + } + internal static void SwitchOneDndSpellGuidance() { foreach (var spell in GuidanceSubSpells) diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 014bd8071c..5bc77fc085 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -383,7 +383,10 @@ public class Settings : UnityModManager.ModSettings public bool EnableOneDndBarkskinSpell { get; set; } public bool EnableOneDndDamagingSpellsUpgrade { get; set; } public bool EnableOneDndHealingSpellsUpgrade { get; set; } + public bool EnableOneDndDivineFavorSpell { get; set; } + public bool EnableOneDndLesserRestorationSpell { get; set; } public bool EnableOneDndGuidanceSpell { get; set; } + public bool EnableOneDndStoneSkinSpell { get; set; } public bool EnableOneDndTrueStrikeCantrip { get; set; } public bool AllowHasteCasting { get; set; } public bool AllowStackedMaterialComponent { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 2e22c88aad..5af7657675 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -658,7 +658,10 @@ false false false + false + false false + false false false false diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index f452666fde..f947dc7acf 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -923,7 +923,10 @@ true true true + true + true true + true true true true diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 58de007c87..33fa85670f 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -149,8 +149,11 @@ ModUi/&EnableMulticlass=Aktivieren Sie Multiclass < ModUi/&EnableOneDnDPreparedSpellsTables=Ermöglichen Sie allen Zauberern die Verwendung neuer vorbereiteter Zaubertabellen [Barde, Kleriker, Druide, Paladin, Waldläufer, Zauberer, Magier] ModUi/&EnableOneDndBarkskinSpell=Aktiviere Barkskin 5e 2024 Zauberversion [Bonusaktion, keine Konzentration, AC auf 17 gesetzt] ModUi/&EnableOneDndDamagingSpellsUpgrade=Aktiviere Arkanes Schwert, Kreis des Todes, Flammenschlag, Eissturm und Bösartige Verhöhnung 5e 2024 Zauberversion [besserer Schaden] +ModUi/&EnableOneDndDivineFavorSpell=Aktivieren Sie die Zauberversion Göttliche Gunst 5e 2024 [keine Konzentration] ModUi/&EnableOneDndGuidanceSpell=Aktivieren Sie die Zauberversion Anleitung 5e 2024 [Wählen Sie beim Zaubern eine Fertigkeit aus und erhalten Sie bis zu 1 Minute lang einen Bonus.] ModUi/&EnableOneDndHealingSpellsUpgrade=Aktiviere Wunden heilen, Falsches Leben, Heilendes Wort, Massenheilung von Wunden und Massenheilungswort 5e 2024 Zauberversion [bessere Heilung] +ModUi/&EnableOneDndLesserRestorationSpell=Aktiviere die Zauberversion Geringere Wiederherstellung 5e 2024 [Bonusaktion] +ModUi/&EnableOneDndStoneSkinSpell=Aktiviere Steinhaut 5e 2024 Zauberversion [bietet auch Widerstand gegen magisches B/P/S] ModUi/&EnableOneDndTrueStrikeCantrip=Aktiviere True Strike 5e 2024 Cantrip-Version [Neustart erforderlich]\n[Angriff nutzt deine Zauberfähigkeit für den Angriffswurf und Schadensbonus sowie zusätzlichen Strahlungsschaden ab Level 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Aktiviere Handauflegen als Bonusaktion ModUi/&EnablePaladinSmiteAsBonusAction=Aktiviere Smite als Bonusaktion diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index 470f3cb975..f345082e93 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -149,8 +149,11 @@ ModUi/&EnableMulticlass=Enable multiclass Casters to use new prepared spells tables [Bard, Cleric, Druid, Paladin, Ranger, Sorcerer, Wizard] ModUi/&EnableOneDndBarkskinSpell=Enable Barkskin 5e 2024 spell version [bonus action, no concentration, AC set to 17] ModUi/&EnableOneDndDamagingSpellsUpgrade=Enable Arcane Sword, Circle of Death, Flame Strike, Ice Storm, and Vicious Mockery 5e 2024 spells version [better damage] +ModUi/&EnableOneDndDivineFavorSpell=Enable Divine Favor 5e 2024 spell version [no concentration] ModUi/&EnableOneDndGuidanceSpell=Enable Guidance 5e 2024 spell version [Choose one skill at casting and get bonus for up to 1 minute] ModUi/&EnableOneDndHealingSpellsUpgrade=Enable Cure Wounds, False Life, Healing Word, Mass Cure Wounds, and Mass Healing Word 5e 2024 spells version [better healing] +ModUi/&EnableOneDndLesserRestorationSpell=Enable Lesser Restoration 5e 2024 spell version [bonus action] +ModUi/&EnableOneDndStoneSkinSpell=Enable Stone Skin 5e 2024 spell version [provides resistance to magical B/P/S as well] ModUi/&EnableOneDndTrueStrikeCantrip=Enable True Strike 5e 2024 cantrip version [Requires Restart]\n[attack uses your spellcasting ability for the attack roll and damage bonus, and additional radiant damage from level 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Enable Lay on Hands as bonus action ModUi/&EnablePaladinSmiteAsBonusAction=Enable Smite as bonus action diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 0c39a1e81e..128eb47070 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -149,8 +149,11 @@ ModUi/&EnableMulticlass=Habilitar multiclase lanzadores de conjuros utilicen las nuevas tablas de conjuros preparadas [Bardo, Clérigo, Druida, Paladín, Explorador, Hechicero, Mago] ModUi/&EnableOneDndBarkskinSpell=Habilitar la versión del hechizo Corteza 5e 2024 [acción adicional, sin concentración, CA establecida en 17] ModUi/&EnableOneDndDamagingSpellsUpgrade=Habilita los hechizos Espada arcana, Círculo de la muerte, Golpe de llamas, Tormenta de hielo y Burla cruel de la versión 5e 2024. [mejor daño] +ModUi/&EnableOneDndDivineFavorSpell=Habilitar Favor divino versión del hechizo 5e 2024 [sin concentración] ModUi/&EnableOneDndGuidanceSpell=Habilitar Orientación versión del hechizo 5e 2024 [Elige una habilidad al lanzar y obtén una bonificación por hasta 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar heridas, Vida falsa, Palabra de sanación, Curar heridas en masa y Palabra de sanación en masa versión 5e 2024 hechizos [mejor sanación] +ModUi/&EnableOneDndLesserRestorationSpell=Habilitar Restauración menor versión del hechizo 5e 2024 [acción adicional] +ModUi/&EnableOneDndStoneSkinSpell=Habilitar Piel de piedra versión del hechizo 5e 2024 [también proporciona resistencia a B/P/S mágicos] ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar Golpe verdadero versión 5e 2024 del truco [Requiere reinicio]\n[el ataque usa tu capacidad de lanzamiento de conjuros para la tirada de ataque y la bonificación de daño, y daño radiante adicional a partir del nivel 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Imposición de manos como acción adicional ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Castigar como acción adicional diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 298a8fce13..e1a6c367fa 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -149,8 +149,11 @@ ModUi/&EnableMulticlass=Activer multiclasse lanceurs de sorts d'utiliser les nouvelles tables de sorts préparés [Barde, Clerc, Druide, Paladin, Rôdeur, Sorcier, Magicien] ModUi/&EnableOneDndBarkskinSpell=Activer Écorce 5e 2024 version du sort [action bonus, pas de concentration, CA fixée à 17] ModUi/&EnableOneDndDamagingSpellsUpgrade=Activer les sorts Épée arcanique, Cercle de la mort, Frappe de flammes, Tempête de glace et Moquerie vicieuse version 5e 2024 [meilleurs dégâts] +ModUi/&EnableOneDndDivineFavorSpell=Activer Faveur divine 5e 2024 version du sort [aucune concentration] ModUi/&EnableOneDndGuidanceSpell=Activer Guidage 5e version du sort 2024 [Choisissez une compétence au lancement et obtenez un bonus jusqu'à 1 minute.] ModUi/&EnableOneDndHealingSpellsUpgrade=Activer les sorts Soin des blessures, Fausse vie, Mot de guérison, Soin de masse des blessures et Mot de guérison de masse 5e 2024 version [meilleure guérison] +ModUi/&EnableOneDndLesserRestorationSpell=Activer Restauration mineure 5e 2024 version du sort [action bonus] +ModUi/&EnableOneDndStoneSkinSpell=Activer la version du sort Stone Skin 5e 2024 [offre également une résistance aux B/P/S magiques] ModUi/&EnableOneDndTrueStrikeCantrip=Activer True Strike 5e 2024 version du tour de passe-passe [Nécessite un redémarrage]\n[L'attaque utilise votre capacité de lancement de sorts pour le jet d'attaque et le bonus de dégâts, ainsi que des dégâts radiants supplémentaires à partir du niveau 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Activer Imposition des mains comme action bonus ModUi/&EnablePaladinSmiteAsBonusAction=Activer Smite comme action bonus diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index fe79b6dfd0..8770f240ad 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -149,8 +149,11 @@ ModUi/&EnableMulticlass=Abilita multiclasse incantatori a usare le nuove tabelle degli incantesimi preparati [Bardo, Chierico, Druido, Paladino, Ranger, Stregone, Mago] ModUi/&EnableOneDndBarkskinSpell=Abilita la versione dell'incantesimo Barkskin 5e 2024 [azione bonus, nessuna concentrazione, CA impostata a 17] ModUi/&EnableOneDndDamagingSpellsUpgrade=Abilita Spada Arcana, Cerchio della Morte, Colpo di Fiamma, Tempesta di Ghiaccio e Scherno Vizioso versione incantesimi 5e 2024 [danni migliori] +ModUi/&EnableOneDndDivineFavorSpell=Abilita Favore divino versione incantesimo 5e 2024 [nessuna concentrazione] ModUi/&EnableOneDndGuidanceSpell=Abilita la versione dell'incantesimo Guida 5e 2024 [Scegli un'abilità al momento del lancio e ottieni un bonus fino a 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Abilita Cura Ferite, Falsa Vita, Parola Guaritrice, Cura Ferite di Massa e Parola Guaritrice di Massa versione incantesimi 5e 2024 [migliore guarigione] +ModUi/&EnableOneDndLesserRestorationSpell=Abilita Restauro Minore versione incantesimo 5e 2024 [azione bonus] +ModUi/&EnableOneDndStoneSkinSpell=Abilita Pelle di pietra versione incantesimo 5e 2024 [fornisce anche resistenza a B/P/S magici] ModUi/&EnableOneDndTrueStrikeCantrip=Abilita True Strike versione trucchetto 5e 2024 [Richiede riavvio]\n[l'attacco usa la tua capacità di lanciare incantesimi per il tiro di attacco e il bonus al danno, e danni radianti aggiuntivi dal livello 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Abilita Imposizione delle mani come azione bonus ModUi/&EnablePaladinSmiteAsBonusAction=Abilita Colpisci come azione bonus diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index c6e7f28c40..4452f63872 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -149,8 +149,11 @@ ModUi/&EnableMulticlass=マルチクラスを有効にす ModUi/&EnableOneDnDPreparedSpellsTables=すべての キャスター が新しい準備済み呪文テーブル [吟遊詩人、聖職者、ドルイド、パラディン、レンジャー、ソーサラー、ウィザード] を使用できるようにします。 ModUi/&EnableOneDndBarkskinSpell=樹皮の皮 5e 2024 呪文バージョンを有効にする [ボーナスアクション、集中力なし、AC を 17 に設定] ModUi/&EnableOneDndDamagingSpellsUpgrade=Arcane Sword、Circle of Death、Flame Strike、Ice Storm、Vicious Mockery 5e 2024 呪文バージョン [ダメージ増加] を有効にします +ModUi/&EnableOneDndDivineFavorSpell=神の恩寵 5e 2024 呪文バージョン [集中なし] を有効にする ModUi/&EnableOneDndGuidanceSpell=ガイダンス 5e 2024 呪文バージョンを有効にします [発動時にスキルを 1 つ選択し、最大 1 分間ボーナスを獲得します。] ModUi/&EnableOneDndHealingSpellsUpgrade=Cure Wounds、False Life、Healing Word、Mass Cure Wounds、Mass Healing Word 5e 2024 呪文バージョン [better healing] を有効にします +ModUi/&EnableOneDndLesserRestorationSpell=Lesser Restoration 5e 2024 呪文バージョン [ボーナスアクション] を有効にする +ModUi/&EnableOneDndStoneSkinSpell=ストーンスキン 5e 2024 呪文バージョンを有効にする [魔法の B/P/S に対する耐性も付与します] ModUi/&EnableOneDndTrueStrikeCantrip=トゥルーストライク 5e 2024 キャントリップ バージョンを有効にします [再起動が必要]{99>[攻撃は、攻撃ロールとダメージ ボーナスに呪文発動能力を使用し、レベル 5 から追加の光ダメージを与えます] ModUi/&EnablePaladinLayOnHandsAsBonusAction=ボーナスアクションとして手を置くを有効にする ModUi/&EnablePaladinSmiteAsBonusAction=ボーナスアクションとしてスマイトを有効にする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 49df08f8b8..8ca8f53623 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -149,8 +149,11 @@ ModUi/&EnableMulticlass=다중클래스 활성화 < ModUi/&EnableOneDnDPreparedSpellsTables=모든 주문자가 새로 준비된 주문표 [바드, 성직자, 드루이드, 성기사, 레인저, 마법사, 마법사]를 사용할 수 있도록 합니다. ModUi/&EnableOneDndBarkskinSpell=Barkskin 5e 2024 주문 버전 활성화 [보너스 액션, 집중 없음, AC 17로 설정] ModUi/&EnableOneDndDamagingSpellsUpgrade=비전의 검, 죽음의 원, 불꽃 일격, 얼음 폭풍, 사악한 조롱 5e 2024 주문 버전 [더 높은 데미지]을 활성화합니다. +ModUi/&EnableOneDndDivineFavorSpell=신성한 호의 5e 2024 주문 버전 활성화 [집중 없음] ModUi/&EnableOneDndGuidanceSpell=지침 5e 2024 주문 버전을 활성화합니다. [시전 시 스킬 하나를 선택하고 최대 1분 동안 보너스를 받습니다.] ModUi/&EnableOneDndHealingSpellsUpgrade=상처 치료, 거짓 생명, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀 5e 2024 주문 버전 [치유력 향상]을 활성화합니다. +ModUi/&EnableOneDndLesserRestorationSpell=하위 회복 5e 2024 주문 버전 [보너스 액션]을 활성화합니다. +ModUi/&EnableOneDndStoneSkinSpell=스톤 스킨 5e 2024 주문 버전을 활성화합니다. [마법 B/P/S에 대한 저항력도 제공] ModUi/&EnableOneDndTrueStrikeCantrip=True Strike 5e 2024 캔트립 버전 사용 [재시작 필요]\n[공격 시 공격 굴림과 피해 보너스에 주문 시전 능력을 사용하고, 레벨 5부터 추가 방사형 피해] ModUi/&EnablePaladinLayOnHandsAsBonusAction=안수를 보너스 액션으로 활성화합니다. ModUi/&EnablePaladinSmiteAsBonusAction=Smite를 보너스 액션으로 활성화합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 670cd393b7..f5065f4ea5 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -149,8 +149,11 @@ ModUi/&EnableMulticlass=Habilitar multiclasse Conjuradores usem novas tabelas de magias preparadas [Bardo, Clérigo, Druida, Paladino, Patrulheiro, Feiticeiro, Mago] ModUi/&EnableOneDndBarkskinSpell=Habilitar Barkskin versão de magia 5e 2024 [ação bônus, sem concentração, CA definida como 17] ModUi/&EnableOneDndDamagingSpellsUpgrade=Habilitar Arcane Sword, Circle of Death, Flame Strike, Ice Storm e Vicious Mockery versão 5e 2024 dos feitiços [melhor dano] +ModUi/&EnableOneDndDivineFavorSpell=Habilitar Favor Divino versão de magia 5e 2024 [sem concentração] ModUi/&EnableOneDndGuidanceSpell=Habilitar Orientação versão de magia 5e 2024 [Escolha uma habilidade na conjuração e ganhe bônus por até 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar Ferimentos, Vida Falsa, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa versão de feitiços 5e 2024 [melhor cura] +ModUi/&EnableOneDndLesserRestorationSpell=Habilitar Restauração Menor versão de magia 5e 2024 [ação bônus] +ModUi/&EnableOneDndStoneSkinSpell=Habilitar Stone Skin versão de magia 5e 2024 [fornece resistência a B/P/S mágicos também] ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar True Strike versão 5e 2024 do truque [Requer reinicialização]\n[o ataque usa sua habilidade de conjuração para a jogada de ataque e bônus de dano, além de dano radiante adicional do nível 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Impor as Mãos como ação bônus ModUi/&EnablePaladinSmiteAsBonusAction=Habilitar Smite como ação bônus diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index f26798191d..06b01c3667 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -149,8 +149,11 @@ ModUi/&EnableMulticlass=Включить мультикласси ModUi/&EnableOneDnDPreparedSpellsTables=Включить всем Заклинателям использовать новые таблицы подготовленных заклинаний [Бард, Жрец, Друид, Паладин, Следопыт, Чародей, Волшебник] ModUi/&EnableOneDndBarkskinSpell=Включить версию заклинания Дубовая кора из 5e 2024 [бонусное действие, не требует концентрации, КД на 17] ModUi/&EnableOneDndDamagingSpellsUpgrade=Включить заклинания Arcane Sword, Circle of Death, Flame Strike, Ice Storm и Vicious Mockery 5e 2024 версии [лучший урон] +ModUi/&EnableOneDndDivineFavorSpell=Включить Божественную милость 5e 2024 версия заклинания [без концентрации] ModUi/&EnableOneDndGuidanceSpell=Включить версию заклинания Указание из 5e 2024 [Выберите один навык при наложении и получите бонус на срок до 1 минуты.] ModUi/&EnableOneDndHealingSpellsUpgrade=Включить Исцеление ран, Ложная жизнь, Слово исцеления, Массовое исцеление ран и Слово массового исцеления 5e 2024 заклинания версии [лучшее исцеление] +ModUi/&EnableOneDndLesserRestorationSpell=Включить Малое восстановление 5e 2024 версия заклинания [бонусное действие] +ModUi/&EnableOneDndStoneSkinSpell=Включить версию заклинания Stone Skin 5e 2024 [также обеспечивает сопротивление магическому B/P/S] ModUi/&EnableOneDndTrueStrikeCantrip=Включить версию колдовства True Strike 5e 2024 [Требуется перезапуск]\n[атака использует вашу способность к заклинаниям для броска атаки и бонуса к урону, а также дополнительный урон от излучения с 5-го уровня] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Включить Наложение рук бонусным действием ModUi/&EnablePaladinSmiteAsBonusAction=Включить Кару бонусным действием diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index f398528762..9c8f8c7db2 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -149,8 +149,11 @@ ModUi/&EnableMulticlass=启用多类 施法者使用新的准备好的法术表[吟游诗人、牧师、德鲁伊、圣骑士、游侠、术士、魔法师] ModUi/&EnableOneDndBarkskinSpell=启用 Barkskin 5e 2024 法术版本 [奖励行动,无专注,AC 设置为 17] ModUi/&EnableOneDndDamagingSpellsUpgrade=启用奥术之剑、死亡之环、烈焰打击、冰风暴和恶毒嘲讽 5e 2024 法术版本[更好的伤害] +ModUi/&EnableOneDndDivineFavorSpell=启用神恩 5e 2024 法术版本[无集中] ModUi/&EnableOneDndGuidanceSpell=启用Guidance 5e 2024 法术版本[施法时选择一项技能并获得最多 1 分钟的奖励。] ModUi/&EnableOneDndHealingSpellsUpgrade=启用治疗伤口、虚假生命、治疗之语、群体治疗伤口和群体治疗之语 5e 2024 法术版本 [更好的治疗] +ModUi/&EnableOneDndLesserRestorationSpell=启用次级修复 5e 2024 法术版本[奖励行动] +ModUi/&EnableOneDndStoneSkinSpell=启用石肤 5e 2024 法术版本[同时提供对魔法 B/P/S 的抵抗力] ModUi/&EnableOneDndTrueStrikeCantrip=启用 True Strike 5e 2024 法术版本 [需要重启]{99>[攻击使用你的施法能力进行攻击掷骰和伤害加成,并从 5 级开始造成额外的辐射伤害] ModUi/&EnablePaladinLayOnHandsAsBonusAction=启用圣疗术作为奖励行动 ModUi/&EnablePaladinSmiteAsBonusAction=启用 Smite 作为奖励行动 From 479d4cdf49ff8c287c494006d8f606b01aeb7d27 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 19:12:29 -0800 Subject: [PATCH 33/44] add EnableOneDndMagicWeaponSpell and EnableOneDndPowerWordKillSpell --- .../ChangelogHistory.txt | 2 + .../Displays/GeneralDisplay.cs | 13 +++ .../Displays/SpellsDisplay.cs | 13 +++ .../Models/Tabletop2024Context.cs | 20 ++++ SolastaUnfinishedBusiness/Settings.cs | 4 +- SolastaUnfinishedBusiness/Settings/empty.xml | 4 +- .../Settings/zappastuff.xml | 2 + .../Spells/SpellBuildersLevel09.cs | 95 ++++++++++++------- .../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 + 18 files changed, 138 insertions(+), 35 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index 12da6cd5ed..a40ba828bb 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -5,6 +5,8 @@ - added 'Enable Arcane Sword, Circle of Death, Flame Strike, Ice Storm, and Vicious Mockery 5e 2024 spells version' - added 'Enable Divine Favor 5e 2024 spell version' - added 'Enable Lesser Restoration 5e 2024 spell version' +- added 'Enable Magic Weapon 5e 2024 spell version' +- added 'Enable Power Word: Kill 5e 2024 spell version' - added 'Enable Stone Skin 5e 2024 spell version' - added 'Enable True Strike 5e 2024 cantrip version' - fixed 'Enable all Casters to use new prepared spells tables' not considering subclass bonuses diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 318d4981c3..3df7d3857b 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -654,6 +654,19 @@ private static void DisplayOneDnd() Tabletop2024Context.SwitchOneDndSpellLesserRestoration(); } + toggle = Main.Settings.EnableOneDndMagicWeaponSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndMagicWeaponSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndMagicWeaponSpell = toggle; + Tabletop2024Context.SwitchOneDndSpellMagicWeapon(); + } + + toggle = Main.Settings.EnableOneDndPowerWordKillSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndPowerWordKillSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndPowerWordKillSpell = toggle; + } + toggle = Main.Settings.EnableOneDndStoneSkinSpell; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndStoneSkinSpell"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index d092f2049d..a49b1a8eee 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -193,6 +193,19 @@ private static void DisplaySpellsGeneral() Tabletop2024Context.SwitchOneDndSpellLesserRestoration(); } + toggle = Main.Settings.EnableOneDndMagicWeaponSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndMagicWeaponSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndMagicWeaponSpell = toggle; + Tabletop2024Context.SwitchOneDndSpellMagicWeapon(); + } + + toggle = Main.Settings.EnableOneDndPowerWordKillSpell; + if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndPowerWordKillSpell"), ref toggle, UI.AutoWidth())) + { + Main.Settings.EnableOneDndPowerWordKillSpell = toggle; + } + toggle = Main.Settings.EnableOneDndStoneSkinSpell; if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndStoneSkinSpell"), ref toggle, UI.AutoWidth())) { diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index b4f81d71e2..d1d45440cd 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -579,6 +579,26 @@ internal static void SwitchOneDndSpellGuidance() } } + internal static void SwitchOneDndSpellMagicWeapon() + { + var featureBySlotLevel = MagicWeapon.EffectDescription.EffectForms[0].ItemPropertyForm.FeatureBySlotLevel; + + if (Main.Settings.EnableOneDndMagicWeaponSpell) + { + MagicWeapon.requiresConcentration = false; + MagicWeapon.castingTime = ActivationTime.BonusAction; + featureBySlotLevel[1].level = 3; + featureBySlotLevel[2].level = 5; + } + else + { + MagicWeapon.requiresConcentration = true; + MagicWeapon.castingTime = ActivationTime.Action; + featureBySlotLevel[1].level = 4; + featureBySlotLevel[2].level = 6; + } + } + internal static void SwitchOneDndWizardSchoolOfMagicLearningLevel() { var schools = DatabaseRepository.GetDatabase() diff --git a/SolastaUnfinishedBusiness/Settings.cs b/SolastaUnfinishedBusiness/Settings.cs index 5bc77fc085..91135aa2c8 100644 --- a/SolastaUnfinishedBusiness/Settings.cs +++ b/SolastaUnfinishedBusiness/Settings.cs @@ -384,8 +384,10 @@ public class Settings : UnityModManager.ModSettings public bool EnableOneDndDamagingSpellsUpgrade { get; set; } public bool EnableOneDndHealingSpellsUpgrade { get; set; } public bool EnableOneDndDivineFavorSpell { get; set; } - public bool EnableOneDndLesserRestorationSpell { get; set; } public bool EnableOneDndGuidanceSpell { get; set; } + public bool EnableOneDndLesserRestorationSpell { get; set; } + public bool EnableOneDndMagicWeaponSpell { get; set; } + public bool EnableOneDndPowerWordKillSpell { get; set; } public bool EnableOneDndStoneSkinSpell { get; set; } public bool EnableOneDndTrueStrikeCantrip { get; set; } public bool AllowHasteCasting { get; set; } diff --git a/SolastaUnfinishedBusiness/Settings/empty.xml b/SolastaUnfinishedBusiness/Settings/empty.xml index 5af7657675..42a94e742f 100644 --- a/SolastaUnfinishedBusiness/Settings/empty.xml +++ b/SolastaUnfinishedBusiness/Settings/empty.xml @@ -659,8 +659,10 @@ false false false - false false + false + false + false false false false diff --git a/SolastaUnfinishedBusiness/Settings/zappastuff.xml b/SolastaUnfinishedBusiness/Settings/zappastuff.xml index f947dc7acf..c925939c4e 100644 --- a/SolastaUnfinishedBusiness/Settings/zappastuff.xml +++ b/SolastaUnfinishedBusiness/Settings/zappastuff.xml @@ -926,6 +926,8 @@ true true true + true + true true true true diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs index 12703c49ef..aa4d8f9566 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs @@ -1,7 +1,9 @@ using System.Collections; +using System.Collections.Generic; using System.Linq; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; +using SolastaUnfinishedBusiness.Api.LanguageExtensions; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; @@ -237,38 +239,7 @@ internal static SpellDefinition BuildPowerWordHeal() .Build()) .SetParticleEffectParameters(Regenerate) .Build()) - .AddCustomSubFeatures(new CustomBehaviorPowerWordKillOrHeal()) - .AddToDB(); - } - - #endregion - - #region Power Word Kill - - internal static SpellDefinition BuildPowerWordKill() - { - return SpellDefinitionBuilder - .Create("PowerWordKill") - .SetGuiPresentation(Category.Spell, Sprites.GetSprite("PowerWordKill", Resources.PowerWordKill, 128)) - .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolTransmutation) - .SetSpellLevel(9) - .SetCastingTime(ActivationTime.Action) - .SetMaterialComponent(MaterialComponentType.None) - .SetSomaticComponent(true) - .SetVerboseComponent(true) - .SetVocalSpellSameType(VocalSpellSemeType.Attack) - .SetEffectDescription( - EffectDescriptionBuilder - .Create() - .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) - .SetEffectForms( - EffectFormBuilder - .Create() - .SetKillForm(KillCondition.UnderHitPoints, 0F, 100) - .Build()) - .SetParticleEffectParameters(FingerOfDeath) - .Build()) - .AddCustomSubFeatures(new CustomBehaviorPowerWordKillOrHeal()) + .AddCustomSubFeatures(new FilterTargetingCharacterPowerWordKillOrHeal()) .AddToDB(); } @@ -364,7 +335,7 @@ internal static SpellDefinition BuildPsychicScream() #endregion // required to support Bard level 20 feature Words of Creations (only scenario where these spells have a 2nd target) - private sealed class CustomBehaviorPowerWordKillOrHeal : IFilterTargetingCharacter + private sealed class FilterTargetingCharacterPowerWordKillOrHeal : IFilterTargetingCharacter { public bool EnforceFullSelection => false; @@ -382,6 +353,64 @@ public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter } } + #region Power Word Kill + + internal static SpellDefinition BuildPowerWordKill() + { + return SpellDefinitionBuilder + .Create("PowerWordKill") + .SetGuiPresentation(Category.Spell, Sprites.GetSprite("PowerWordKill", Resources.PowerWordKill, 128)) + .SetSchoolOfMagic(SchoolOfMagicDefinitions.SchoolTransmutation) + .SetSpellLevel(9) + .SetCastingTime(ActivationTime.Action) + .SetMaterialComponent(MaterialComponentType.None) + .SetSomaticComponent(true) + .SetVerboseComponent(true) + .SetVocalSpellSameType(VocalSpellSemeType.Attack) + .SetEffectDescription( + EffectDescriptionBuilder + .Create() + .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) + .SetEffectForms( + EffectFormBuilder + .Create() + .SetKillForm(KillCondition.UnderHitPoints, 0F, 100) + .Build()) + .SetParticleEffectParameters(FingerOfDeath) + .Build()) + .AddCustomSubFeatures( + new FilterTargetingCharacterPowerWordKillOrHeal(), + new MagicEffectBeforeHitConfirmedOnEnemyPowerWordKill()) + .AddToDB(); + } + + private sealed class MagicEffectBeforeHitConfirmedOnEnemyPowerWordKill : IMagicEffectBeforeHitConfirmedOnEnemy + { + private static readonly EffectForm PsychicDamage = + EffectFormBuilder.DamageForm(DamageTypePsychic, 12, DieType.D12); + + public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( + GameLocationBattleManager battleManager, + GameLocationCharacter attacker, + GameLocationCharacter defender, + ActionModifier actionModifier, + RulesetEffect rulesetEffect, + List actualEffectForms, + bool firstTarget, + bool criticalHit) + { + if (Main.Settings.EnableOneDndPowerWordKillSpell && + defender.RulesetActor.CurrentHitPoints < 100) + { + actualEffectForms.SetRange(PsychicDamage); + } + + yield break; + } + } + + #endregion + #region Time Stop internal static SpellDefinition BuildTimeStop() diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 33fa85670f..bc7e913e7a 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -153,6 +153,8 @@ ModUi/&EnableOneDndDivineFavorSpell=Aktivieren Sie die Zauberversion Anleitung 5e 2024 [Wählen Sie beim Zaubern eine Fertigkeit aus und erhalten Sie bis zu 1 Minute lang einen Bonus.] ModUi/&EnableOneDndHealingSpellsUpgrade=Aktiviere Wunden heilen, Falsches Leben, Heilendes Wort, Massenheilung von Wunden und Massenheilungswort 5e 2024 Zauberversion [bessere Heilung] ModUi/&EnableOneDndLesserRestorationSpell=Aktiviere die Zauberversion Geringere Wiederherstellung 5e 2024 [Bonusaktion] +ModUi/&EnableOneDndMagicWeaponSpell=Aktiviere Magische Waffe 5e 2024 Zauberversion [Bonusaktion, keine Konzentration, Schadenserhöhung bei 3 und 5] +ModUi/&EnableOneDndPowerWordKillSpell=Aktiviere Machtwort: Töten 5e 2024 Zauberversion [12d12 psychischer Schaden wenn unter 100 PS] ModUi/&EnableOneDndStoneSkinSpell=Aktiviere Steinhaut 5e 2024 Zauberversion [bietet auch Widerstand gegen magisches B/P/S] ModUi/&EnableOneDndTrueStrikeCantrip=Aktiviere True Strike 5e 2024 Cantrip-Version [Neustart erforderlich]\n[Angriff nutzt deine Zauberfähigkeit für den Angriffswurf und Schadensbonus sowie zusätzlichen Strahlungsschaden ab Level 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Aktiviere Handauflegen als Bonusaktion diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index f345082e93..fb55b7bc38 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -153,6 +153,8 @@ ModUi/&EnableOneDndDivineFavorSpell=Enable Divine Favor 5 ModUi/&EnableOneDndGuidanceSpell=Enable Guidance 5e 2024 spell version [Choose one skill at casting and get bonus for up to 1 minute] ModUi/&EnableOneDndHealingSpellsUpgrade=Enable Cure Wounds, False Life, Healing Word, Mass Cure Wounds, and Mass Healing Word 5e 2024 spells version [better healing] ModUi/&EnableOneDndLesserRestorationSpell=Enable Lesser Restoration 5e 2024 spell version [bonus action] +ModUi/&EnableOneDndMagicWeaponSpell=Enable Magic Weapon 5e 2024 spell version [bonus action, no concentration, damage upgrade at 3 and 5] +ModUi/&EnableOneDndPowerWordKillSpell=Enable Power Word: Kill 5e 2024 spell version [12d12 psychic damage if under 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Enable Stone Skin 5e 2024 spell version [provides resistance to magical B/P/S as well] ModUi/&EnableOneDndTrueStrikeCantrip=Enable True Strike 5e 2024 cantrip version [Requires Restart]\n[attack uses your spellcasting ability for the attack roll and damage bonus, and additional radiant damage from level 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Enable Lay on Hands as bonus action diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index 128eb47070..fcef678cfd 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -153,6 +153,8 @@ ModUi/&EnableOneDndDivineFavorSpell=Habilitar Favor divinoOrientación versión del hechizo 5e 2024 [Elige una habilidad al lanzar y obtén una bonificación por hasta 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar heridas, Vida falsa, Palabra de sanación, Curar heridas en masa y Palabra de sanación en masa versión 5e 2024 hechizos [mejor sanación] ModUi/&EnableOneDndLesserRestorationSpell=Habilitar Restauración menor versión del hechizo 5e 2024 [acción adicional] +ModUi/&EnableOneDndMagicWeaponSpell=Habilitar Arma mágica versión del hechizo 5e 2024 [acción adicional, sin concentración, mejora de daño en 3 y 5] +ModUi/&EnableOneDndPowerWordKillSpell=Habilitar Palabra de poder: matar versión del hechizo 5e 2024 [12d12 de daño psíquico si tienes menos de 100 HP] ModUi/&EnableOneDndStoneSkinSpell=Habilitar Piel de piedra versión del hechizo 5e 2024 [también proporciona resistencia a B/P/S mágicos] ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar Golpe verdadero versión 5e 2024 del truco [Requiere reinicio]\n[el ataque usa tu capacidad de lanzamiento de conjuros para la tirada de ataque y la bonificación de daño, y daño radiante adicional a partir del nivel 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Imposición de manos como acción adicional diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index e1a6c367fa..4fbc060aa9 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -153,6 +153,8 @@ ModUi/&EnableOneDndDivineFavorSpell=Activer Faveur divine ModUi/&EnableOneDndGuidanceSpell=Activer Guidage 5e version du sort 2024 [Choisissez une compétence au lancement et obtenez un bonus jusqu'à 1 minute.] ModUi/&EnableOneDndHealingSpellsUpgrade=Activer les sorts Soin des blessures, Fausse vie, Mot de guérison, Soin de masse des blessures et Mot de guérison de masse 5e 2024 version [meilleure guérison] ModUi/&EnableOneDndLesserRestorationSpell=Activer Restauration mineure 5e 2024 version du sort [action bonus] +ModUi/&EnableOneDndMagicWeaponSpell=Activer Arme magique 5e version du sort 2024 [action bonus, pas de concentration, amélioration des dégâts à 3 et 5] +ModUi/&EnableOneDndPowerWordKillSpell=Activer Mot de pouvoir : Tuer 5e version du sort 2024 [12d12 dégâts psychiques si moins de 100 pv] ModUi/&EnableOneDndStoneSkinSpell=Activer la version du sort Stone Skin 5e 2024 [offre également une résistance aux B/P/S magiques] ModUi/&EnableOneDndTrueStrikeCantrip=Activer True Strike 5e 2024 version du tour de passe-passe [Nécessite un redémarrage]\n[L'attaque utilise votre capacité de lancement de sorts pour le jet d'attaque et le bonus de dégâts, ainsi que des dégâts radiants supplémentaires à partir du niveau 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Activer Imposition des mains comme action bonus diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 8770f240ad..4dd0744f12 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -153,6 +153,8 @@ ModUi/&EnableOneDndDivineFavorSpell=Abilita Favore divino ModUi/&EnableOneDndGuidanceSpell=Abilita la versione dell'incantesimo Guida 5e 2024 [Scegli un'abilità al momento del lancio e ottieni un bonus fino a 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Abilita Cura Ferite, Falsa Vita, Parola Guaritrice, Cura Ferite di Massa e Parola Guaritrice di Massa versione incantesimi 5e 2024 [migliore guarigione] ModUi/&EnableOneDndLesserRestorationSpell=Abilita Restauro Minore versione incantesimo 5e 2024 [azione bonus] +ModUi/&EnableOneDndMagicWeaponSpell=Abilita Arma magica versione incantesimo 5e 2024 [azione bonus, nessuna concentrazione, potenziamento danno a 3 e 5] +ModUi/&EnableOneDndPowerWordKillSpell=Abilita Parola di potere: Uccidi versione incantesimo 5e 2024 [12d12 danni psichici se sotto i 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Abilita Pelle di pietra versione incantesimo 5e 2024 [fornisce anche resistenza a B/P/S magici] ModUi/&EnableOneDndTrueStrikeCantrip=Abilita True Strike versione trucchetto 5e 2024 [Richiede riavvio]\n[l'attacco usa la tua capacità di lanciare incantesimi per il tiro di attacco e il bonus al danno, e danni radianti aggiuntivi dal livello 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Abilita Imposizione delle mani come azione bonus diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 4452f63872..04777e5931 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -153,6 +153,8 @@ ModUi/&EnableOneDndDivineFavorSpell=神の恩寵 5e 2024 ModUi/&EnableOneDndGuidanceSpell=ガイダンス 5e 2024 呪文バージョンを有効にします [発動時にスキルを 1 つ選択し、最大 1 分間ボーナスを獲得します。] ModUi/&EnableOneDndHealingSpellsUpgrade=Cure Wounds、False Life、Healing Word、Mass Cure Wounds、Mass Healing Word 5e 2024 呪文バージョン [better healing] を有効にします ModUi/&EnableOneDndLesserRestorationSpell=Lesser Restoration 5e 2024 呪文バージョン [ボーナスアクション] を有効にする +ModUi/&EnableOneDndMagicWeaponSpell=魔法の武器 5e 2024 呪文バージョン [ボーナスアクション、集中力なし、3 と 5 でダメージがアップグレード] を有効にします +ModUi/&EnableOneDndPowerWordKillSpell=パワーワード: キル 5e 2024 呪文バージョンを有効にする [HP 100 未満の場合は 12d12 の精神ダメージ] ModUi/&EnableOneDndStoneSkinSpell=ストーンスキン 5e 2024 呪文バージョンを有効にする [魔法の B/P/S に対する耐性も付与します] ModUi/&EnableOneDndTrueStrikeCantrip=トゥルーストライク 5e 2024 キャントリップ バージョンを有効にします [再起動が必要]{99>[攻撃は、攻撃ロールとダメージ ボーナスに呪文発動能力を使用し、レベル 5 から追加の光ダメージを与えます] ModUi/&EnablePaladinLayOnHandsAsBonusAction=ボーナスアクションとして手を置くを有効にする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 8ca8f53623..9388c3586e 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -153,6 +153,8 @@ ModUi/&EnableOneDndDivineFavorSpell=신성한 호의 5e 2 ModUi/&EnableOneDndGuidanceSpell=지침 5e 2024 주문 버전을 활성화합니다. [시전 시 스킬 하나를 선택하고 최대 1분 동안 보너스를 받습니다.] ModUi/&EnableOneDndHealingSpellsUpgrade=상처 치료, 거짓 생명, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀 5e 2024 주문 버전 [치유력 향상]을 활성화합니다. ModUi/&EnableOneDndLesserRestorationSpell=하위 회복 5e 2024 주문 버전 [보너스 액션]을 활성화합니다. +ModUi/&EnableOneDndMagicWeaponSpell=마법 무기 5e 2024 주문 버전 활성화 [보너스 액션, 집중 없음, 3과 5에서 데미지 업그레이드] +ModUi/&EnableOneDndPowerWordKillSpell=힘의 말씀: 살해 5e 2024 주문 버전을 활성화합니다. [체력이 100 미만일 경우 12d12의 사이킥 데미지] ModUi/&EnableOneDndStoneSkinSpell=스톤 스킨 5e 2024 주문 버전을 활성화합니다. [마법 B/P/S에 대한 저항력도 제공] ModUi/&EnableOneDndTrueStrikeCantrip=True Strike 5e 2024 캔트립 버전 사용 [재시작 필요]\n[공격 시 공격 굴림과 피해 보너스에 주문 시전 능력을 사용하고, 레벨 5부터 추가 방사형 피해] ModUi/&EnablePaladinLayOnHandsAsBonusAction=안수를 보너스 액션으로 활성화합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index f5065f4ea5..8ca65df78f 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -153,6 +153,8 @@ ModUi/&EnableOneDndDivineFavorSpell=Habilitar Favor DivinoOrientação versão de magia 5e 2024 [Escolha uma habilidade na conjuração e ganhe bônus por até 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar Ferimentos, Vida Falsa, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa versão de feitiços 5e 2024 [melhor cura] ModUi/&EnableOneDndLesserRestorationSpell=Habilitar Restauração Menor versão de magia 5e 2024 [ação bônus] +ModUi/&EnableOneDndMagicWeaponSpell=Habilitar Arma Mágica versão de magia 5e 2024 [ação bônus, sem concentração, aumento de dano em 3 e 5] +ModUi/&EnableOneDndPowerWordKillSpell=Habilitar Palavra de Poder: Matar versão de magia 5e 2024 [12d12 de dano psíquico se tiver menos de 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Habilitar Stone Skin versão de magia 5e 2024 [fornece resistência a B/P/S mágicos também] ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar True Strike versão 5e 2024 do truque [Requer reinicialização]\n[o ataque usa sua habilidade de conjuração para a jogada de ataque e bônus de dano, além de dano radiante adicional do nível 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Impor as Mãos como ação bônus diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 06b01c3667..8c4de70d49 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -153,6 +153,8 @@ ModUi/&EnableOneDndDivineFavorSpell=Включить Божест ModUi/&EnableOneDndGuidanceSpell=Включить версию заклинания Указание из 5e 2024 [Выберите один навык при наложении и получите бонус на срок до 1 минуты.] ModUi/&EnableOneDndHealingSpellsUpgrade=Включить Исцеление ран, Ложная жизнь, Слово исцеления, Массовое исцеление ран и Слово массового исцеления 5e 2024 заклинания версии [лучшее исцеление] ModUi/&EnableOneDndLesserRestorationSpell=Включить Малое восстановление 5e 2024 версия заклинания [бонусное действие] +ModUi/&EnableOneDndMagicWeaponSpell=Включить версию заклинания Магическое оружие 5e 2024 [бонусное действие, нет концентрации, улучшение урона на 3 и 5] +ModUi/&EnableOneDndPowerWordKillSpell=Включить Слово силы: Убить 5e 2024 версия заклинания [12d12 психического урона, если менее 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Включить версию заклинания Stone Skin 5e 2024 [также обеспечивает сопротивление магическому B/P/S] ModUi/&EnableOneDndTrueStrikeCantrip=Включить версию колдовства True Strike 5e 2024 [Требуется перезапуск]\n[атака использует вашу способность к заклинаниям для броска атаки и бонуса к урону, а также дополнительный урон от излучения с 5-го уровня] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Включить Наложение рук бонусным действием diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 9c8f8c7db2..2cdba7fa4d 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -153,6 +153,8 @@ ModUi/&EnableOneDndDivineFavorSpell=启用神恩 5e 2024 ModUi/&EnableOneDndGuidanceSpell=启用Guidance 5e 2024 法术版本[施法时选择一项技能并获得最多 1 分钟的奖励。] ModUi/&EnableOneDndHealingSpellsUpgrade=启用治疗伤口、虚假生命、治疗之语、群体治疗伤口和群体治疗之语 5e 2024 法术版本 [更好的治疗] ModUi/&EnableOneDndLesserRestorationSpell=启用次级修复 5e 2024 法术版本[奖励行动] +ModUi/&EnableOneDndMagicWeaponSpell=启用魔法武器 5e 2024 法术版本[奖励行动,无需集中,伤害在 3 和 5 时升级] +ModUi/&EnableOneDndPowerWordKillSpell=启用Power Word: Kill 5e 2024 法术版本[如果生命值低于 100,则造成 12d12 精神伤害] ModUi/&EnableOneDndStoneSkinSpell=启用石肤 5e 2024 法术版本[同时提供对魔法 B/P/S 的抵抗力] ModUi/&EnableOneDndTrueStrikeCantrip=启用 True Strike 5e 2024 法术版本 [需要重启]{99>[攻击使用你的施法能力进行攻击掷骰和伤害加成,并从 5 级开始造成额外的辐射伤害] ModUi/&EnablePaladinLayOnHandsAsBonusAction=启用圣疗术作为奖励行动 From 2775ec820601682920519a31ec4d46ac61daeaf6 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 19:53:42 -0800 Subject: [PATCH 34/44] fix translations --- .../Translations/it/Others-it.txt | 2 +- .../Translations/it/Settings-it.txt | 4 ++-- .../Translations/ja/Settings-ja.txt | 2 +- .../Translations/ko/Settings-ko.txt | 6 +++--- .../Translations/pt-BR/Settings-pt-BR.txt | 12 ++++++------ .../Translations/zh-CN/Settings-zh-CN.txt | 2 +- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index c5f0b62227..1deb22fb20 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -258,7 +258,7 @@ Reaction/&CastSpellInRetributionReactTitle=Lanciare un incantesimo Reaction/&CastSpellInRetributionTitle=Lancia incantesimo di reazione Reaction/&CustomReactionBardCounterCharmDescriptionAlly={0} ha fallito un tiro salvezza contro {2} di {1}. Puoi reagire e ripetere il tiro salvezza con vantaggio. Reaction/&CustomReactionBardCounterCharmDescriptionSelf={0} ha fallito un tiro salvezza contro {2} di {1} e può reagire ripetendo il tiro salvezza con vantaggio. -Reaction/&CustomReactionBardCounterCharmReactDescription=Ripeti il ​​tiro salvezza con vantaggio. +Reaction/&CustomReactionBardCounterCharmReactDescription=Ripeti il tiro salvezza con vantaggio. Reaction/&CustomReactionBardCounterCharmReactTitle=Controfascino Reaction/&CustomReactionBardCounterCharmTitle=Controfascino Reaction/&CustomReactionMagicalGuidanceCheckDescription=Hai fallito un tiro di controllo. Puoi spendere 1 punto stregoneria per tirare un d20 e sostituire il tiro di controllo. diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 4dd0744f12..089dc664e3 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -188,8 +188,8 @@ ModUi/&EnableTooltipDistance=Abilita la visualizzazione della distanza nei sugge ModUi/&EnableUnarmedMainAttackAction=Abilita l'azione Attacco disarmato [se l'attore ha un'arma nel personaggio principale, è un monaco o ha fasce o guanto equipaggiati] ModUi/&EnableUpcastConjureElementalAndFey=Abilita l'upcast di Evoca Elementale e Evoca Fata ModUi/&EnableVariablePlaceholdersOnTexts=Abilita segnaposto variabili nelle descrizioni [usa {VARIABLE_NAME} come segnaposto] -ModUi/&EnableVersatileAmmunitionSlots=Consenti il ​​trasporto e l'utilizzo di Pozioni e Pergamene negli slot Munizioni -ModUi/&EnableVersatileOffHandSlot=Consenti il ​​trasporto e l'uso di Pozioni e Pergamene nello slot dell'arma secondaria +ModUi/&EnableVersatileAmmunitionSlots=Consenti il trasporto e l'utilizzo di Pozioni e Pergamene negli slot Munizioni +ModUi/&EnableVersatileOffHandSlot=Consenti il trasporto e l'uso di Pozioni e Pergamene nello slot dell'arma secondaria ModUi/&EnableWarlockMagicalCunningAtLevel2=Abilita Astuzia magica al livello 2 ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Abilita Astuzia magica al livello 2 e migliora Maestro eldritch al livello 20 ModUi/&EnableWarlockToLearnPatronAtLevel3=Abilita Patron al livello 3 invece che 1 diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 04777e5931..5199219e46 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -117,7 +117,7 @@ ModUi/&EnableCustomPortraits=カスタムポートレートPersonal または PreGen に配置します [例: Anton、Celia、Nialla など]\n• 透明レイヤー付きの 256 x 384 ピクセルの PNG 画像を使用します [最良の結果を得るには GIMP を使用します] ModUi/&EnableDungeonMakerModdedContent=Dungeon Maker Pro を有効にします\n[フラットな部屋、150x150 および 200x200 のダンジョン サイズ、あらゆる環境からの無駄のない混合アセットを含む] ModUi/&EnableElevationCameraToStayAtPosition=+ 戦闘中に高度カメラを有効にすると、無効になった後もその位置に留まり、範囲が 3 倍になります -ModUi/&EnableEpicPointsAndArray=壮大な 35 ポイント購入システムと配列を有効にします [17,15,13,​​12,10,8] [再起動が必要] +ModUi/&EnableEpicPointsAndArray=壮大な 35 ポイント購入システムと配列を有効にします [17,15,13,12,10,8] [再起動が必要] ModUi/&EnableExtendedProficienciesPanelDisplay=拡張熟練度パネルの表示を有効にする [アーケイン ショット、インフュージョン、マニューバ、および汎用性]\n[キャラクター検査時にパフォーマンスが低下します。自己責任で使用してください] ModUi/&EnableFeatsAtEvenLevels=レベル2、10、18で特技選択を有効にする ModUi/&EnableFeatsAtEvenLevelsMiddle=レベル6と14で特技選択を有効にする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 9388c3586e..90da8f6720 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -26,7 +26,7 @@ ModUi/&AllowDruidToWearMetalArmor=금속 갑옷 제한 ModUi/&AllowDungeonsMaxLevel20=최대 레벨 20인 던전 허용 ModUi/&AllowFlightSuspend=아이템과 주문의 비행을 일시적으로 중단할 수 있습니다. [야생형이나 비행 종족에는 영향을 미치지 않습니다.] ModUi/&AllowGadgetsAndPropsToBePlacedAnywhere=가젯이나 소품을 배치할 때 모든 검사를 우회하려면 CTRL 클릭을 활성화하세요. -ModUi/&AllowHasteCasting=서두름으로 인해 추가 액션이 있는 주문 시전이 허용됩니다. [라운드당 주요 액션 주문은 여전히 ​​1개로 제한됩니다.] +ModUi/&AllowHasteCasting=서두름으로 인해 추가 액션이 있는 주문 시전이 허용됩니다. [라운드당 주요 액션 주문은 여전히 1개로 제한됩니다.] ModUi/&AllowHornsOnAllRaces=모든 종족에 뿔 허용 [종족, 머리, 뿔에 따라 결과가 끔찍해 보일 수 있음] ModUi/&AllowMoreRealStateOnRestPanel=휴식 패널에서 더 많은 실제 상태 허용 [이전 패널에서 휴식 작업 숨기기 및 이후 패널에서 복구 기능 숨기기] ModUi/&AllowStackedMaterialComponent=중첩된 재료 구성요소 허용 [예: 2x500gp 다이아몬드는 1000gp 다이아몬드와 동일함] @@ -92,7 +92,7 @@ ModUi/&DontFollowMargin=+ 영웅이 화면 가장자리 밖에 ModUi/&DungeonMaker=던전메이커 ModUi/&DungeonMakerBasicHelp=• 이러한 설정은 플레이어가 이 모드를 설치하도록 요구하지 않습니다. ModUi/&Effects=효과 -ModUi/&EnableActionSwitching=동작 전환 막대 활성화 [동작 순서를 완벽하게 제어하는 ​​데 유용함] +ModUi/&EnableActionSwitching=동작 전환 막대 활성화 [동작 순서를 완벽하게 제어하는 데 유용함] ModUi/&EnableAdditionalBackstoryDisplay=배경 검사에서 추가 배경 스토리 표시 활성화 ModUi/&EnableAdditionalIconsOnLevelMap=레벨 맵에서 캠프, 출구 및 텔레포터에 대한 추가 아이콘 활성화 ModUi/&EnableAdditionalItemsInDungeonMaker=편집기에 수정된 항목 추가 @@ -176,7 +176,7 @@ ModUi/&EnableRogueStrSaving=교활한/사악한 일격에 ModUi/&EnableSecondWindToUseOneDndUsagesProgression=Second Wind를 활성화하여 5e 2024 사용 진행을 사용하세요. ModUi/&EnableSignatureSpellsRelearn=긴 휴식마다 특징 주문을 준비할 수 있게 합니다. [레벨 20에서 한 번만] ModUi/&EnableSorcererInnateSorceryAt1=1레벨에서 선천적 마법을 활성화합니다. -ModUi/&EnableSorcererMagicalGuidance=레벨 5에서 ​​마법의 안내를 활성화합니다. +ModUi/&EnableSorcererMagicalGuidance=레벨 5에서 마법의 안내를 활성화합니다. ModUi/&EnableSorcererQuickenedAction=빠른 주문 동작을 활성화하여 빠른 메타매직이 적용된 주요 동작 주문을 시전할 수 있습니다. ModUi/&EnableSorcerousRestorationAtLevel5=레벨 5에서 마법 회복을 활성화합니다. ModUi/&EnableSortingDungeonMakerAssets=Dungeon Maker 편집기에서 자산 정렬 활성화 diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 8ca65df78f..2c4679143a 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -67,8 +67,8 @@ ModUi/&DisableCastSpellPreRequisitesOnModFeats=Desabilitar pré-requisitos de co ModUi/&DisableClassPrerequisitesOnModFeats=Desabilitar pré-requisitos de nível em talentos ModUi/&DisableMultilineSpellOffering=Desabilitar oferta de magia multi-linha na barra de ação [principalmente para usuários de controle que usam heróis não multicaster] ModUi/&DisableRacePrerequisitesOnModFeats=Desabilitar pré-requisitos de corrida em talentos -ModUi/&DisableSenseDarkVisionFromAllRaces=Desabilitar Sense Dark Vision de todas as raças jogáveis ​​[Requer reinicialização] -ModUi/&DisableSenseSuperiorDarkVisionFromAllRaces=Desabilitar Sentido Superior de Visão no Escuro de todas as raças jogáveis ​​[Requer reinicialização] +ModUi/&DisableSenseDarkVisionFromAllRaces=Desabilitar Sense Dark Vision de todas as raças jogáveis [Requer reinicialização] +ModUi/&DisableSenseSuperiorDarkVisionFromAllRaces=Desabilitar Sentido Superior de Visão no Escuro de todas as raças jogáveis [Requer reinicialização] ModUi/&DisableUnofficialTranslations=Desabilite o suporte a traduções não oficiais para acelerar o mod [a menos que eu fale chinês, italiano, japonês, coreano ou espanhol] ModUi/&DisplayAllKnownSpellsDuringLevelUp=+ Exibe todas as magias conhecidas de outras classes durante o aumento de nível ModUi/&DisplayPactSlotsOnSpellSelectionPanel=+ Exibir espaços de pacto Warlock na seleção de magia em vez do painel de personagem @@ -187,9 +187,9 @@ ModUi/&EnableTeleportToRemoveRestrained=Habilitar Teletransporte< ModUi/&EnableTooltipDistance=Habilitar a exibição da distância nas dicas de ferramentas ao passar o mouse sobre um personagem em combate ModUi/&EnableUnarmedMainAttackAction=Habilitar a ação Ataque Desarmado [se o ator tiver uma arma principal, for um Monge ou tiver bandanas ou manoplas equipadas] ModUi/&EnableUpcastConjureElementalAndFey=Habilitar upcast de Conjure Elemental e Conjure Fey -ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posição variáveis ​​em descrições [usar {VARIABLE_NAME} como marcador de posição] -ModUi/&EnableVersatileAmmunitionSlots=Permitir que Poções e Pergaminhos sejam carregados e usados ​​nos slots de munição -ModUi/&EnableVersatileOffHandSlot=Permitir que Poções e Pergaminhos sejam carregados e usados ​​no slot de Arma Secundária +ModUi/&EnableVariablePlaceholdersOnTexts=Habilitar marcadores de posição variáveis em descrições [usar {VARIABLE_NAME} como marcador de posição] +ModUi/&EnableVersatileAmmunitionSlots=Permitir que Poções e Pergaminhos sejam carregados e usados nos slots de munição +ModUi/&EnableVersatileOffHandSlot=Permitir que Poções e Pergaminhos sejam carregados e usados no slot de Arma Secundária ModUi/&EnableWarlockMagicalCunningAtLevel2=Habilitar Astúcia Mágica no nível 2 ModUi/&EnableWarlockMagicalCunningAtLevel2AndImprovedEldritchMasterAt20=Habilite Astúcia Mágica no nível 2 e melhore Mestre Eldritch no nível 20 ModUi/&EnableWarlockToLearnPatronAtLevel3=Habilitar Patrono no nível 3 em vez de 1 @@ -269,7 +269,7 @@ ModUi/&OverridePartySize=Substituir o tamanho do grupo ModUi/&Patches=Correções: ModUi/&PortraitsOpenFolder=Abrir pasta de retratos ModUi/&PrimedItems=Itens preparados -ModUi/&QuickCastLightCantripOnWornItemsFirst=Habilite o lançamento rápido Light Cantrip para usar itens usados ​​na cabeça, pescoço ou tronco primeiro +ModUi/&QuickCastLightCantripOnWornItemsFirst=Habilite o lançamento rápido Light Cantrip para usar itens usados na cabeça, pescoço ou tronco primeiro ModUi/&RaceLightSensitivityApplyOutdoorsOnly=Habilite Sensibilidade à Luz em Darkelf, Dark Kobold e Gray Dwarf para serem acionados somente em ambientes externos\n[áreas internas em locais externos acessíveis sem uma tela de carregamento são consideradas externas pelo mecanismo do jogo] ModUi/&Races=Corridas ModUi/&RecipeCost=Custo da receita diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 2cdba7fa4d..0067bac58a 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -117,7 +117,7 @@ ModUi/&EnableCustomPortraits=启用自定义肖像 ModUi/&EnableCustomPortraitsHelp=• 将自定义肖像放在子文件夹 PersonalPreGen 下,并以英雄名字命名[例如:Anton、Celia、Nialla 等]\n• 使用 PNG 图像,大小为 256 x 384 像素,带有透明层[使用 GIMP 可获得最佳效果] ModUi/&EnableDungeonMakerModdedContent=启用 Dungeon Maker Pro\n[包括平面房间、150x150 和 200x200 地牢大小,以及来自所有环境的简洁混合资产] ModUi/&EnableElevationCameraToStayAtPosition=+ 战斗中启用仰角相机,禁用后可保持在原位,且范围增加三倍 -ModUi/&EnableEpicPointsAndArray=启用史诗 35 点购买系统和阵列 [17,15,13,​​12,10,8] [需要重启] +ModUi/&EnableEpicPointsAndArray=启用史诗 35 点购买系统和阵列 [17,15,13,12,10,8] [需要重启] ModUi/&EnableExtendedProficienciesPanelDisplay=启用扩展熟练度面板显示[奥术射击、灌注、操控和多功能性]\n[角色检查时性能受到影响。使用风险自负] ModUi/&EnableFeatsAtEvenLevels=在 2、10 和 18 级启用专长选择 ModUi/&EnableFeatsAtEvenLevelsMiddle=在 6 级和 14 级时启用专长选择 From 002e47039d1e25a694086dea2353eb1f8d3d7672 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Sun, 17 Nov 2024 20:17:11 -0800 Subject: [PATCH 35/44] minor tweaks --- SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs | 2 ++ SolastaUnfinishedBusiness/Subclasses/DomainDefiler.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/DomainNature.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs | 3 ++- SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs | 2 +- .../Subclasses/InnovationArtillerist.cs | 3 +++ .../Subclasses/InnovationVivisectionist.cs | 4 ++-- SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs | 5 +++-- SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs | 3 +++ SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs | 1 + SolastaUnfinishedBusiness/Subclasses/PathOfTheRavager.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs | 1 + SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs | 1 + SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs | 2 ++ SolastaUnfinishedBusiness/Subclasses/RangerArcanist.cs | 3 +-- SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs | 1 + .../Subclasses/RoguishArcaneScoundrel.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/RoguishBladeCaller.cs | 2 ++ SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs | 3 +-- SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs | 2 +- SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs | 1 + SolastaUnfinishedBusiness/Subclasses/SorcerousSorrAkkath.cs | 3 +-- 24 files changed, 35 insertions(+), 19 deletions(-) diff --git a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs index 969aadd437..45c6268a2e 100644 --- a/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs +++ b/SolastaUnfinishedBusiness/Subclasses/CircleOfTheCosmos.cs @@ -346,6 +346,7 @@ private static FeatureDefinitionPowerSharedPool BuildArcher( .SetCasterEffectParameters(PowerOathOfTirmarGoldenSpeech) .SetImpactEffectParameters(Sunbeam) .Build()) + // required as added through a condition .AddCustomSubFeatures(ClassHolder.Druid) .AddToDB(); @@ -446,6 +447,7 @@ private static FeatureDefinitionPowerSharedPool BuildChalice( .Build()) .SetParticleEffectParameters(CureWounds) .Build()) + // required as added through a condition .AddCustomSubFeatures(ClassHolder.Druid) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainDefiler.cs b/SolastaUnfinishedBusiness/Subclasses/DomainDefiler.cs index 4375b76f5a..f0d5e9669f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainDefiler.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainDefiler.cs @@ -135,7 +135,7 @@ public DomainDefiler() .SetFrequencyLimit(FeatureLimitedUsage.OnceInMyTurn) .SetAttackModeOnly() .AddConditionOperation(ConditionOperationDescription.ConditionOperation.Add, conditionInsidiousDeathMagic) - .AddCustomSubFeatures(ClassHolder.Cleric) + //.AddCustomSubFeatures(ClassHolder.Cleric) .AddToDB(); // LEVEL 14 diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs index 0c2ae8d42d..bdb409da2f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainNature.cs @@ -193,7 +193,7 @@ public DomainNature() .SetFrequencyLimit(FeatureLimitedUsage.OnceInMyTurn) .SetAttackModeOnly() .SetImpactParticleReference(ConeOfCold) - .AddCustomSubFeatures(ClassHolder.Cleric) + //.AddCustomSubFeatures(ClassHolder.Cleric) .AddToDB(); // LEVEL 17 - Master of Nature diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs b/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs index 335dfadef6..2b08b8c2d7 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainSmith.cs @@ -277,7 +277,7 @@ public DomainSmith() .SetFrequencyLimit(FeatureLimitedUsage.OnceInMyTurn) .SetAttackModeOnly() .SetImpactParticleReference(FireBolt) - .AddCustomSubFeatures(ClassHolder.Cleric) + //.AddCustomSubFeatures(ClassHolder.Cleric) .AddToDB(); // LEVEL 17 diff --git a/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs b/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs index 285c7984cc..6f674a3853 100644 --- a/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs +++ b/SolastaUnfinishedBusiness/Subclasses/DomainTempest.cs @@ -103,6 +103,7 @@ public DomainTempest() .Build()) .SetImpactEffectParameters(LightningBolt) .Build()) + // required as in a feature set .AddCustomSubFeatures(ClassHolder.Cleric, ModifyPowerVisibility.Hidden) .AddToDB(); @@ -199,7 +200,7 @@ public DomainTempest() .SetFrequencyLimit(FeatureLimitedUsage.OnceInMyTurn) .SetAttackModeOnly() .SetImpactParticleReference(Shatter) - .AddCustomSubFeatures(ClassHolder.Cleric) + //.AddCustomSubFeatures(ClassHolder.Cleric) .AddToDB(); // LEVEL 17 - Stormborn diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs index 2b7d0f9271..b5f1e2125f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationArmor.cs @@ -174,6 +174,7 @@ private static FeatureDefinitionFeatureSet BuildArmorModes() Sprites.GetSprite("PowerDefensiveField", Resources.PowerDefensiveField, 256, 128)) .AddCustomSubFeatures( new ValidatorsValidatePowerUse(InGuardianMode), + // required as in a feature set ClassHolder.Inventor, RestrictRecurrentEffectsOnSelfTurnOnly.Mark) .SetUsesProficiencyBonus(ActivationTime.BonusAction) @@ -190,7 +191,6 @@ private static FeatureDefinitionFeatureSet BuildArmorModes() EffectForm.LevelApplianceType.MultiplyBonus, LevelSourceType.ClassLevel) .Build()) .Build()) - .AddCustomSubFeatures(ClassHolder.Inventor) .AddToDB(); return FeatureDefinitionFeatureSetBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs index 34153a3932..46247bb33c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationArtillerist.cs @@ -108,6 +108,7 @@ public InnovationArtillerist() .Build()) .Build()) .DelegatedToAction() + // required as added through condition .AddCustomSubFeatures(ClassHolder.Inventor) .AddToDB(); @@ -135,6 +136,7 @@ public InnovationArtillerist() .Build()) .Build()) .DelegatedToAction() + // required as added through condition .AddCustomSubFeatures(ClassHolder.Inventor) .AddToDB(); @@ -510,6 +512,7 @@ public InnovationArtillerist() .SetDamageDice(DieType.D8, 1) .SetAdvancement(AdditionalDamageAdvancement.ClassLevel, 1, 1, 10, 5) .SetTriggerCondition(AdditionalDamageTriggerCondition.SpellDamagesTarget) + // required as in a feature set .AddCustomSubFeatures(ClassHolder.Inventor) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/InnovationVivisectionist.cs b/SolastaUnfinishedBusiness/Subclasses/InnovationVivisectionist.cs index 83aaf622fb..2f6652f51c 100644 --- a/SolastaUnfinishedBusiness/Subclasses/InnovationVivisectionist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/InnovationVivisectionist.cs @@ -57,7 +57,7 @@ public InnovationVivisectionist() .SetTriggerCondition(AdditionalDamageTriggerCondition.AdvantageOrNearbyAlly) .SetFrequencyLimit(FeatureLimitedUsage.OncePerTurn) .SetAttackModeOnly() - .AddCustomSubFeatures(ClassHolder.Inventor) + //.AddCustomSubFeatures(ClassHolder.Inventor) .AddToDB(); // Emergency Surgery @@ -84,7 +84,7 @@ public InnovationVivisectionist() .SetImpactEffectParameters(PowerTraditionOpenHandWholenessOfBody .EffectDescription.EffectParticleParameters.effectParticleReference) .Build()) - .AddCustomSubFeatures(ClassHolder.Inventor) + //.AddCustomSubFeatures(ClassHolder.Inventor) .AddToDB(); // LEVEL 05 diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs index 21341ddb97..4e46aaa721 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfDemonHunter.cs @@ -72,7 +72,7 @@ public OathOfDemonHunter() .SetSpecificDamageType(DamageTypeRadiant) .SetImpactParticleReference( FeatureDefinitionAdditionalDamages.AdditionalDamageBrandingSmite.impactParticleReference) - .AddCustomSubFeatures(ClassHolder.Paladin) + //.AddCustomSubFeatures(ClassHolder.Paladin) .AddToDB(); var powerTrialMark = FeatureDefinitionPowerBuilder diff --git a/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs b/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs index aaf2a2fdc0..87855dfbca 100644 --- a/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs +++ b/SolastaUnfinishedBusiness/Subclasses/OathOfThunder.cs @@ -93,7 +93,7 @@ public OathOfThunder() .SetMotionForm(MotionForm.MotionType.PushFromOrigin, 6) .Build()) .Build()) - .AddCustomSubFeatures(ClassHolder.Paladin) + //.AddCustomSubFeatures(ClassHolder.Paladin) .AddToDB(); powerThunderousRebuke.AddCustomSubFeatures( @@ -140,7 +140,7 @@ public OathOfThunder() .SetConditionForm(conditionDivineBolt, ConditionForm.ConditionOperation.Add) .Build()) .Build()) - .AddCustomSubFeatures(ClassHolder.Paladin) + //.AddCustomSubFeatures(ClassHolder.Paladin) .AddToDB(); // LEVEL 07 @@ -161,6 +161,7 @@ public OathOfThunder() .SetAdvancement(AdditionalDamageAdvancement.ClassLevel, 1, 1, 8, 7) .SetImpactParticleReference(Shatter) .SetFrequencyLimit(FeatureLimitedUsage.OncePerTurn) + // required as in a feature set .AddCustomSubFeatures(ClassHolder.Paladin) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs index 7d7741ea16..1d4448ddff 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheElements.cs @@ -261,6 +261,7 @@ public PathOfTheElements() .SetParticleEffectParameters(PowerDomainElementalLightningBlade) .Build()) .AddCustomSubFeatures( + // required as added through condition ClassHolder.Barbarian, new ValidatorsValidatePowerUse(ValidatorsCharacter.HasAnyOfConditions(ConditionRaging))) .AddToDB(); @@ -298,6 +299,7 @@ public PathOfTheElements() .SetEffectEffectParameters(PowerDomainElementalIceLance) .Build()) .AddCustomSubFeatures( + // required as added through condition ClassHolder.Barbarian, new ValidatorsValidatePowerUse(ValidatorsCharacter.HasAnyOfConditions(ConditionRaging))) .AddToDB(); @@ -337,6 +339,7 @@ public PathOfTheElements() .SetEffectEffectParameters(PowerDomainElementalFireBurst) .Build()) .AddCustomSubFeatures( + // required as added through condition ClassHolder.Barbarian, new ValidatorsValidatePowerUse(ValidatorsCharacter.HasAnyOfConditions(ConditionRaging))) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs index b0e31cac06..6b17f140c3 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheLight.cs @@ -89,6 +89,7 @@ public PathOfTheLight() ConditionOperationDescription.ConditionOperation.Add, conditionPathOfTheLightIlluminated) .SetAddLightSource(true) .SetLightSourceForm(lightSourceForm) + // required as added through condition .AddCustomSubFeatures(ClassHolder.Barbarian) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheRavager.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheRavager.cs index d0c940183f..543c83feda 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheRavager.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheRavager.cs @@ -37,7 +37,7 @@ public PathOfTheRavager() .SetFrequencyLimit(FeatureLimitedUsage.OnceInMyTurn) .SetRequiredProperty(RestrictedContextRequiredProperty.Weapon) .AddCustomSubFeatures( - ClassHolder.Barbarian, + // ClassHolder.Barbarian, new ValidateContextInsteadOfRestrictedProperty((_, _, character, _, _, mode, _) => ( OperationType.Set, mode is { AbilityScore: AttributeDefinitions.Strength } && diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs index 5310c68df1..024f07eb85 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheWildMagic.cs @@ -402,6 +402,7 @@ private static WildSurgeEffect BuildWildSurgeSummon() .SetGuiPresentation(Category.Feature, SpellDefinitions.DelayedBlastFireball) .SetUsesFixed(ActivationTime.NoCost, RechargeRate.TurnStart) .SetEffectDescription(effectDescriptionBlast) + // required as added through condition .AddCustomSubFeatures(ClassHolder.Barbarian) .DelegatedToAction() .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs b/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs index 14ae6c49ed..dc82df268d 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PathOfTheYeoman.cs @@ -42,6 +42,7 @@ public PathOfTheYeoman() .SetNotificationTag("Rage") .SetAdvancement(AdditionalDamageAdvancement.ClassLevel) .SetDamageValueDetermination(AdditionalDamageValueDetermination.RageDamage) + // required as added through condition .AddCustomSubFeatures(ClassHolder.Barbarian) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs b/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs index 290f0db6b5..48518c5381 100644 --- a/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs +++ b/SolastaUnfinishedBusiness/Subclasses/PatronMoonlitScion.cs @@ -107,6 +107,7 @@ public PatronMoonlitScion() .SetParticleEffectParameters(FeatureDefinitionPowers.PowerTraditionLightBlindingFlash) .SetEffectEffectParameters(new AssetReference()) .Build()) + // required as added through condition .AddCustomSubFeatures(ClassHolder.Warlock) .AddToDB(); @@ -206,6 +207,7 @@ public PatronMoonlitScion() EffectFormBuilder.ConditionForm(conditionLunarChillEnemy)) .SetParticleEffectParameters(FeatureDefinitionPowers.PowerDomainElementalIceLance) .Build()) + // required as added through condition .AddCustomSubFeatures(ClassHolder.Warlock) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerArcanist.cs b/SolastaUnfinishedBusiness/Subclasses/RangerArcanist.cs index 261937179c..362ff3f0d4 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerArcanist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerArcanist.cs @@ -1,5 +1,4 @@ using JetBrains.Annotations; -using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; @@ -71,7 +70,7 @@ public RangerArcanist() AdditionalDamageTriggerCondition.TargetHasConditionCreatedByMe) .AddConditionOperation(ConditionOperationDescription.ConditionOperation.Remove, conditionMarkedByArcanist) .SetImpactParticleReference(MagicMissile.EffectDescription.EffectParticleParameters.impactParticleReference) - .AddCustomSubFeatures(ClassHolder.Ranger) + //.AddCustomSubFeatures(ClassHolder.Ranger) .AddToDB(); // diff --git a/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs b/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs index 59430df922..5c768a4f8b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RangerHellWalker.cs @@ -67,6 +67,7 @@ public RangerHellWalker() .Build()) .SetParticleEffectParameters(SpellsContext.EnduringSting) .Build()) + // required as in a feature set .AddCustomSubFeatures(ClassHolder.Ranger) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs index 67aae5f3d8..66e68f460a 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishArcaneScoundrel.cs @@ -136,7 +136,7 @@ public RoguishArcaneScoundrel() .AddToDB(); powerArcaneBacklashSneakDamage.AddCustomSubFeatures( - ClassHolder.Rogue, + // ClassHolder.Rogue, ModifyPowerVisibility.Hidden, new MagicEffectFinishedByMeArcaneBackslash( powerArcaneBacklashSneakDamage, powerArcaneBackslashCounterSpell)); diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishBladeCaller.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishBladeCaller.cs index 62a3b61bb9..9f645259e4 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishBladeCaller.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishBladeCaller.cs @@ -56,6 +56,7 @@ public RoguishBladeCaller() .SetAdvancement(AdditionalDamageAdvancement.ClassLevel, 1, 1, 2) .SetRequiredProperty(RestrictedContextRequiredProperty.Weapon) .AddCustomSubFeatures( + // required as in a feature set ClassHolder.Rogue, new ValidateContextInsteadOfRestrictedProperty( (_, _, character, _, _, mode, _) => @@ -99,6 +100,7 @@ public RoguishBladeCaller() EffectFormBuilder.ConditionForm(conditionBladeMark)) .SetParticleEffectParameters(SpellDefinitions.ShadowDagger) .Build()) + // required as in a feature set .AddCustomSubFeatures(ClassHolder.Rogue) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs index d5492e2adc..964eb5ee55 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishDuelist.cs @@ -4,7 +4,6 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; -using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; using SolastaUnfinishedBusiness.CustomUI; @@ -47,7 +46,7 @@ public RoguishDuelist() .SetRequiredProperty(RestrictedContextRequiredProperty.FinesseOrRangeWeapon) .SetFrequencyLimit(FeatureLimitedUsage.OncePerTurn) .AddConditionOperation(ConditionOperationDescription.ConditionOperation.Add, conditionDaringDuel) - .AddCustomSubFeatures(ClassHolder.Rogue) + //.AddCustomSubFeatures(ClassHolder.Rogue) .AddToDB(); // Riposte diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs index 78dcce780b..94a2059cae 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishRavenScion.cs @@ -59,7 +59,7 @@ public RoguishRavenScion() .SetAdvancement(AdditionalDamageAdvancement.ClassLevel) .SetRequiredProperty(RestrictedContextRequiredProperty.Weapon) .AddCustomSubFeatures( - ClassHolder.Rogue, + // ClassHolder.Rogue, new ValidateContextInsteadOfRestrictedProperty( (_, _, _, _, _, mode, _) => (OperationType.Set, ValidatorsWeapon.IsTwoHandedRanged(mode)))) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs b/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs index 580cb1c6ee..4f2b88673b 100644 --- a/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs +++ b/SolastaUnfinishedBusiness/Subclasses/RoguishUmbralStalker.cs @@ -50,6 +50,7 @@ public RoguishUmbralStalker() .SetTriggerCondition(ExtraAdditionalDamageTriggerCondition.SourceOrTargetAreNotBright) .SetRequiredProperty(RestrictedContextRequiredProperty.FinesseOrRangeWeapon) .SetFrequencyLimit(FeatureLimitedUsage.OncePerTurn) + // required as in a feature set .AddCustomSubFeatures(ClassHolder.Rogue) .AddToDB(); diff --git a/SolastaUnfinishedBusiness/Subclasses/SorcerousSorrAkkath.cs b/SolastaUnfinishedBusiness/Subclasses/SorcerousSorrAkkath.cs index 7df0d4a97a..bfd9b7114f 100644 --- a/SolastaUnfinishedBusiness/Subclasses/SorcerousSorrAkkath.cs +++ b/SolastaUnfinishedBusiness/Subclasses/SorcerousSorrAkkath.cs @@ -1,6 +1,5 @@ using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.GameExtensions; -using SolastaUnfinishedBusiness.Behaviors; using SolastaUnfinishedBusiness.Behaviors.Specific; using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Builders.Features; @@ -77,7 +76,7 @@ public SorcerousSorrAkkath() .SetTriggerCondition(AdditionalDamageTriggerCondition.AdvantageOrNearbyAlly) .SetFrequencyLimit(FeatureLimitedUsage.OncePerTurn) .SetSavingThrowData(EffectDifficultyClassComputation.SpellCastingFeature, EffectSavingThrowType.None) - .AddCustomSubFeatures(ClassHolder.Sorcerer) + //.AddCustomSubFeatures(ClassHolder.Sorcerer) .AddToDB(); // LEVEL 06 From 9be0730640ebf570acf57a665c885367e00d4932 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 18 Nov 2024 09:51:46 -0800 Subject: [PATCH 36/44] update translations --- SolastaUnfinishedBusiness/Translations/de/Others-de.txt | 4 +++- SolastaUnfinishedBusiness/Translations/en/Others-en.txt | 4 +++- SolastaUnfinishedBusiness/Translations/es/Others-es.txt | 4 +++- SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt | 4 +++- SolastaUnfinishedBusiness/Translations/it/Others-it.txt | 4 +++- SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt | 4 +++- SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt | 4 +++- SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt | 4 +++- SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt | 4 +++- SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt | 4 +++- 10 files changed, 30 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt index 0095c3e597..5f084e5693 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Others-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Others-de.txt @@ -297,6 +297,7 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Automatischer Wutstart Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Automatische Kreatur auf null HP reduziert Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Automatischer Schleichangriff Rules/&ConditionOneDndBarkskinDescription=Die Rüstungsklasse der Kreatur beträgt mindestens 17. +Rules/&ConditionStoneskinExtendedDescription=Widerstandsfähig gegen Schlag-, Schnitt- und Stichschäden. Rules/&CounterFormDismissCreatureFormat=Entlässt eine gewünschte heraufbeschworene Kreatur Rules/&MotionFormPullOnTop=Ziehen Sie es oben an Rules/&MotionFormPushDownFormat=Drücken Sie {0} nach unten @@ -341,7 +342,8 @@ Screen/&SpellSlotsUsedShortLongDescription=Sie haben auf dieser Ebene {0} Paktma Screen/&SubclassClassExtraSpellDescriptionFormat=Du kennst diesen Zauber aus der Unterklasse {0}. Screen/&SwitchConfigurationDescription=Wechseln Sie bei Ihren ausgerüsteten Gegenständen zu dieser Konfiguration: {0}.\nHalten Sie die STRG-Taste gedrückt, um die andere Hand möglichst beizubehalten. Spell/&ConjureElementalInvisibleStalkerTitle=Elementar beschwören [Unsichtbarer Pirscher] -Spell/&TrueStrike2024Description=Geleitet von einem Geistesblitz führen Sie einen Angriff mit der Waffe aus, die Sie beim Wirken des Zaubers verwendet haben. Der Angriff nutzt Ihre Zauberfähigkeit statt Stärke oder Geschicklichkeit und verursacht Strahlungsschaden statt des Schadens der Basiswaffe. Der Angriff verursacht außerdem zusätzlichen Strahlungsschaden, wenn Sie die Stufen 5 (1W6), 11 (2W6) und 17 (3W6) erreichen. +Spell/&StoneskinExtendedDescription=Verleiht Widerstand gegen Schlag-, Schnitt- und Stichschäden. +Spell/&TrueStrike2024Description=Geleitet von einem Geistesblitz führst du einen Angriff mit der Waffe aus, die du beim Wirken des Zaubers benutzt hast. Der Angriff nutzt entweder deine Zauberfähigkeit für die Angriffs- und Schadenswürfe oder Stärke oder Geschicklichkeit, je nachdem, was höher ist. Wenn der Angriff trifft, verursacht er Strahlungsschaden statt des normalen Schadenstyps der Waffe. Der Angriff verursacht zusätzlichen Strahlungsschaden, wenn du die Stufen 5 (1W6), 11 (2W6) und 17 (3W6) erreichst. Stage/&IdentityMorphotypeEyeHeader=Augenstil Tag/&PrimalOrderCantripSpecialTagTitle=Zauberspruch der Urordnung ToolTip/&CheckBoxDefaultPartyTitle=Aktivieren Sie dieses Kontrollkästchen, um Ihre Standardgruppe festzulegen, wenn Sie neue Abenteuer beginnen oder benutzerdefinierte Orte testen. Sie können bis zu {0} Helden nach dem First-In/First-Out-Prinzip auswählen. diff --git a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt index 53fd36d161..09f18a6db0 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Others-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Others-en.txt @@ -297,6 +297,7 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Auto Rage Start Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Auto Creature Reduced to Zero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Auto Sneak Attack Rules/&ConditionOneDndBarkskinDescription=The creature's Armor Class becomes at least 17. +Rules/&ConditionStoneskinExtendedDescription=Resistance to bludgeoning, slashing, and piercing damage. Rules/&CounterFormDismissCreatureFormat=Dismisses a target conjured creature Rules/&MotionFormPullOnTop=Pull on top Rules/&MotionFormPushDownFormat=Push down {0} @@ -341,7 +342,8 @@ Screen/&SpellSlotsUsedShortLongDescription=You have expended {0} pact magic slot Screen/&SubclassClassExtraSpellDescriptionFormat=You know this spell from {0} subclass. Screen/&SwitchConfigurationDescription=Switch your equipped items to this configuration: {0}.\nHold CTRL to keep off-hand if possible. Spell/&ConjureElementalInvisibleStalkerTitle=Conjure Elemental [Invisible Stalker] -Spell/&TrueStrike2024Description=Guided by a flash of magical insight, you make one attack with the weapon used in the spell's casting. The attack uses your spellcasting ability instead of using Strength or Dexterity, and deals radiant damage instead of the base weapon one. The attack also deals extra Radiant damage when you reach levels 5 (1d6), 11 (2d6), and 17 (3d6). +Spell/&StoneskinExtendedDescription=Grants resistance to bludgeoning, slashing, and piercing damage. +Spell/&TrueStrike2024Description=Guided by a flash of magical insight, you make one attack with the weapon used in the spell's casting. The attack uses either your spellcasting ability for the attack and damage rolls or Strength or Dexterity, whichever is higher. If the attack hits, it deals Radiant damage instead of the weapon's normal damage type. The attack deals extra Radiant damage when you reach levels 5 (1d6), 11 (2d6), and 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Eye Style Tag/&PrimalOrderCantripSpecialTagTitle=Primal Order Cantrip ToolTip/&CheckBoxDefaultPartyTitle=Check this box to set your default party when starting new adventures or testing custom locations. You can select up to {0} heroes in a first-in / first-out basis diff --git a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt index a28e787366..6d0ec6ea64 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Others-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Others-es.txt @@ -297,6 +297,7 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Inicio de furia automática Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Criatura automática reducida a cero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Ataque furtivo automático Rules/&ConditionOneDndBarkskinDescription=La clase de armadura de la criatura pasa a ser al menos 17. +Rules/&ConditionStoneskinExtendedDescription=Resistencia a daños contundentes, cortantes y perforantes. Rules/&CounterFormDismissCreatureFormat=Despierta a una criatura conjurada objetivo. Rules/&MotionFormPullOnTop=Tirar de la parte superior Rules/&MotionFormPushDownFormat=Empuja hacia abajo {0} @@ -341,7 +342,8 @@ Screen/&SpellSlotsUsedShortLongDescription=Has gastado {0} espacio(s) de magia d Screen/&SubclassClassExtraSpellDescriptionFormat=Conoces este hechizo de la subclase {0}. Screen/&SwitchConfigurationDescription=Cambia los objetos equipados a esta configuración: {0}.\nMantén presionada la tecla CTRL para mantener la mano izquierda si es posible. Spell/&ConjureElementalInvisibleStalkerTitle=Conjurar elemental [Acosador invisible] -Spell/&TrueStrike2024Description=Guiado por un destello de perspicacia mágica, realizas un ataque con el arma utilizada para lanzar el hechizo. El ataque utiliza tu capacidad de lanzamiento de hechizos en lugar de usar Fuerza o Destreza, e inflige daño radiante en lugar del daño del arma base. El ataque también inflige daño radiante adicional cuando alcanzas los niveles 5 (1d6), 11 (2d6) y 17 (3d6). +Spell/&StoneskinExtendedDescription=Otorga resistencia al daño contundente, cortante y perforante. +Spell/&TrueStrike2024Description=Guiado por un destello de perspicacia mágica, realizas un ataque con el arma utilizada en el lanzamiento del conjuro. El ataque utiliza tu capacidad de lanzamiento de conjuros para las tiradas de ataque y daño o Fuerza o Destreza, la que sea mayor. Si el ataque impacta, inflige daño radiante en lugar del tipo de daño normal del arma. El ataque inflige daño radiante adicional cuando alcanzas los niveles 5 (1d6), 11 (2d6) y 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Estilo de ojos Tag/&PrimalOrderCantripSpecialTagTitle=Truco de la Orden Primordial ToolTip/&CheckBoxDefaultPartyTitle=Marca esta casilla para configurar tu grupo predeterminado al iniciar nuevas aventuras o probar ubicaciones personalizadas. Puedes seleccionar hasta {0} héroes por orden de llegada diff --git a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt index fa665f1c58..88190f4f8a 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Others-fr.txt @@ -297,6 +297,7 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Démarrage automatique de la rage Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Créature automatique réduite à zéro PV Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Attaque furtive automatique Rules/&ConditionOneDndBarkskinDescription=La classe d'armure de la créature devient au moins 17. +Rules/&ConditionStoneskinExtendedDescription=Résistance aux dégâts contondants, tranchants et perforants. Rules/&CounterFormDismissCreatureFormat=Renvoie une créature invoquée ciblée Rules/&MotionFormPullOnTop=Tirer sur le dessus Rules/&MotionFormPushDownFormat=Appuyez sur {0} @@ -341,7 +342,8 @@ Screen/&SpellSlotsUsedShortLongDescription=Vous avez dépensé {0} emplacement(s Screen/&SubclassClassExtraSpellDescriptionFormat=Vous connaissez ce sort de la sous-classe {0}. Screen/&SwitchConfigurationDescription=Changez vos objets équipés selon cette configuration : {0}.\nMaintenez la touche CTRL enfoncée pour garder la main secondaire si possible. Spell/&ConjureElementalInvisibleStalkerTitle=Invocation d'élémentaire [Invisible Stalker] -Spell/&TrueStrike2024Description=Guidé par un éclair de perspicacité magique, vous effectuez une attaque avec l'arme utilisée pour lancer le sort. L'attaque utilise votre capacité de lancer de sorts au lieu d'utiliser la Force ou la Dextérité, et inflige des dégâts radiants au lieu de ceux de l'arme de base. L'attaque inflige également des dégâts radiants supplémentaires lorsque vous atteignez les niveaux 5 (1d6), 11 (2d6) et 17 (3d6). +Spell/&StoneskinExtendedDescription=Accorde une résistance aux dégâts contondants, tranchants et perforants. +Spell/&TrueStrike2024Description=Guidé par un éclair de perspicacité magique, vous effectuez une attaque avec l'arme utilisée pour lancer le sort. L'attaque utilise soit votre capacité de lancer de sorts pour les jets d'attaque et de dégâts, soit votre Force ou votre Dextérité, selon la valeur la plus élevée. Si l'attaque touche, elle inflige des dégâts radiants au lieu du type de dégâts normal de l'arme. L'attaque inflige des dégâts radiants supplémentaires lorsque vous atteignez les niveaux 5 (1d6), 11 (2d6) et 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Style des yeux Tag/&PrimalOrderCantripSpecialTagTitle=Sort de l'Ordre Primaire ToolTip/&CheckBoxDefaultPartyTitle=Cochez cette case pour définir votre groupe par défaut lorsque vous démarrez de nouvelles aventures ou testez des emplacements personnalisés. Vous pouvez sélectionner jusqu'à {0} héros selon le principe du premier entré/premier sorti diff --git a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt index 1deb22fb20..ad3cb2bafb 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Others-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Others-it.txt @@ -297,6 +297,7 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Avvio automatico della rabbia Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Creatura automatica ridotta a zero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Attacco furtivo automatico Rules/&ConditionOneDndBarkskinDescription=La Classe Armatura della creatura diventa almeno 17. +Rules/&ConditionStoneskinExtendedDescription=Resistenza ai danni contundenti, taglienti e perforanti. Rules/&CounterFormDismissCreatureFormat=Congeda una creatura bersaglio evocata Rules/&MotionFormPullOnTop=Tirare in alto Rules/&MotionFormPushDownFormat=Spingere verso il basso {0} @@ -341,7 +342,8 @@ Screen/&SpellSlotsUsedShortLongDescription=Hai speso {0} slot magia patto e {1} Screen/&SubclassClassExtraSpellDescriptionFormat=Conosci questo incantesimo della sottoclasse {0}. Screen/&SwitchConfigurationDescription=Sostituisci gli oggetti equipaggiati con questa configurazione: {0}.\nSe possibile, tieni premuto CTRL per tenerli nella mano secondaria. Spell/&ConjureElementalInvisibleStalkerTitle=Evoca Elementale [Invisibile Stalker] -Spell/&TrueStrike2024Description=Guidato da un lampo di intuizione magica, esegui un attacco con l'arma usata per lanciare l'incantesimo. L'attacco usa la tua capacità di lanciare incantesimi invece di usare Forza o Destrezza e infligge danni radianti invece di quelli dell'arma base. L'attacco infligge anche danni radianti extra quando raggiungi i livelli 5 (1d6), 11 (2d6) e 17 (3d6). +Spell/&StoneskinExtendedDescription=Conferisce resistenza ai danni contundenti, taglienti e perforanti. +Spell/&TrueStrike2024Description=Guidato da un lampo di intuizione magica, esegui un attacco con l'arma usata per lanciare l'incantesimo. L'attacco usa la tua capacità di lanciare incantesimi per i tiri di attacco e danno o Forza o Destrezza, a seconda di quale sia più alto. Se l'attacco colpisce, infligge danni Radianti invece del normale tipo di danno dell'arma. L'attacco infligge danni Radianti extra quando raggiungi i livelli 5 (1d6), 11 (2d6) e 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Stile degli occhi Tag/&PrimalOrderCantripSpecialTagTitle=Trucchetto dell'Ordine Primordiale ToolTip/&CheckBoxDefaultPartyTitle=Seleziona questa casella per impostare il tuo gruppo predefinito quando inizi nuove avventure o quando provi luoghi personalizzati. Puoi selezionare fino a {0} eroi in base al primo arrivato/primo uscito diff --git a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt index 27eebe757a..e8e2fb5cfd 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Others-ja.txt @@ -297,6 +297,7 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=オートレイジスタート Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=自動クリーチャーのHPがゼロに減少 Rules/&ActivationTypeOnSneakAttackHitAutoTitle=オートスニークアタック Rules/&ConditionOneDndBarkskinDescription=クリーチャーのアーマー クラスは少なくとも 17 になります。 +Rules/&ConditionStoneskinExtendedDescription=殴打、斬撃、刺突によるダメージに対する耐性。 Rules/&CounterFormDismissCreatureFormat=対象の召喚されたクリーチャーを退ける Rules/&MotionFormPullOnTop=上に引っ張る Rules/&MotionFormPushDownFormat={0}を押し下げる @@ -341,7 +342,8 @@ Screen/&SpellSlotsUsedShortLongDescription=このレベルで、{0} 個の契約 Screen/&SubclassClassExtraSpellDescriptionFormat=あなたはこの呪文を{0}サブクラスから知っています。 Screen/&SwitchConfigurationDescription=装備しているアイテムを次の構成に切り替えます: {0}。\nCTRL キーを押したままにして、可能であれば手を離してください。 Spell/&ConjureElementalInvisibleStalkerTitle=コンジュア・エレメンタル [インビジブル・ストーカー] -Spell/&TrueStrike2024Description=魔法の洞察力のひらめきに導かれて、呪文を唱える際に使用した武器で 1 回の攻撃を行います。攻撃では、筋力や敏捷性の代わりに呪文発動能力を使用し、基本武器のダメージの代わりに光輝ダメージを与えます。また、レベル 5 (1d6)、11 (2d6)、および 17 (3d6) に達すると、攻撃は追加の光輝ダメージを与えます。 +Spell/&StoneskinExtendedDescription=殴打、斬撃、刺突ダメージに対する耐性を付与します。 +Spell/&TrueStrike2024Description=魔法の洞察力のひらめきに導かれて、呪文を唱える際に使用した武器で 1 回の攻撃を行います。攻撃では、攻撃とダメージ ロールに呪文発動能力を使用するか、または [筋力] と [敏捷性] のうち、いずれか高い方を使用します。攻撃が命中した場合、武器の通常のダメージ タイプではなく、光輝ダメージを与えます。レベル 5 (1d6)、11 (2d6)、および 17 (3d6) に達すると、攻撃は追加の光輝ダメージを与えます。 Stage/&IdentityMorphotypeEyeHeader=アイスタイル Tag/&PrimalOrderCantripSpecialTagTitle=原始秩序の呪文 ToolTip/&CheckBoxDefaultPartyTitle=新しい冒険を開始するとき、またはカスタムの場所をテストするときにデフォルトのパーティーを設定するには、このボックスをチェックします。先入れ先出し方式で最大 {0} 人のヒーローを選択できます diff --git a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt index b79c1b3ad4..97b176536f 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Others-ko.txt @@ -297,6 +297,7 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=자동 분노 시작 Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=자동 생명체의 HP가 0으로 감소했습니다. Rules/&ActivationTypeOnSneakAttackHitAutoTitle=자동 몰래 공격 Rules/&ConditionOneDndBarkskinDescription=해당 생물의 방어력이 최소 17이 됩니다. +Rules/&ConditionStoneskinExtendedDescription=둔기, 베기, 찌르기 피해에 대한 저항력. Rules/&CounterFormDismissCreatureFormat=소환된 대상 생물을 해제합니다. Rules/&MotionFormPullOnTop=위로 당겨 올리다 Rules/&MotionFormPushDownFormat={0}을 누르세요 @@ -341,7 +342,8 @@ Screen/&SpellSlotsUsedShortLongDescription=이 레벨에서 조약 마법 슬롯 Screen/&SubclassClassExtraSpellDescriptionFormat=당신은 {0} 하위 클래스에서 이 주문을 알고 있습니다. Screen/&SwitchConfigurationDescription=장착된 항목을 다음 구성으로 전환하세요: {0}.\n가능하면 손을 떼지 않으려면 Ctrl 키를 누르세요. Spell/&ConjureElementalInvisibleStalkerTitle=정령 소환 [투명 추적자] -Spell/&TrueStrike2024Description=마법적 통찰력의 섬광에 이끌려 주문을 시전하는 데 사용된 무기로 한 번의 공격을 합니다. 공격은 힘이나 민첩성을 사용하는 대신 주문 시전 능력을 사용하고 기본 무기 대신 광휘 피해를 입힙니다. 또한 레벨 5(1d6), 11(2d6), 17(3d6)에 도달하면 추가 광휘 피해를 입힙니다. +Spell/&StoneskinExtendedDescription=타격, 베기, 찌르기 피해에 대한 저항력을 부여합니다. +Spell/&TrueStrike2024Description=마법적 통찰력의 섬광에 이끌려 주문을 시전하는 데 사용된 무기로 한 번의 공격을 합니다. 공격은 공격과 피해 굴림에 주문 시전 능력을 사용하거나 힘이나 민첩성 중 더 높은 것을 사용합니다. 공격이 적중하면 무기의 일반적인 피해 유형 대신 Radiant 피해를 입힙니다. 공격은 레벨 5(1d6), 11(2d6), 17(3d6)에 도달하면 추가 Radiant 피해를 입힙니다. Stage/&IdentityMorphotypeEyeHeader=아이 스타일 Tag/&PrimalOrderCantripSpecialTagTitle=원시 주문 주문 ToolTip/&CheckBoxDefaultPartyTitle=새로운 모험을 시작하거나 사용자 지정 위치를 테스트할 때 기본 파티를 설정하려면 이 상자를 선택하세요. 선입선출 방식으로 최대 {0}명의 영웅을 선택할 수 있습니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt index e71b4b7b40..83ef6365d6 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Others-pt-BR.txt @@ -297,6 +297,7 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Início de raiva automática Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Criatura Automática Reduzida a Zero HP Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Ataque furtivo automático Rules/&ConditionOneDndBarkskinDescription=A Classe de Armadura da criatura se torna pelo menos 17. +Rules/&ConditionStoneskinExtendedDescription=Resistência a danos contundentes, cortantes e perfurantes. Rules/&CounterFormDismissCreatureFormat=Dispensa uma criatura alvo conjurada Rules/&MotionFormPullOnTop=Puxe para cima Rules/&MotionFormPushDownFormat=Empurre para baixo {0} @@ -341,7 +342,8 @@ Screen/&SpellSlotsUsedShortLongDescription=Você gastou {0} espaço(s) de magia Screen/&SubclassClassExtraSpellDescriptionFormat=Você conhece essa magia da subclasse {0}. Screen/&SwitchConfigurationDescription=Troque seus itens equipados para esta configuração: {0}.\nSegure CTRL para manter a mão secundária, se possível. Spell/&ConjureElementalInvisibleStalkerTitle=Conjurar Elemental [Perseguidor Invisível] -Spell/&TrueStrike2024Description=Guiado por um lampejo de percepção mágica, você faz um ataque com a arma usada na conjuração da magia. O ataque usa sua habilidade de conjuração em vez de usar Força ou Destreza, e causa dano radiante em vez do dano da arma base. O ataque também causa dano Radiante extra quando você alcança os níveis 5 (1d6), 11 (2d6) e 17 (3d6). +Spell/&StoneskinExtendedDescription=Concede resistência a danos contundentes, cortantes e perfurantes. +Spell/&TrueStrike2024Description=Guiado por um lampejo de percepção mágica, você faz um ataque com a arma usada na conjuração da magia. O ataque usa sua habilidade de conjuração para as jogadas de ataque e dano ou Força ou Destreza, o que for maior. Se o ataque acertar, ele causa dano Radiante em vez do tipo de dano normal da arma. O ataque causa dano Radiante extra quando você atinge os níveis 5 (1d6), 11 (2d6) e 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Estilo dos olhos Tag/&PrimalOrderCantripSpecialTagTitle=Truque da Ordem Primordial ToolTip/&CheckBoxDefaultPartyTitle=Marque esta caixa para definir seu grupo padrão ao iniciar novas aventuras ou testar locais personalizados. Você pode selecionar até {0} heróis em uma base de primeiro a entrar / primeiro a sair diff --git a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt index 6d78bec38c..c6c3b637f1 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Others-ru.txt @@ -297,6 +297,7 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=Автоматическое на Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=Автоматическое уменьшение хитов существа до нуля Rules/&ActivationTypeOnSneakAttackHitAutoTitle=Автоматическая скрытая атака Rules/&ConditionOneDndBarkskinDescription=КД существа становится не ниже 17. +Rules/&ConditionStoneskinExtendedDescription=Устойчивость к дробящим, рубящим и колющим повреждениям. Rules/&CounterFormDismissCreatureFormat=Отпускает призванное существо Rules/&MotionFormPullOnTop=Тянуть наверх Rules/&MotionFormPushDownFormat=Толкуть вниз {0} @@ -341,7 +342,8 @@ Screen/&SpellSlotsUsedShortLongDescription=Вы потратили {0} ячее Screen/&SubclassClassExtraSpellDescriptionFormat=Вам известно это заклинание из архетипа {0}. Screen/&SwitchConfigurationDescription=Поменять экипированные предметы на эту конфигурацию: {0}.\nЗажмите CTRL, чтобы оставить предмет в левой руке, если возможно. Spell/&ConjureElementalInvisibleStalkerTitle=Призыв элементаля [Невидимый охотник] -Spell/&TrueStrike2024Description=Руководствуясь вспышкой магического озарения, вы совершаете одну атаку оружием, использованным при произнесении заклинания. Атака использует вашу способность к заклинанию вместо использования Силы или Ловкости и наносит урон излучением вместо урона базового оружия. Атака также наносит дополнительный урон излучением, когда вы достигаете уровней 5 (1d6), 11 (2d6) и 17 (3d6). +Spell/&StoneskinExtendedDescription=Дает устойчивость к дробящему, рубящему и колющему урону. +Spell/&TrueStrike2024Description=Руководствуясь вспышкой магического озарения, вы совершаете одну атаку оружием, использованным при произнесении заклинания. Атака использует либо вашу способность к заклинанию для бросков атаки и урона, либо Силу или Ловкость, в зависимости от того, что выше. Если атака попадает, она наносит урон от Radiant вместо обычного урона оружия. Атака наносит дополнительный урон от Radiant, когда вы достигаете уровней 5 (1d6), 11 (2d6) и 17 (3d6). Stage/&IdentityMorphotypeEyeHeader=Вид глаз Tag/&PrimalOrderCantripSpecialTagTitle=Заговор Первобытного порядка ToolTip/&CheckBoxDefaultPartyTitle=Отметьте этот пункт, чтобы задать группу по умолчанию для начала нового приключения или тестирования кастомных локаций. Вы можете выбрать вплоть до {0} персонажей по приципу первый на вход / первый на выход diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt index 03efcd518f..5ca495175f 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Others-zh-CN.txt @@ -297,6 +297,7 @@ Rules/&ActivationTypeOnRageStartAutomaticTitle=自动开始狂暴 Rules/&ActivationTypeOnReduceCreatureToZeroHPAutoTitle=自动生物生命值降至零 Rules/&ActivationTypeOnSneakAttackHitAutoTitle=自动偷袭 Rules/&ConditionOneDndBarkskinDescription=该生物的防御等级至少变为 17。 +Rules/&ConditionStoneskinExtendedDescription=抵抗钝击、砍杀和穿刺伤害。 Rules/&CounterFormDismissCreatureFormat=解散一个目标召唤生物 Rules/&MotionFormPullOnTop=拉至顶部 Rules/&MotionFormPushDownFormat=下推{0} @@ -341,7 +342,8 @@ Screen/&SpellSlotsUsedShortLongDescription=你在这个等级已经扩展了 {0} Screen/&SubclassClassExtraSpellDescriptionFormat=你从 {0} 子职知道这个法术。 Screen/&SwitchConfigurationDescription=将你装备的物品切换到此配置:{0}。\n如果可能,按住 CTRL 以保持副手状态。 Spell/&ConjureElementalInvisibleStalkerTitle=元素咒唤【隐形潜伏怪】 -Spell/&TrueStrike2024Description=在魔法洞察力的指引下,你使用施放法术时使用的武器发动一次攻击。这次攻击使用你的施法能力,而不是力量或敏捷,并造成辐射伤害,而不是基本武器伤害。当你达到等级 5(1d6)、11(2d6)和 17(3d6)时,这次攻击还会造成额外的辐射伤害。 +Spell/&StoneskinExtendedDescription=抵抗钝击、砍击和穿刺伤害。 +Spell/&TrueStrike2024Description=在魔法洞察力的指引下,你使用施法武器发动一次攻击。攻击使用你的施法能力进行攻击和伤害掷骰,或使用力量或敏捷(取较高者)。如果攻击命中,则造成辐射伤害,而不是武器的正常伤害类型。当你达到 5 级(1d6)、11 级(2d6)和 17 级(3d6)时,攻击会造成额外的辐射伤害。 Stage/&IdentityMorphotypeEyeHeader=眼型 Tag/&PrimalOrderCantripSpecialTagTitle=元始秩序戏法 ToolTip/&CheckBoxDefaultPartyTitle=在开始新的冒险或测试自定义位置时,选中此框以设置你的默认队伍。你最多可以选择 {0} 个英雄,以先进先出的方式进行 From 31257ee66f34ea1651b3e67e14ece685362a6711 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 18 Nov 2024 09:54:50 -0800 Subject: [PATCH 37/44] minor tweaks on recently added spell settings --- .../Api/DatabaseHelper-RELEASE.cs | 3 + .../Behaviors/ModifyAttackModeForWeapon.cs | 26 ++++--- .../Models/Tabletop2024Context.cs | 72 +++++-------------- 3 files changed, 36 insertions(+), 65 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index dbd997d22f..cf6ba40b36 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -308,6 +308,9 @@ internal static class CharacterSubclassDefinitions internal static class ConditionDefinitions { + internal static ConditionDefinition ConditionStoneskin { get; } = + GetDefinition("ConditionStoneskin"); + internal static ConditionDefinition ConditionBardicInspiration { get; } = GetDefinition("ConditionBardicInspiration"); diff --git a/SolastaUnfinishedBusiness/Behaviors/ModifyAttackModeForWeapon.cs b/SolastaUnfinishedBusiness/Behaviors/ModifyAttackModeForWeapon.cs index 997c0ce728..ffd02438fc 100644 --- a/SolastaUnfinishedBusiness/Behaviors/ModifyAttackModeForWeapon.cs +++ b/SolastaUnfinishedBusiness/Behaviors/ModifyAttackModeForWeapon.cs @@ -52,27 +52,33 @@ public void ModifyWeaponAttackMode( } var oldAttribute = attackMode.AbilityScore; - var oldValue = character.TryGetAttributeValue(oldAttribute); + var newAttribute = _attribute; - oldValue = AttributeDefinitions.ComputeAbilityScoreModifier(oldValue); - - var attribute = _attribute; - - if (attribute == SpellCastingAbilityTag && GetBestSpellCastingAbility(character, out var ability)) + if (newAttribute == SpellCastingAbilityTag && GetBestSpellCastingAbility(character, out var ability)) { - attribute = ability; + newAttribute = ability; } - var newValue = character.TryGetAttributeValue(attribute); + ChangeAttackModeAttributeIfBetter( + character, attackMode, newAttribute, oldAttribute, canAddAbilityDamageBonus); + } - newValue = AttributeDefinitions.ComputeAbilityScoreModifier(newValue); + internal static void ChangeAttackModeAttributeIfBetter( + RulesetCharacter character, + RulesetAttackMode attackMode, + string oldAttribute, + string newAttribute, + bool canAddAbilityDamageBonus) + { + var oldValue = AttributeDefinitions.ComputeAbilityScoreModifier(character.TryGetAttributeValue(oldAttribute)); + var newValue = AttributeDefinitions.ComputeAbilityScoreModifier(character.TryGetAttributeValue(newAttribute)); if (newValue <= oldValue) { return; } - attackMode.AbilityScore = attribute; + attackMode.AbilityScore = newAttribute; attackMode.toHitBonus -= oldValue; attackMode.toHitBonus += newValue; diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index d1d45440cd..1687a77f76 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -319,6 +319,7 @@ internal static void LateLoad() SwitchOneDndSpellDivineFavor(); SwitchOneDndSpellLesserRestoration(); SwitchOneDndSpellGuidance(); + SwitchOneDndSpellMagicWeapon(); SwitchOneDndSpellStoneSkin(); SwitchOneDndSurprisedEnforceDisadvantage(); SwitchSorcererInnateSorcery(); @@ -538,6 +539,8 @@ internal static void SwitchOneDndSpellLesserRestoration() internal static void SwitchOneDndSpellStoneSkin() { + Stoneskin.GuiPresentation.description = "Spell/&StoneskinExtendedDescription"; + ConditionStoneskin.GuiPresentation.description = "Rules/&ConditionStoneskinExtendedDescription"; DamageAffinityStoneskinBludgeoning.TagsIgnoringAffinity.Clear(); DamageAffinityStoneskinPiercing.TagsIgnoringAffinity.Clear(); DamageAffinityStoneskinSlashing.TagsIgnoringAffinity.Clear(); @@ -547,6 +550,8 @@ internal static void SwitchOneDndSpellStoneSkin() return; } + Stoneskin.GuiPresentation.description = "Spell/&StoneskinDescription"; + ConditionStoneskin.GuiPresentation.description = "Rules/&ConditionStoneskinDescription"; DamageAffinityStoneskinBludgeoning.TagsIgnoringAffinity.AddRange( TagsDefinitions.MagicalWeapon, TagsDefinitions.MagicalEffect); DamageAffinityStoneskinPiercing.TagsIgnoringAffinity.AddRange( @@ -581,21 +586,17 @@ internal static void SwitchOneDndSpellGuidance() internal static void SwitchOneDndSpellMagicWeapon() { - var featureBySlotLevel = MagicWeapon.EffectDescription.EffectForms[0].ItemPropertyForm.FeatureBySlotLevel; - if (Main.Settings.EnableOneDndMagicWeaponSpell) { MagicWeapon.requiresConcentration = false; MagicWeapon.castingTime = ActivationTime.BonusAction; - featureBySlotLevel[1].level = 3; - featureBySlotLevel[2].level = 5; + MagicWeapon.EffectDescription.EffectForms[0].ItemPropertyForm.FeatureBySlotLevel[1].level = 3; } else { MagicWeapon.requiresConcentration = true; MagicWeapon.castingTime = ActivationTime.Action; - featureBySlotLevel[1].level = 4; - featureBySlotLevel[2].level = 6; + MagicWeapon.EffectDescription.EffectForms[0].ItemPropertyForm.FeatureBySlotLevel[1].level = 4; } } @@ -1043,9 +1044,10 @@ internal static void SwitchOneDndDamagingSpellsUpgrade() { EffectProxyDefinitions.ProxyArcaneSword.damageDie = DieType.D12; EffectProxyDefinitions.ProxyArcaneSword.damageDieNum = 4; + EffectProxyDefinitions.ProxyArcaneSword.addAbilityToDamage = true; EffectProxyDefinitions.ProxyArcaneSword.AdditionalFeatures.AddRange( - FeatureDefinitionMoveModes.MoveModeFly2, - FeatureDefinitionMoveModes.MoveModeMove4); + FeatureDefinitionMoveModes.MoveModeFly6, + FeatureDefinitionMoveModes.MoveModeMove6); CircleOfDeath.EffectDescription.EffectForms[0].DamageForm.dieType = DieType.D8; FlameStrike.EffectDescription.EffectForms[0].DamageForm.diceNumber = 5; FlameStrike.EffectDescription.EffectForms[1].DamageForm.diceNumber = 5; @@ -1056,9 +1058,10 @@ internal static void SwitchOneDndDamagingSpellsUpgrade() { EffectProxyDefinitions.ProxyArcaneSword.damageDie = DieType.D10; EffectProxyDefinitions.ProxyArcaneSword.damageDieNum = 3; + EffectProxyDefinitions.ProxyArcaneSword.addAbilityToDamage = false; EffectProxyDefinitions.ProxyArcaneSword.AdditionalFeatures.AddRange( - FeatureDefinitionMoveModes.MoveModeFly2, - FeatureDefinitionMoveModes.MoveModeMove2); + FeatureDefinitionMoveModes.MoveModeFly4, + FeatureDefinitionMoveModes.MoveModeMove4); CircleOfDeath.EffectDescription.EffectForms[0].DamageForm.dieType = DieType.D6; FlameStrike.EffectDescription.EffectForms[0].DamageForm.diceNumber = 4; FlameStrike.EffectDescription.EffectForms[1].DamageForm.diceNumber = 4; @@ -1201,58 +1204,17 @@ public void OnAttackComputeModifier( string effectName, ref ActionModifier attackModifier) { - if (attackMode == null) + if (attackMode == null || + attacker.SpellsCastByMe.Count == 0) { return; } var oldAttribute = attackMode.AbilityScore; var newAttribute = attacker.SpellsCastByMe[attacker.SpellsCastByMe.Count - 1].SourceAbility; - var oldValue = attacker.TryGetAttributeValue(oldAttribute); - var newValue = attacker.TryGetAttributeValue(newAttribute); - - oldValue = AttributeDefinitions.ComputeAbilityScoreModifier(oldValue); - newValue = AttributeDefinitions.ComputeAbilityScoreModifier(newValue); - attackMode.AbilityScore = newAttribute; - attackMode.toHitBonus -= oldValue; - attackMode.toHitBonus += newValue; - - var info = new TrendInfo(newValue, FeatureSourceType.AbilityScore, - attackMode.AbilityScore, null); - - var i = attackMode.toHitBonusTrends - .FindIndex(x => x.value == oldValue - && x.sourceType == FeatureSourceType.AbilityScore - && x.sourceName == oldAttribute); - - if (i >= 0) - { - attackMode.toHitBonusTrends.RemoveAt(i); - attackMode.toHitBonusTrends.Insert(i, info); - } - - var damage = attackMode.EffectDescription.FindFirstDamageForm(); - - if (damage == null) - { - return; - } - - damage.damageType = DamageTypeRadiant; - damage.BonusDamage -= oldValue; - damage.BonusDamage += newValue; - - i = damage.DamageBonusTrends - .FindIndex(x => x.value == oldValue - && x.sourceType == FeatureSourceType.AbilityScore - && x.sourceName == oldAttribute); - if (i < 0) - { - return; - } - damage.DamageBonusTrends.RemoveAt(i); - damage.DamageBonusTrends.Insert(i, info); + CanUseAttribute.ChangeAttackModeAttributeIfBetter( + attacker, attackMode, oldAttribute, newAttribute, true); } } From 7cc25c114f61c220fef4e9c8d836c725db669107 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 18 Nov 2024 10:52:49 -0800 Subject: [PATCH 38/44] update translations --- SolastaUnfinishedBusiness/Translations/de/Settings-de.txt | 2 +- SolastaUnfinishedBusiness/Translations/en/Settings-en.txt | 2 +- SolastaUnfinishedBusiness/Translations/es/Settings-es.txt | 2 +- SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt | 2 +- SolastaUnfinishedBusiness/Translations/it/Settings-it.txt | 2 +- SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt | 2 +- SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt | 2 +- SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt | 2 +- SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt | 2 +- SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index bc7e913e7a..54d936bab8 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -153,7 +153,7 @@ ModUi/&EnableOneDndDivineFavorSpell=Aktivieren Sie die Zauberversion Anleitung 5e 2024 [Wählen Sie beim Zaubern eine Fertigkeit aus und erhalten Sie bis zu 1 Minute lang einen Bonus.] ModUi/&EnableOneDndHealingSpellsUpgrade=Aktiviere Wunden heilen, Falsches Leben, Heilendes Wort, Massenheilung von Wunden und Massenheilungswort 5e 2024 Zauberversion [bessere Heilung] ModUi/&EnableOneDndLesserRestorationSpell=Aktiviere die Zauberversion Geringere Wiederherstellung 5e 2024 [Bonusaktion] -ModUi/&EnableOneDndMagicWeaponSpell=Aktiviere Magische Waffe 5e 2024 Zauberversion [Bonusaktion, keine Konzentration, Schadenserhöhung bei 3 und 5] +ModUi/&EnableOneDndMagicWeaponSpell=Aktiviere Magische Waffe 5e 2024 Zauberversion [Bonusaktion, keine Konzentration, Verstärkungs-Upgrade auf der 3. und 6. Zauberstufe] ModUi/&EnableOneDndPowerWordKillSpell=Aktiviere Machtwort: Töten 5e 2024 Zauberversion [12d12 psychischer Schaden wenn unter 100 PS] ModUi/&EnableOneDndStoneSkinSpell=Aktiviere Steinhaut 5e 2024 Zauberversion [bietet auch Widerstand gegen magisches B/P/S] ModUi/&EnableOneDndTrueStrikeCantrip=Aktiviere True Strike 5e 2024 Cantrip-Version [Neustart erforderlich]\n[Angriff nutzt deine Zauberfähigkeit für den Angriffswurf und Schadensbonus sowie zusätzlichen Strahlungsschaden ab Level 5] diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index fb55b7bc38..d41a7d28c8 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -153,7 +153,7 @@ ModUi/&EnableOneDndDivineFavorSpell=Enable Divine Favor 5 ModUi/&EnableOneDndGuidanceSpell=Enable Guidance 5e 2024 spell version [Choose one skill at casting and get bonus for up to 1 minute] ModUi/&EnableOneDndHealingSpellsUpgrade=Enable Cure Wounds, False Life, Healing Word, Mass Cure Wounds, and Mass Healing Word 5e 2024 spells version [better healing] ModUi/&EnableOneDndLesserRestorationSpell=Enable Lesser Restoration 5e 2024 spell version [bonus action] -ModUi/&EnableOneDndMagicWeaponSpell=Enable Magic Weapon 5e 2024 spell version [bonus action, no concentration, damage upgrade at 3 and 5] +ModUi/&EnableOneDndMagicWeaponSpell=Enable Magic Weapon 5e 2024 spell version [bonus action, no concentration, enhancement upgrade at 3rd and 6th spell level] ModUi/&EnableOneDndPowerWordKillSpell=Enable Power Word: Kill 5e 2024 spell version [12d12 psychic damage if under 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Enable Stone Skin 5e 2024 spell version [provides resistance to magical B/P/S as well] ModUi/&EnableOneDndTrueStrikeCantrip=Enable True Strike 5e 2024 cantrip version [Requires Restart]\n[attack uses your spellcasting ability for the attack roll and damage bonus, and additional radiant damage from level 5] diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index fcef678cfd..a835e4635d 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -153,7 +153,7 @@ ModUi/&EnableOneDndDivineFavorSpell=Habilitar Favor divinoOrientación versión del hechizo 5e 2024 [Elige una habilidad al lanzar y obtén una bonificación por hasta 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar heridas, Vida falsa, Palabra de sanación, Curar heridas en masa y Palabra de sanación en masa versión 5e 2024 hechizos [mejor sanación] ModUi/&EnableOneDndLesserRestorationSpell=Habilitar Restauración menor versión del hechizo 5e 2024 [acción adicional] -ModUi/&EnableOneDndMagicWeaponSpell=Habilitar Arma mágica versión del hechizo 5e 2024 [acción adicional, sin concentración, mejora de daño en 3 y 5] +ModUi/&EnableOneDndMagicWeaponSpell=Habilitar Arma mágica versión del hechizo 5e 2024 [acción adicional, sin concentración, mejora de mejora en el 3.er y 6.º nivel del hechizo] ModUi/&EnableOneDndPowerWordKillSpell=Habilitar Palabra de poder: matar versión del hechizo 5e 2024 [12d12 de daño psíquico si tienes menos de 100 HP] ModUi/&EnableOneDndStoneSkinSpell=Habilitar Piel de piedra versión del hechizo 5e 2024 [también proporciona resistencia a B/P/S mágicos] ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar Golpe verdadero versión 5e 2024 del truco [Requiere reinicio]\n[el ataque usa tu capacidad de lanzamiento de conjuros para la tirada de ataque y la bonificación de daño, y daño radiante adicional a partir del nivel 5] diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 4fbc060aa9..2aaf7a0392 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -153,7 +153,7 @@ ModUi/&EnableOneDndDivineFavorSpell=Activer Faveur divine ModUi/&EnableOneDndGuidanceSpell=Activer Guidage 5e version du sort 2024 [Choisissez une compétence au lancement et obtenez un bonus jusqu'à 1 minute.] ModUi/&EnableOneDndHealingSpellsUpgrade=Activer les sorts Soin des blessures, Fausse vie, Mot de guérison, Soin de masse des blessures et Mot de guérison de masse 5e 2024 version [meilleure guérison] ModUi/&EnableOneDndLesserRestorationSpell=Activer Restauration mineure 5e 2024 version du sort [action bonus] -ModUi/&EnableOneDndMagicWeaponSpell=Activer Arme magique 5e version du sort 2024 [action bonus, pas de concentration, amélioration des dégâts à 3 et 5] +ModUi/&EnableOneDndMagicWeaponSpell=Activer Arme magique 5e version du sort 2024 [action bonus, pas de concentration, amélioration aux niveaux de sort 3 et 6] ModUi/&EnableOneDndPowerWordKillSpell=Activer Mot de pouvoir : Tuer 5e version du sort 2024 [12d12 dégâts psychiques si moins de 100 pv] ModUi/&EnableOneDndStoneSkinSpell=Activer la version du sort Stone Skin 5e 2024 [offre également une résistance aux B/P/S magiques] ModUi/&EnableOneDndTrueStrikeCantrip=Activer True Strike 5e 2024 version du tour de passe-passe [Nécessite un redémarrage]\n[L'attaque utilise votre capacité de lancement de sorts pour le jet d'attaque et le bonus de dégâts, ainsi que des dégâts radiants supplémentaires à partir du niveau 5] diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 089dc664e3..8efcd12aeb 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -153,7 +153,7 @@ ModUi/&EnableOneDndDivineFavorSpell=Abilita Favore divino ModUi/&EnableOneDndGuidanceSpell=Abilita la versione dell'incantesimo Guida 5e 2024 [Scegli un'abilità al momento del lancio e ottieni un bonus fino a 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Abilita Cura Ferite, Falsa Vita, Parola Guaritrice, Cura Ferite di Massa e Parola Guaritrice di Massa versione incantesimi 5e 2024 [migliore guarigione] ModUi/&EnableOneDndLesserRestorationSpell=Abilita Restauro Minore versione incantesimo 5e 2024 [azione bonus] -ModUi/&EnableOneDndMagicWeaponSpell=Abilita Arma magica versione incantesimo 5e 2024 [azione bonus, nessuna concentrazione, potenziamento danno a 3 e 5] +ModUi/&EnableOneDndMagicWeaponSpell=Abilita Arma magica versione incantesimo 5e 2024 [azione bonus, nessuna concentrazione, potenziamento potenziamento al 3° e 6° livello incantesimo] ModUi/&EnableOneDndPowerWordKillSpell=Abilita Parola di potere: Uccidi versione incantesimo 5e 2024 [12d12 danni psichici se sotto i 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Abilita Pelle di pietra versione incantesimo 5e 2024 [fornisce anche resistenza a B/P/S magici] ModUi/&EnableOneDndTrueStrikeCantrip=Abilita True Strike versione trucchetto 5e 2024 [Richiede riavvio]\n[l'attacco usa la tua capacità di lanciare incantesimi per il tiro di attacco e il bonus al danno, e danni radianti aggiuntivi dal livello 5] diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 5199219e46..9626b4f455 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -153,7 +153,7 @@ ModUi/&EnableOneDndDivineFavorSpell=神の恩寵 5e 2024 ModUi/&EnableOneDndGuidanceSpell=ガイダンス 5e 2024 呪文バージョンを有効にします [発動時にスキルを 1 つ選択し、最大 1 分間ボーナスを獲得します。] ModUi/&EnableOneDndHealingSpellsUpgrade=Cure Wounds、False Life、Healing Word、Mass Cure Wounds、Mass Healing Word 5e 2024 呪文バージョン [better healing] を有効にします ModUi/&EnableOneDndLesserRestorationSpell=Lesser Restoration 5e 2024 呪文バージョン [ボーナスアクション] を有効にする -ModUi/&EnableOneDndMagicWeaponSpell=魔法の武器 5e 2024 呪文バージョン [ボーナスアクション、集中力なし、3 と 5 でダメージがアップグレード] を有効にします +ModUi/&EnableOneDndMagicWeaponSpell=魔法の武器 5e 2024 呪文バージョン [ボーナス アクション、集中力なし、呪文レベル 3 および 6 で強化アップグレード] を有効にします ModUi/&EnableOneDndPowerWordKillSpell=パワーワード: キル 5e 2024 呪文バージョンを有効にする [HP 100 未満の場合は 12d12 の精神ダメージ] ModUi/&EnableOneDndStoneSkinSpell=ストーンスキン 5e 2024 呪文バージョンを有効にする [魔法の B/P/S に対する耐性も付与します] ModUi/&EnableOneDndTrueStrikeCantrip=トゥルーストライク 5e 2024 キャントリップ バージョンを有効にします [再起動が必要]{99>[攻撃は、攻撃ロールとダメージ ボーナスに呪文発動能力を使用し、レベル 5 から追加の光ダメージを与えます] diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 90da8f6720..164548f717 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -153,7 +153,7 @@ ModUi/&EnableOneDndDivineFavorSpell=신성한 호의 5e 2 ModUi/&EnableOneDndGuidanceSpell=지침 5e 2024 주문 버전을 활성화합니다. [시전 시 스킬 하나를 선택하고 최대 1분 동안 보너스를 받습니다.] ModUi/&EnableOneDndHealingSpellsUpgrade=상처 치료, 거짓 생명, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀 5e 2024 주문 버전 [치유력 향상]을 활성화합니다. ModUi/&EnableOneDndLesserRestorationSpell=하위 회복 5e 2024 주문 버전 [보너스 액션]을 활성화합니다. -ModUi/&EnableOneDndMagicWeaponSpell=마법 무기 5e 2024 주문 버전 활성화 [보너스 액션, 집중 없음, 3과 5에서 데미지 업그레이드] +ModUi/&EnableOneDndMagicWeaponSpell=마법 무기 5e 2024 주문 버전 활성화 [보너스 액션, 집중 없음, 3, 6번째 주문 레벨에서 강화 업그레이드] ModUi/&EnableOneDndPowerWordKillSpell=힘의 말씀: 살해 5e 2024 주문 버전을 활성화합니다. [체력이 100 미만일 경우 12d12의 사이킥 데미지] ModUi/&EnableOneDndStoneSkinSpell=스톤 스킨 5e 2024 주문 버전을 활성화합니다. [마법 B/P/S에 대한 저항력도 제공] ModUi/&EnableOneDndTrueStrikeCantrip=True Strike 5e 2024 캔트립 버전 사용 [재시작 필요]\n[공격 시 공격 굴림과 피해 보너스에 주문 시전 능력을 사용하고, 레벨 5부터 추가 방사형 피해] diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index 2c4679143a..dbf1c944fc 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -153,7 +153,7 @@ ModUi/&EnableOneDndDivineFavorSpell=Habilitar Favor DivinoOrientação versão de magia 5e 2024 [Escolha uma habilidade na conjuração e ganhe bônus por até 1 minuto.] ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar Ferimentos, Vida Falsa, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa versão de feitiços 5e 2024 [melhor cura] ModUi/&EnableOneDndLesserRestorationSpell=Habilitar Restauração Menor versão de magia 5e 2024 [ação bônus] -ModUi/&EnableOneDndMagicWeaponSpell=Habilitar Arma Mágica versão de magia 5e 2024 [ação bônus, sem concentração, aumento de dano em 3 e 5] +ModUi/&EnableOneDndMagicWeaponSpell=Habilitar Arma Mágica versão de magia 5e 2024 [ação bônus, sem concentração, atualização de aprimoramento no 3º e 6º nível da magia] ModUi/&EnableOneDndPowerWordKillSpell=Habilitar Palavra de Poder: Matar versão de magia 5e 2024 [12d12 de dano psíquico se tiver menos de 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Habilitar Stone Skin versão de magia 5e 2024 [fornece resistência a B/P/S mágicos também] ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar True Strike versão 5e 2024 do truque [Requer reinicialização]\n[o ataque usa sua habilidade de conjuração para a jogada de ataque e bônus de dano, além de dano radiante adicional do nível 5] diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index 8c4de70d49..b564643393 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -153,7 +153,7 @@ ModUi/&EnableOneDndDivineFavorSpell=Включить Божест ModUi/&EnableOneDndGuidanceSpell=Включить версию заклинания Указание из 5e 2024 [Выберите один навык при наложении и получите бонус на срок до 1 минуты.] ModUi/&EnableOneDndHealingSpellsUpgrade=Включить Исцеление ран, Ложная жизнь, Слово исцеления, Массовое исцеление ран и Слово массового исцеления 5e 2024 заклинания версии [лучшее исцеление] ModUi/&EnableOneDndLesserRestorationSpell=Включить Малое восстановление 5e 2024 версия заклинания [бонусное действие] -ModUi/&EnableOneDndMagicWeaponSpell=Включить версию заклинания Магическое оружие 5e 2024 [бонусное действие, нет концентрации, улучшение урона на 3 и 5] +ModUi/&EnableOneDndMagicWeaponSpell=Включить версию заклинания Магическое оружие 5e 2024 [бонусное действие, нет концентрации, улучшение на 3-м и 6-м уровнях заклинания] ModUi/&EnableOneDndPowerWordKillSpell=Включить Слово силы: Убить 5e 2024 версия заклинания [12d12 психического урона, если менее 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Включить версию заклинания Stone Skin 5e 2024 [также обеспечивает сопротивление магическому B/P/S] ModUi/&EnableOneDndTrueStrikeCantrip=Включить версию колдовства True Strike 5e 2024 [Требуется перезапуск]\n[атака использует вашу способность к заклинаниям для броска атаки и бонуса к урону, а также дополнительный урон от излучения с 5-го уровня] diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index 0067bac58a..b2d8ffe0d6 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -153,7 +153,7 @@ ModUi/&EnableOneDndDivineFavorSpell=启用神恩 5e 2024 ModUi/&EnableOneDndGuidanceSpell=启用Guidance 5e 2024 法术版本[施法时选择一项技能并获得最多 1 分钟的奖励。] ModUi/&EnableOneDndHealingSpellsUpgrade=启用治疗伤口、虚假生命、治疗之语、群体治疗伤口和群体治疗之语 5e 2024 法术版本 [更好的治疗] ModUi/&EnableOneDndLesserRestorationSpell=启用次级修复 5e 2024 法术版本[奖励行动] -ModUi/&EnableOneDndMagicWeaponSpell=启用魔法武器 5e 2024 法术版本[奖励行动,无需集中,伤害在 3 和 5 时升级] +ModUi/&EnableOneDndMagicWeaponSpell=启用魔法武器 5e 2024 法术版本[奖励行动,无需集中注意力,在第 3 级和第 6 级法术增强升级] ModUi/&EnableOneDndPowerWordKillSpell=启用Power Word: Kill 5e 2024 法术版本[如果生命值低于 100,则造成 12d12 精神伤害] ModUi/&EnableOneDndStoneSkinSpell=启用石肤 5e 2024 法术版本[同时提供对魔法 B/P/S 的抵抗力] ModUi/&EnableOneDndTrueStrikeCantrip=启用 True Strike 5e 2024 法术版本 [需要重启]{99>[攻击使用你的施法能力进行攻击掷骰和伤害加成,并从 5 级开始造成额外的辐射伤害] From a02614faae31955031c4ed3f30faf93b3b2b0004 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 18 Nov 2024 12:10:12 -0800 Subject: [PATCH 39/44] minor tweaks on recently added spell settings --- .../Displays/GeneralDisplay.cs | 1 + .../Displays/SpellsDisplay.cs | 1 + .../Models/Tabletop2024Context.cs | 17 ++++++++++++++ .../Resources/Subclasses/RoguishDuelist.png | Bin 31709 -> 40669 bytes .../Subclasses/RoguishOpportunist.png | Bin 40669 -> 31839 bytes .../Spells/SpellBuildersLevel09.cs | 21 +++++++++--------- 6 files changed, 30 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs index 3df7d3857b..c254996ae9 100644 --- a/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/GeneralDisplay.cs @@ -665,6 +665,7 @@ private static void DisplayOneDnd() if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndPowerWordKillSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndPowerWordKillSpell = toggle; + Tabletop2024Context.SwitchOneDndSpellPowerWordKill(); } toggle = Main.Settings.EnableOneDndStoneSkinSpell; diff --git a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs index a49b1a8eee..795f1d4d29 100644 --- a/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs +++ b/SolastaUnfinishedBusiness/Displays/SpellsDisplay.cs @@ -204,6 +204,7 @@ private static void DisplaySpellsGeneral() if (UI.Toggle(Gui.Localize("ModUi/&EnableOneDndPowerWordKillSpell"), ref toggle, UI.AutoWidth())) { Main.Settings.EnableOneDndPowerWordKillSpell = toggle; + Tabletop2024Context.SwitchOneDndSpellPowerWordKill(); } toggle = Main.Settings.EnableOneDndStoneSkinSpell; diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index 1687a77f76..e754d63ba1 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -13,6 +13,7 @@ using SolastaUnfinishedBusiness.CustomUI; using SolastaUnfinishedBusiness.Interfaces; using SolastaUnfinishedBusiness.Properties; +using SolastaUnfinishedBusiness.Spells; using SolastaUnfinishedBusiness.Subclasses; using SolastaUnfinishedBusiness.Subclasses.Builders; using SolastaUnfinishedBusiness.Validators; @@ -320,6 +321,7 @@ internal static void LateLoad() SwitchOneDndSpellLesserRestoration(); SwitchOneDndSpellGuidance(); SwitchOneDndSpellMagicWeapon(); + SwitchOneDndSpellPowerWordKill(); SwitchOneDndSpellStoneSkin(); SwitchOneDndSurprisedEnforceDisadvantage(); SwitchSorcererInnateSorcery(); @@ -600,6 +602,14 @@ internal static void SwitchOneDndSpellMagicWeapon() } } + internal static void SwitchOneDndSpellPowerWordKill() + { + SpellsContext.PowerWordKill.EffectDescription.EffectForms.SetRange( + Main.Settings.EnableOneDndMagicWeaponSpell + ? SpellBuilders.PowerWordKill2024 + : SpellBuilders.PowerWordKill2014); + } + internal static void SwitchOneDndWizardSchoolOfMagicLearningLevel() { var schools = DatabaseRepository.GetDatabase() @@ -1210,6 +1220,13 @@ public void OnAttackComputeModifier( return; } + var damageForm = attackMode.EffectDescription.FindFirstDamageForm(); + + if (damageForm != null) + { + damageForm.damageType = DamageTypeRadiant; + } + var oldAttribute = attackMode.AbilityScore; var newAttribute = attacker.SpellsCastByMe[attacker.SpellsCastByMe.Count - 1].SourceAbility; diff --git a/SolastaUnfinishedBusiness/Resources/Subclasses/RoguishDuelist.png b/SolastaUnfinishedBusiness/Resources/Subclasses/RoguishDuelist.png index 410bb8a1deb1e4593a4ce0d4f412af6ad04575fc..4b9d2e5cb242d958bde02e8575bbfd7be8109b56 100644 GIT binary patch literal 40669 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 Zd<9lMIS;)vBKrUU002ovPDHLkV1jgKTC)HE literal 31709 zcmZr%WmjIk5@v?|G|iGLRV?*|111pe>gwtz9vK-~OG^tE7uUkVf|iz6R8*9TimIihwF9NeeiC;t2Q@7>+q zc6N5Uy1I;vjP>>P6%`fe=;+qg)@5a7pPGq?h(1-x%gcX?e2RZ^larHUVPW~CR9IN} zNwTuC(#OZ=ljkRfm6er&fdLg2H76%$WMt%1oR^oEo12@Mn3#r!CM6}MwYBvVqp7Jm zIy!1*X6EJPrLC=PZ*TvZa&mHddwYNSgoK0y4-fBC^Jf$M{QT6^)Sp$#%F3Vk{QP_r z6qHXxKJ8*+V$##o`}*~(k&%&&%k|8;eB z&CJZ4oSgLc_a7V_Y;JDu?(WJk6@7fN)N@u*Pz7MniI8yUDY#kKg(PG@H1w5}Kl-eT zi%d>>f^7aZU&s1;Ek=8}|J@mEOmo(~EzEJezdJkK>F#XEjU_l{C1TV6IOFySxZ}0oHN87Qa6bS3=s<&7b>TNL9V6ez)O88;?*Nzra@md1PAo$w^R`%v= z$JAp}aZH|quZB4|2gT=O9=_T@O7M1$=P4ZQ-y6F!^=9;riWaitTj+f!^d8bDZNfb7 zqxk|?7KHySohAB?Gzf2EU-J06esI$bflKfe)e&E<3`ns;svGZCn@i&NHz#mj_(5-d4fnM$5MMO6H< zF*zZq?R9HrsreV?J6nCYM}5Q7)#%zP4Qdh1*zV6lr^5%_90im>(R}d4#r{ZS{bIF% z*R_SExw)I=?VMb7^L^{;gjNb0MtvH#c)VNt`jieoN?x=3<>>CC8)GJkWU>-XXm6L- zM`YeDVb9aVa;qd$6>?kW^6IFT+#YiT`ANIQPP_09HQm0!d~6;wC7!1By@%b#TD#-v z(4CmY-yUI@e~CRlmyc1Xu&JZBuP%=~;Zo7txuaoVx|_I-DnokQHLh0bIBct4-ge7sZ5+)XElQ z>bn@Z>7sW!R#!DUJbdv(_cuO(j(@foD0?43&tBi#ILG{B+c>IoEg4+23*y`b2F9oo z;ZRV5+@y(Cj6GS5k%tWVVxemWOg3HRqSeAe>_P@99tZOB5DqS1>oB|*FHvkFBFgY# zt44N~CyP=ydhvfe1I=RV4r|N^@WF=6q+$n@dr`q+MLEKK{zT-QweQm|dc0Q*7J8cH zUT;sevnc_z5toeL_&Z$kb@9O=TT4iN{>vod2ZHS%zbrk!bcTAM@2HPRTc_F=OUBFP z2#Ss=4|{?z9K*`l^OynLtNNZpV66v*Q1pw=ggRGlp=Z+2*!uq0%VL_Lc$kvioq+0} zT*L1e8Jnx;iZ-@`U35)BO&2Y3SVOhr>TG?<=IK#!=B)o9UPCGKj(jEhnD625>4u-XMTx7d}%T!RBU6J1I^Xu~hIpe?xT%ec5M^NbMFt@d5_rfsem z3#kYtJuM5Frb|p5gEqDn4X(5hNh!ml4`n3q#Iu#IK;uA&aSK$i0-Homa85ZRE7RuI z3A~XwH6+mB^ff5h8V%+#|8)%kZ%kw})DsPrwGnx4)}?>IVyg$X2!&vt1s;3iVXh{O zNglFik%7w*6X`ycQP;b7KQv@X+ilA<1sghWifxInFwEcUCxto7T1<26`2pYcv;VNe zukYnOI<^pg#%;a0Xis!*=oLFWZACh5y>wha-f2b;x|Al4)W_R{_}Vv=!>wUBr2beY z@5uM_(y4fwCiZ`l)mkb0TDpcq-U#6YdL>gP+0WwHnB_kYba{cGpnZ=@t$IYf>#0i= z3Tid1zbxrRwg}+@jsY+sl*euRJqS65M=2|1l@%3QequKoij%3Za51A$qVI2qMr@rU z_0^Ju%1PGr`L_&HCQ@NJ0voER*UWqwe^q6VocU1v#!$6v7kGBGqjAVKeF1;z7Ca2h zuCERRl+p<*BHog7?9$B)bIerzHFBNEP(+w;dvCLW;olOhVRgMv=iJ)3KB&ndV-p#Ec~sjiF53+K{NbHNZV zN)lSb!JqD3^}WU$9(UPJxf1Og#|`Xyy>K{l#-8d&S|M6$E!G1~9_GT6$7bDpUeaxvRdgc(~*7`P{ruZLCl#U8aZ z5pA-pnu0&k+81Aik8+K5ry`k^u9xz2HGgdVuD}%|{pn#-Nw!@vmn;*?$}oUF;Wamh zB@cj>dSGcs`Qw&c6C_H_!^_Ggy27f*JcV5U?ZAgoxGMzhszWsBhv+Oi{CvJ&jx zH%L3aoE(4?WD?65!4ur?x0^T|nnEZkj+yP5V^m%snz{mUX;1di7HAn6eP9#4U`{2i zVEfnhG8)3taTu;96-b!6xHQsBK@1-1tvd0=PJ!M<%F{cB6~v9a_W1%LY}L@PIrGSE z2cqG~5dv%pnM>6Y{;1g&veG2~uHYN{{S^7WPMg%?=)Q4ruuxuR`{H$&dFgf7t|u1G zDUAR@ZO<2^+_87Rzdl8>qrdH2>96yaMoc2~5$j{{EX{$6#J@sl`L9EHJ2uH5L%@na zHt`7as64Dab084$dX7>f^eM2x@Vc0B=hti}F?ta3+KWInHp9&uFHF>8u3ayw1U7le zDFb`(B_MnjmS`r0Q~WWpI1Tmq4jlld@^R_RU%CvnqA*#*cx$UV<6vw=MNMMNe4Hq( zrZ93!Af<2(AXy+#FV}tkh54Q~J>mjMH_r|Kg}2;Kh?~~L%s9IqROnxmOj9Q~+VDfB zG}j2$xP5UESmthf}?-fRS{^qp!GOq(L$`lBCziH0eoJTCGHY9a;1eghFtP zEWQ=*shCbyzk(3o6qgq%La5x5UgN9-LkDlV%M{iv#b$9njy1`o!E7j6af|nHS_3)0 z+sljuM`l+J4F}{BTmGvTM=J>@b+#etK{o||^go68qKmuz`H%*`D}tYP-8LJ@rDu48 zoP%GQuJE2@&Rk{(Ah962Y4j%Wo{hN+}+#F%ZXW7UN56bU#xMx+(sTGWx zYme&r27c_4dG+O$kXFKcRY&fKe%7*{@v9WQV=eM8^}LJW;TMhV-^f3unKHlQZeTpM znQ;+k6Ses*{1QQXLt&ngz~*yRYp`%73eVxP?qY~7Sxd6Q3n@t&Ovbh%sBcNrz(3M2 z)#x7^`JdqHcD&f&ug-3quE;=z1I@^SWVbM5&B;TrQJuP@fVTYa&8Noe$q zKwBMN>1TnCh)l^J1AQAevGoZqk|ZHjKgoVXRUB@A=KJ^70dc>zQyiy~V8mH!CgXpP z6@e0Ur-U7bi&UwSio;3Zr3`96%cs5QP~w+-WLrM_<{RHlZzj@@F0F#2kn6G~#dwmy zSoK3~@uGAtdHzR6qtu_5w!FPLQN%$8m8ZFD5*oFYF3}lhY|^_BpW%s5`i-HRUal48 z`+4maR0vJo#dsUx5W1xji@4(RP!cvITQU1`|8^xXYRA*t z)TZ9;z+c#a&@zdIx36>OlW877B%&`eFZIA2#F_gO8RK>H#mRXBFd7raRtOBYy#zpz z0dRp9J-5gf;>R!kJ|%i*!Wn)TIX{~6$}E!P!k|LurEWM}w?H2(l}aKQC}Q?9?F}DS z?~)fBAm0IBu=y1DWxWs$0tfY*qLwe}W3}a+4b5C4-6DP(sr-*|zDAUHvqw8O;#4m; z8H~Kxxim3OA`Irs*}RxrGTR7-a{$Wq@VlwE{DE-A_`7YX_5$6gXeI@hB20Rl)v{5X znN6xPqeYft%K2BQG#HN+)Adlhz#e(DH#fj1)iULfakGN{!;Uf7 zJR(Vd@FVK%_S&62>%(K+i`W!;7kaE9+`{f}fhmiDPbQ{gAezWy-?2OvwoeLAi@yJ5 zcwg-)I=%@S$8W@q=xJmZ2En)%5lQP@lWYnZ`Z4p(9deef{{LK+6LH>8Q3c-?9o#v0 zz|W~PqjH90ZBV`r-DDr=o2N06XV>jsxksv1?fueeG^cy1i|8O-?Y;BDg)D6S{yis6 z6Vl4E*!lo!+max5mw>XuM``0N+WYyKeT5iV-Y?wGB>(zMV2GW)LkYRco1e^K0`waY z6cHGCR^fMWj~Y5fjgUEo?IE|i2Yoj$uO-R#)|4B4e;<0P`B{R6-E-Sua&+J8o3ZP6 z!}5LTuVCC$h+76;cbR{fIM(}22b&&nr(1^OKe)Y3Yj8q${8yH@ecw|vW+Y5I>2xg9 zw@3%3%^yciIlLX7LtP=W{JD=@@Z00RV3Qsg;&KQi)y|LMb>Xf5zyn~LODSu?!s8jA zO#|V8`)UNE?%)1Jj#Fp$ply1DWy#B-R0k#Deq>v9hn3$RGU!%>wAv_)@3oKZTMX>kr2U?`mWfPUP1O?z-`uOynXkKt6;r2q{e9$ejZ9UsanLB2dv; zNYnO9QlS+~*m31ID{1tdeZDKtCTdIwv6&u!$q097h%LcnOSC82OKF$7wNb& zxjG^#7b9wHkaCcy@rgdU$=09tKtqF)%^!SMf3assZvQ@qK4Ol9k@cmxpVG4^B&wrk$#=I)il)-Y zU7g8qI~e^w!Wy)CK%}o@d_+7sGJE6CQLq${h-ZW>Z$36X5XXxGR}j3ktV-@J$b#aN zsRD^A`1H4Js|mar`0;!nE-Ue|p1ei>{X;F^$Eo;UZe+6mCIy=@Mj%izi+IDS&`p3| zIhGwQ#4VtQD~aR39E(sNgP48uIU*9Q(N9Rr(W!SM__;;Eyf-8fB zVm}v$%rX0t{EG>+HT?ma=)}%%7zPT)#ijVa1bvRGJ$t(${GKkoPo52YTLuEMy!Mj@ zx-mXHI@y@hvwkam)$WX;e?_{S7$#a7Gd$_y%`*$>bueR$Vi_u#6$@g8_tL@QDr%vS zy_AsDK?v#2&|ZD5_Zy`P7wbdAA4 znBWoRHU1k59F}we%{@{jq9{%^WJTOL;i=)&+3Pse6n=@IOwvzCOCMYIVh#%UgXg-@ zY(0MBTC(bTRAPmuPa87Q@PGiZVj;R^FXtx|#QQT(v&)#Ng)ArUSp#Mm_OHN8|6YJG>7N{hD6$WuN zn0)Spb((BVaEqC-j4}G^#WGSmy72rR8hc=pRVIndZ8OqIMkH9M}k z)kbRUE}UEzfk-u}rq#7far|`S`53QQ;UK?W&S_vZzh#$uvmchuEPKtl(2WmYo1Iyf z?i*5FpaPX}eaOW$eYIenR$;U973wPq_%ii!32b_(k1muPLGtKY0GOQ!>dOR}W1AtI z;;1ZSGwpL!ZuPdhuEN-vSS!M{=1blcAR#P$XLJ@0FmG0n6+F7)l;+3+?&wvyAUT*$bbqiI+V^qdxuDR~-UWV~X+v6I{uKY=r0 zYyrOeH@D3gf5V~Zd0%+20aGEl-zbtpI~$E@u=&ubxgEmDnt;w&)5Uafl+C_7!$k*8 z%^cQ~vQUB-_^gF-P_WqMm?Qpc!pSeVsB4C~D2j5iG&uB-f42(tp3Pgd^aarFdnmvD z2G*{A#d;{dJr3L9n4-~}yXA2d`U1tbYvP%hN{E~|aZ}F8ECXf%ae}<|XY8tLhv`jy zH2ANb;QJWe56R_dPE~{vvl%X0Frt zB2Qj&plQeG5QTBYx0EWFPE6bZU0Pcd8z}*X1T4QI-R)yn^kFCX|H7WfIx)x2`z;@! zdpSMZ z?e~KNU^tGWAaB+&H#J21v`))*x|w08`@Z0ljwn$E^-d^+{#@)GB}Ib{M~|UWjXU=H ztCb=-tOtd%k_9F1v$ae$uf)_kmj@|!81iqDJ9Fvkn_$zn@O(lKZ!bTxjjZe%w=FI> zv&HT)!-fKz8t*0_!vr%=CPF&FZi04&HqK9u!+FQ#5Yj@O=dr6TOm?+Z~B1ru(0}Eo<+V3uAVHG z)j%x%gx4IQ6!sjcL_l(si|cHPX0BlhmUnDVhsocs%)b)q0|FrFcwARpWDl36@(M+K zAX%pQ7|WW>+@jLeNsGyiQZ?|G+b(ZSA`EailBy;5)0~?Mc+m)V2$S~km{1}~Gdg?j zPr7e(p;wg;ox;_nvkt-9fGNr>B5goT3(VR9qs&ic1VbW74w0hNhn^IBH&QfrWH%x7}psWNT}0^{EV& zakaeRix;9*5xiIax?Jx9guPgNNpF9U=Bgva>3Ul|Qtj>a` z*tUdB*0bnmg($fMrHS;lYUk|_36wvW0zL>Lz6X5e2}j!HaLfcX%&Z8?fxtqkhpAs~ zl&t?_zEb~ctk?0cQKVY-{7mLcyA)`i5}+Zw>5LIA{lLC)C_3R#;*=a}}k4;&H3~ z1|t!WXtBY^%HhUWr)_Ws6cc_=yYEM_prDEaL#_krRPh_Q59mVR(>fejxb-IBW8GpOwG6GmodF7w;!|%Ca_V*XfMx zM@e2d$rO8RB`2r!+N``Rry{N<4d^jumhA>DS3&|$#IBBCkQM4<#RKH)ie)T1F@H3m zOV@-_LcqPnN?#cR-o=zcI!)FtN)Ducsz6uW&byvCaJ6N{RpUt-!sk(F?q6EH2%*5r z2XN{5{itW-+;BpbxqafC)}DQsiw1h+{&0MpDgC=&j+L@qS4fauoIwy%02DCBDy3OImdc!=Jp*?~O5I(&9Q*{giHSMn%-9Cx5ubT54eIw98BQ zh)v%54hW1tb8==6F7Q4$`iS)WgSu&7a8PoJFOJb|j1qJn9vv{LLRh zm8m?xl=Rmd!2|6&3nMpCq2QSbGU#WDGF*jgJg^1JK5fx$a!$#4&+HUPmxAx^vIYMO>e0Xz>Rg;PhZ5rE&rpzP2N|0V)|M8q3u3^;NyUOU+=(eRfdVev#+1zRb&u zRtJrutTDlznQFDJ1pDAQ+Sg!soxg*1FfsvV$hVJH$Kq)0%cVr1c*7}~F%6b^;Hdsb z64^neO5wj`^K#7Q&{afbr_^Nw_DICL2POZ=*>pQ4%gpq92i(V?P^CpYV0n_AePG-z zWWt&WpiG@L5CzCBW%@01gnt>j^5QUO>B*}IE@JKRdi;D)!P?#a74rkjQR}Z%@5tIH znHG>!ztiRf=D>{G2IB!SQ=g0V{wCO!*2$GCZIP>+i4Aat^VPkg9q~ETJVDXJKxK2Q z?<|sRjJ*PLuuDQh58-3jgrLO?9HuL138Dg()0M z?^A;Z0{Ou3e$5@HKRYgt&W#5ySV^3%3?_6eac~yh~w(KFZpwrtxW$AR2x6e zn}q$8wnq6#;`gqD-c0e8@V_<;=L%iLXR^kil(d5)ZI}e$#^WUr?d&Z$2qbPeg87stQwzCK>{TT3RsKuOdMe$9)65rZ?aX)NF{Wn9H}1SPdqd zX%a~cp&vqbU@pM5`oQYYpxShpf3eXKv6r^GbK6D)i>T;iiBh%Imxx2{<~g1C z4jR)i5B*Q%R3~rk#)OZN1s@za^=t^$Z!1ZtxTSKBztC2-oRc_S6BP4tq{404RoCH`hMicBGd@H6oJp3m=LDfOfw&< z(XS~&tq`rV>#gCn70uQohL@7#lC5iSAyI_3%;P(Cd9YzriPd3#w3P<`$eu=K#9tt* z=kPu3b7!xw3-^T}t@ZE0(R0?*X)`jVFBck|{n1D;d`s_@f!R_(Kkj8J+L*A(rI$vg< z_^?pRc)3X#dgO0Nh(&v6_AQ`;^0Z{-CsB)e7h8lb zLNGwm#h4%-va3lj4hRH5T;*=QT>D6wde=Zw8y;oc*el*n@#r@OyXsA4GE;z$ScpZc4M%fw0uip!JYkej%8mVrb_f9OKk>-TB9 z`8;pR2n;qmXOhl z(4tw;o7czMZlY2Pf>YupO!D(P)i8f&z6(JXO|G9|coxzoH^pafBGeMwFeHPO1Ga?8 zl;Ihw+W+-!KlciLLu23F2mMK6N7Qpq4AJJ1dfBGb@m@T_LOn;9MkC3^FnAVMOHoin zxc?mTuZqD!Ab{-YQPD?}_{OzQ29Xq^#>_M(W;JTqFnedBiCk(*TAmYet)@!Wgi*fg z(4>c~t0w-9q}MnF`bwe0$(@UP_Mz?W@R#-XK)O&47JC&s<2JxB)emceL!gS9y38O|pGi}@kNw01N9V70nqSO^QhKoux6`VnG`Zg#FPo{WV;aB=Rpz+qC^} zkIX9xb-)**JyjA9W6b$A`!d^ZaRds$V{ziyvE+6P;*=%^tjWrhdSbr1>Vfp9WAi&C zRCAZ<0A+;o*bhX=Kzlz&rHWC&n@NBDPi!vpxl1%RoVOt{V~P(br&;X--c%6{O-U)t z+P;+%4NpdcbmH%7f491Jvr1HCQ=5ZXC z#m2+sG=N2QMjy#j^Q=wvUNVtt9`F>)i$Xy{Y&swy{jUdMQ^fcF?RqHetSX5$dpm*S z3{PYBJAEWKmt9MadMpD{_~sPQG3_z*UZ}iVh6>ygyK=by+>HA6(xwMk@C0O+Z2&x- zg=P~IBQe{J$)Wb#wzm`baomDu)ShbxOh50i*+8r-;bNZ-JBdPfMdu|_Y^-K2d2>M< zyU_$q&`Y}6w={J@$Wtz-!FJBp5p7?leS7nT@`Hv*fVm4g%=BzUgVKXSnC=(EXV zd6Z;d> zXNW!R_9njSn_N4-Z`NSlx?WXQ-v8Cy(NT#XRTqy>9Qo&`8l9zv;9KBU@hO=(CE5#? zVyYVXogwz{LOaz>h0SmZ4f~rzkg{!qT}E$BCJ`hc1q=ia?W$4zCe`a~fQ+9=JQ|Tr z90UKk)0W6^^qh%Fr{9&kqKngSi8e|VOoscz?2yRS@d!b$onQAck z338RZS^seO-pqu1B37Jc1$4NFB?e}Qn43a{Ju$y1ruTRW!Frg(G-o*Pe-{!YxG+orDH28WEQw`{Q2HJL z(sH`^f3n+@As)g4377m@AG|sJuE+z;kGhwGnBLLK85^}v+Rj86&hLWlKa@DsUR~- z5@z} zx=>^7>_CMShp*k-j-*jWlAgN|%!a3eYNH8Yhh*x1S+3J)#?PR9KUO$|goTeb%F`iF zj60R+I>K2yUK-hS6lxPjV_q9=>b~#ggbCne+xm71=GUvD$L%S8_z(js6y2IlQ1VY& z_FZGwal@}(T(KD&ejFIs$)_RPdfh&fVZcTxFK2%*t#CQqiOQed zPz$C$+}OsvwYV1VH`Y#7IJ~oGPfv?(8x#DZDgRxvir(`liqziKPl6O_<8&3)3TZ?l zoK3D4~z^TnSzr2CTS`ht)_<|qlCveSOKB-(nO&I+)kw7Il>e#EC3n^4C-kYcvyYK zEof*$#M_FT0+-tFSco|PTT9#I$Id@n`Qbg-x54do8uTmA@Es9v8q{;7STqBTCWKdZ zd+A8yO19= z5_-==HPf(vn1>{%+lS43~sfWcga?YOTExZpB z?OK*ltZ(B|!-cJcI-H?>Rolpks#Q!b`HzZQj9Z$iC<_Sp?4eaYy;Ul%iFGB*8o26%^cED3A`TuYil2)Eq!q|81XBvJ*sYnt7exx z888l1YEviF{V%_7|A=^<4df~;`;XcnZ1OY*b}Lt;3~?V>+xjRglo(p2J!KC@l~&{( z>ZAhG$teuj?}1uM7@dDwLzQFj1`;1F9QtMWlL%=&9tAT^T~~jStMZei^d^lJgL9=v<>zYugi^+1;Qn~<#`M^X6a<+E=Iy&gX8Xds)pps`aNw5f%u>gQChbTB0y|AUc$fMl;c1&KsGP(X2Ddw9SkIGn}}`a)ZrF z&@rwM1iMKIfml;rL$5jQr5>Cl`!u##mlEX$oVik`RE`M3II}n(9@P82-ODE{-nS5( z2mTFrx?ObBO$tajzhv*?zLmjfS7J8rkX5ax;U$rL>ORf27B9%I7~RST{1lZCk6<)%jKDtZq66KW(5PBS!oEt&7p zCJl#MMWj9cXyVjpS36}Sq8EY~4x?jY!r5Q-&aF30b(|PApTycK$(;#*O{eexvLV^F zU|iIDLCC8Zl64Z*bjE*P1q68Zwi4S_|(uJv=(3yWD z*ISdwY8qNUN{L^4b*LXXU|qMFas;1h5C56Q)(&dAO{|_q=cDhZdDD!C*6yq8)}7y% zTtG}<%{61gudALh!T@p0mfViQq$C!JT#-qyI$JF7& z?%Ro^1HN&Q6vDNI3kp$cyJBfUW2h6Z_{1QZVX^jL)#=e}aYBy?`HG;4`Hrwx=oJ?WH-k(piU^%nbamXXe5if8eY@HPhWD_Wcz{a@R$= zb+I%}>}Uxc}p>-9UQFE^vCaD|9~}sTg|m`DuQNlhqJK2BNuSF0cF1 zDVOo0u~ain=rWKQmHlhRkWG(7 zr(No_Id~!~mV3OmUpLa2T<#oBK>C+pR?EB=)?(Z6K6xTMRGlbos`mJ`wcG$v1_Fpq z+vq!$)P;V`t+o;VA~djYKo0``94Kp>N|C-mQ(nOUH)i8g#E(CIhw<2S@>AT|EWQ@# zvTJ@U3S2l?!-o^&Sv&E~Dp#_=uw`!I~D71+sR3@_Xf>04u%qeL%?ijCGHRJ1itBRh~FKBKnTGj<=A*JZ`tEZ%m( z_pAzn_a5!n=Lz*+-*AV1ciNef-Zz<56%WEpF?h#4#XE-q3mJm}p4pbrulLt0%DE}A%^u^~Q& zx{HMb;5zOv^RL$bZub=WL;iio`~CQv58PGMKXV*TO&rGmR|A6ON?Q@F7s^m!nTLX0#4e>l2@JQ=>%2a<)L#||dk zVQ}OsO<+e;(+I!QTu-4*i__vjrKJ_64qlzwF7QXpndlc&f9o$TirgAr(p(UpA5k0m zhY9Pl_Mh*yBG9pGZnbH)!EW^ZG}q6eWrLq4Dm{8qC2>{}MWfW`je|2gm1Xe~dsP{*S37*SJ5;p!OZt{K0Q&{W!%;;lb%s^Y*%=_5IM`5PaBhc@!q6z6F_I$*q`APGx$cruxTiV9L@55Gb! zJ+THsCs-CEYSKBhv>%#;p@bRFQ`LiSrny^Sgpmc+S+sg8@C(%08cG%frqJtj2T2Zx ze)_g#!pI9oSd;myG*s|RM5$tm8H+%|QI>wQeRGa?5TN$j4w{qM4$~EZwsE8zz%5i( zN+MnpDgC3(Jh+1ktuE!q6o0$Tl>OgwH^kNRD^IAc@Xy315r|#aZf-4o^ZVWG)Fs1& z_gaD9-NkBjF=;wN8RyAxq-%#^udB!}1--D#nfvw!b! zto_g$#2`pfA5V`1qE5MY{v6z++kqGI|JG*#zt;Dm{r=_Y{-!bS zQZ()09dafr++Tl|7`y!@w5KKGGl3)urg{8}=`ECCzBApLMvgLc9;OrJ?I-z0uta5{ zxm-}KewU|}70&u^uNu-j0+|g2WDt8=45|&s6+k>i#7_)%fV&7ePz@0zuk`5$0_E6ti&G|$35j4_T zR{z6HL_?!Zk0hYhD+Wl7 zus(Y-r#v4lKMB6+TN@?)(IXdv5P|~!^E!~M@DoEnD8{%!=+T1Z_BKHTE4I?HlQzVm zA?P|Nd}DBO1d3W)i;_DUM5v_7j>Pd6)aCJ>V1bR>`rqG@BxUhZ`dt7ZgNRChi9zQQ zyK3-6X4Cf%1tOKy#`-O7fD&mrBWy%pAwx0hzCj-PT;U!&cN!r?u7q5v3Il6YzLw_S z@&O<5-(A>P5Sz0YE&WCiUmQ2spc`x*1)90-k1S{woWC6rpwlTJBFT z!iWT%hhB|!CfDje-wfgV>3MX?Rn)=tzZcE>r~qq_*R`R0G!fhfWH1M1=YOt#i6CIZ zGhA$UoG)^nzZ*rUdve)KH5ZoqDJ(6^jzH87a<%`I9V$?lAfbKFbjc<`@XCT|nSuit zH{>P+zvdrN_klcgZadx4XY}RTr2ggPt+c!n06psFP1nltgC7VzuiXMjQ37(Uh3&om z6VU=2@!hp5x<;I)x#o;xwZR$rCby}-xeBf<$efiSr-1@EC_0l~DM}yQL|QZNv&OID zgkQN8M$>?(8UnktWhDt!4m6+jJCBZ{ro<30C#_`%1_w~qN7?ki9RsxoirL3^KtWna zAz5l05|HFAWa3O@MD1hiHVTxV7Tv)(mct8+p+o2782bj{SH$@K_7PNU$PSrz|LZy^%wQ+8Gc1)VH8!C~ zue}A!qg!jc|MH8>xI{n>>RWy5PThqFEt3z#|G?TqVCY)Mf}@C`d%Pwb4lA^jA) z50L?ZDeJEaaTX&g46~q~VTNpqR%b8LrXpgWw0~l*n~ZDfZd3!=_8OxI7BE1+(dkzo zE)ZS=6>N&-ot55(Yn;YD&a>;D4a|H1PclBO%r8_Yfe7p@%w*m{LQ&+feo}Y<=@wZA zKFKz6!e?}Tx1o5w7QqH;q7eZG1=5W~F1qH0$f4|3-x7w-y^?lcTn1gyj_Nb-Z&}rc zvz+-arV$+a#-uFK6V+C}?0ml3KZ10BSI1B%xca-W@gn)kvn#_qS)ccnDT=@XE%}{o zl>{&C5QX(H#U7FevLH>?JuTnu^A4TN@G@qUl*JfmbaAkf*dU0W_91}ubJHJ@Q#WUx zaO_<-V&W?Qqr18La6`K8bY<0hwQD&c(@D`=VT4aKh1v1fnn_N#mz<$jHe8a+D!r+j zyuAh?NVFP<4Y||E?`NPnCcO78H>8hfHOXW?ET1J3Xs{)m1N~YnGw1JeRv86vCsoO1Oog@ zclZz=u{5!DlG=hB#Yx}TH?--??2aMK9Ia59kDw0r>h=c@I*yId&Y1@p>i>g{aJx?L z2S%4RU1H@WQjR&80qi) zBCkEF+dbtTC*L&-U6*9|mZnceMR zH|{b%dTtwvUDFwQYq&nfw$AnX=l(BZJDtR-DGS{T|Le~Oh6BzKq(l(1<0fj-oq%d# zHtePFM-pq7L=q7g$gpRgsZCCFiA9j^z&U-NBior#Aga`s?{sr~$LI)+^{Wb~qx3-5 zrm@mEdA!%C0a2R#1imA^GYmM*1<#_YsE2s?-3bO%Qzr(Le7#}7;5a{g#(;N!`0%*Y z-7xX8dU~Db@d*ZW324_`y2&5L={!#S!3oq|UK76Ic22?RY3vL33!9x-Glu&C=+6-) zVGfjwmG3uI2KoEG!xqHElFwh6+`47d>M@HiY5VUN8Xc zmXwZW@Ll@=>^&bItGuWVl*jgjdzAPNT7R1RxOoQ*sDlCYe>N!VocFN=FNVfJ@TL>CQI(7NWe~A`Uoz0@SwRU?N?BAd!~7o3YfoD zhZYRjXY+xqH-UUV*BH4cKqG+B3b4$A#6S#)AfKaQJe;4&lSh0kAET;nmfpEG4urOT z6VndeHT!)l7Sf*E?o5V6ZSDT-`9=bQDS-ji4lENWBdL6X$rlpfxF4445CM zH0~!N#?}~o@WyVW5JuULC+XQ-I#U3nmQ{ewFdkmsWoo=|@=SZ8QOb$&u5rQ`Y!)mp zahm7%%bt{i)(n&hd~Cd*BM2$u)bt(67AC=TqycK>fEa+bZn%L{N3KoskQKh0VZ^Nw z#6Tc_X*}PLu|_2DD^dW)wE?dg&>mYPfH*xj44~K#0}hj${c%Jw8UhxK z;FN=0(DIvZ3k-jf%c(0XRAsK6=v;c52NZ$;)~BH75F-f_o9KZ@QO0<&> z9um$41>h{Rnmx=5PUW_@47jO4`4> zDsw?WO5B}?&77eeK}d>4?a9*=mEs`&p8CM#qPXHTx5Chorzn@#Rhp zvRbnLL|qayc`&Pfxa$@rID*TI8kDjfmIa;>{h5_Gukqj{nMK(w+ zIIIu*MMF|^KzGa^M?b{S0IS}s-La+!MEeg=bSYRt8ENpqSDS^m5I?{Jg*>xk7#-^R zfY67-`Q%1@M$M>Fjzr71(z2{C$nAo_0RJ}5BVYnEDe)0x-85Iojm01)sA3E(rlRXVjSn4qX;J?g+h=aU$%ag^77Bx2I1g z1P>+4QMkf>f#dRoO*}MRC>h^0QBk-N@g=fOYN+-=n+6#Mw2-A!*sXbj{}a140lJkZ zm^o~oZ~{~AKtVVL3t}V5v53R~K5Nq9iWvK2?|TM_dFj4`bV&D{+**=p5%wadsb(v>g^ioFbX_0QR()H3L1Pp{c}MWXsixg$ZGG)JQtg zJKLA|z_x{>50ueZ*Ux$CD7|RKAdZJ(z$q2vCE`TBWx#|AP?HTxN97TClo94}nnNgA z_YUBLkW8l?(}HS=QuLf1I%l^nj^G;9hI|XLS_Zs;#Mo;dN7{yvhb@&X<@Z57w}`+= z3Hvt2GR{wpy3^CS$sO$Ao*c-50R-lkY>(#8rufydZJJL%H+;^V>Hm z;H)dfxGVRGUPN<@4FlBQF9tM;aB4}G{3+{3dU{qjh)M0$u zq4~~qs1*lAo>c*7U}pPA&l&I&7*MGnVhG&CGTknHkq1 zVi}9-;Yf>&%ZqfGXt8Y!n4)%>e3hqhyvh_Hm+e+8T-eVvb!>(nhNS}td}5Ym9}lvg zElp)DJ@Q4i8+#&*n(wy;&^O1kO;O(UA;WI>1X=+SOq(+95TI{3P;K6;|P82lSudoxqQ+qfnv4d z04EWLwj->9Aj%OM`Ef7wivfyoL(noko9NfE!8ZJkplset5KVu4(x*E*Ot!|YsCj}$ ziG8wz0YPXP;O?f>^}hIm0l#g|ZB$p-RW}+BJq$Pwc{WYG;Xs0Og#pt@OeMGv1K11N zo9;7JT56>y{H5})BiJHP7y#0%U2Y2TAvscLz^9VTsw>M0-(wyWR+bz$l}2OK0peNe;6w*@Ep!5u%3UHKQj8kBg6bCjs#pM z)OQ*nD#e~N9bBY1U>y8bjJF~h$RvpF)r8^55_5(bC@OAZpiyEir;GU+{*|6Z% zvTMeMmHaksL0fXf8S?8qI6jHIE&c`2jxm#bx=)ZvVU0L}6b9@9*TzBGDC6Fle(86t z#nE^Du9(IyQm5t48IBVzxaVmX_i#W{+RGpQpeot$1n7%3q7)DlG&Rlnm}`MUs+wp) za+V6>cIA>nj3U%SQl4{Fmp#xi`K7u_9o-e=M6nRHxEPlVXXz@yQ>SRKE`=fpxAdzF zxaz--1V9Xso(v1RSJ!2FBoO2Ti6p{_4~LWJPX$}e=V+%k5^>N*!Z7&#&-(-3@s*-I zpYj+-h#L^DF^tQumT}hR77P}Ra;Hu;*AUclkhOpT$8+exW1E{PNf*CmYPld`-D!?` zu8p1aKmqW~nTjKfGUmS31T`4)982ZIm0Mj1Xa1ahPb-g5;gkpSBn7N1W+ zfDJ06`F?O@ZgO=Gq^d3uQJJE{apHB{yr4@jrTe}2y>virXZk+| zjfE)IpIh4XB1jy_WRh5Zo3Qbr_poQEKw9hm)foV^F>H zTi72hFGK%pJfa`%6BvL^TAhG9RIdNAcRpvpTYpj|V^h{zfe*kma=YzQ<~KM*R1_8n z7@Zg+QXUJJc%-2<{qdxAbs}B}DdbD&a#tN4!ua3;RuS-3wLO5tKLX7ANozw?l?H58r>l0+@_@F< zbZTK_A5|tBnDVS}a`l4WxH7;tN`9T*&RwKTqs-NUO;$hn;qr)rYK>6?-laFrqS=KJ z9sZ|94o|Xn7*}#{SwU0W2)Bd?bubkwY~O3doG#wbO@ z(JoX6PfJl8DU5hdHszGXL1@oVdK~mw??1RSfTtCQVuJj8De}Rtvm|pYDnJhGy;&gIZyN`xAqP_DFFaIfvb*CjcV@ z*!Cd2*kLjZSCck-^^0oUS=F#pVDj5&mL2JEq=h0A2l7HcB?G_(CV>_St+p;G1XFLf zyQHlmDNE8O{Oh|{`jHM=1BrYByRm~K*$+%q!hBRKv*;dM(;N_Z){Xepfcr45vM}J% zF8}Si8H=(eFaf)m#~u|Q6O2qa|KVJr^qQU0X%xXzm#YX2_mr;Hk<95*44>DXHyla| zusuKOiZhWOp%s` zdOw3LT7eGyntM|5W&&$}s<(Mc(TnROLebI6Ks*XRy-Nl;U-Ib+M+*u(TDVE{qXDvl zt%8n@4p9pkOBGA{?nvA3bP8->2#dlsk&q4CevCH3=L~r3SF>Vn%bnh~F97m}M0B7A z^uiYxYVMrPTEB^Xk&AsZ;G|j}r~zRFU~Z5Dyg@fQt;-Ub6ve=-21LIO*YGz10GSh5 z*Th!$ndgbOL{^D$Xvz{wl-lqBBZ_1}j98a27ii(pu$z=?u1Dsv+Seh*x27A@C|ZUp zXv8xSA{!nod+GFH*G}4=W zNszDX4J5q5DD4@3mp_g;j^;!z1v^)L9@MRK`Xw$9Mli{TY5@=|wj?4qNum6$Gx#+; z2tAxZZf&3EqhAVww<8@~-gP%sQ>h?o!y_$OuN}+s)P-4@b~{r2W8bL!SbCPaFb7CWPWlh84EKmdF$NzJFc0fNc$TB~ zP_2imaKDqEu=LlP!6o)Dz!N$YUv`n-*UG8y69p83g9hx@P})yq1Hbf=0f@jaf(omr z9gIb}O~w{!n#N$OfL@uWJ@%E8#k2>>NF|ulQ!$)qZ`n+MUFPY1%@R%R9(XCTw-5Q_ z0Oy9zO0xR?RpvTDj0t?|s#AWT6EzLcpQYHt0AzcNEFYS~({+=DKejGN@MZ=cj1ubl zV*JZv@qzx(?W6(DY69Fgb9@Se?|Lyf$p)451X>xX6PVkaCpB=;ZLM*H&@3^q>Gpd3 zVLxl1+++qQLMPaUxIa9al})m=^Eo@WTT*iC_m+mdG6}Yq7sgndzW-GF?k;ronBgvm zzhlh;s=eGjk6V9C!q|BR5Bt?Y=%}q6I1Ejq9$-X`1xKLY z4)8ShS;i!I9Qzd|M4?~QDlTMfxijn|fg$;;x`QqnyXAN?m$cF$J<&uX=@dl@nQd~U z&oXdnLH|-qYeau=rQE)_RxN^}-$xX)6d!PPg4=ik(F6`!8K7gW;Lij4iRgiW1+GsE zlO$YyVH9D3Re9%JpJX4P^Mb`R4}F1$zt@)Fo$Ijw%0_Souu`3dnW+Hj-*2>#p9@`Y z7*WlMq6f44$O+{2bMh!+Xx)(^(&z#HHYxdNm`U$#uk?jKo@U{7xtoG8q!Ru13ncU6 z>3&M}vm_+bxen;TsKW~bk_Hp-slQ|ZpvW)sY-yZGm6zO$F>;)9;+Mj}ocL*>x6p=} z?5r?C+Z?sbV-H*e(Sa!OZIsGilFmK)og@8VtPN4vRf~PvF8czVl&}}pSTS`$+6uil zTT?gFVa60V4M^#gz7>4t2}tf)ubG$GN-`NygNk-8IOZ)1%v?Ke>N zaHf{rYhGxm^7V$STN*c07Ptlzii%8AUBJa-s@KKrF^0vT#+J&shIkT61tE?D7b`y>CAKg2myG-fOmYqPL@t(kgj9ib_T2$ z2BfzS$h~w=-(so2Bo!0z4X%f`@3R>#-HM0{S`(Ih+-aSPJBa+IF!F1A{g86JMHLzH zOO!1sd;@KXh7@2vxLPrpny{;u$2s-9bkJCpK}atgkUez!EG#fREA#c+<3bhSaC%CN!#P^G@S7^Y1-$w-<%0TJ@mE);b{+R zZ-47|^SJGEN0}tjJG9Dud&X`;F4dWz65%YhWB>^$HO-}hWy=L)8&;|#AFPoh;sPRg;-nKA zP)0W&Q1tY0enD8k%RNHkz?+{(*<85NaZN5_yZ|x!BO-uRui4Sz5%fy}ggEUY6Tc)Q zq52Bcxlo2zWZxT3AMy)bwLl^jRGI#WkOB8NqY5&#MWyU=ZtN;~Vdu7p#$TeLi8bA! zCK)qqW^$YusJgzeU@JZFv9A{82rnE^MYxRv+gUk3MRB?MfbAs=L<3$j;HCp**S2A( z+G@yE_GIlcYIO@WqK@-gv@_XWaoQE*PJ`?%r31-P!WMoQr zWO~h`1fY&-D^&OBg#pq6f!tiYDCEZ~YEpm&!Y{8!1wlw3ENE92nATyx6LM%3(9TdO z_CxbLMFAA>iZpeeM?vX~27K>BFL#OEGD37$XR3)`-YQ;&Q6Cu~-m*B3@XK>XW{)fL9mj$chwWcZs^%V?-3F#R01Z zc=1d;f(G2Ss=j=Cp*KH>iZNC!q~s~+n?gAGe%?w6Fgj5mJJ?h*M6m!r;D*9$%GTgq zLdk5*AL8C($Uj9k`;&_+<|N6QlYoypmoq?p`xPM|c|>vdq{B z!>on{U32auUA__oBLHjh$Uk9v#k*$$0Mxctl|cg?7Y(=yz)J=Y41KPwr``$W>K)7= zGRJ)6M9aHjGWJe+u@eZe(;_=wvwCu*`@+lH*5tbmnG~ghOwL&3+b%wDn2Vti=AYID zh}xu*OS248s$BFd(~`9)>e@PYktY?$i(`1Ql?8g^R?T2xK6YznZSSA434PD4t!$D2 z5Cz^$V6>zV@d*Ur)mGUx8hqz3(?t8aQ$QA=Ds%v#91-w5+scU_^LZGoD#Q(vBq`{} z@)wOs_ak9J#d%>;n1=t{NWYC=ML5?jj^tfhjBS?8r~rQ<0a!s2Er*;| zFA4JCP}!J#sIFlpN;#$X;3l2d#30D)L8f4B4x$Rqv)bK)8a$8yXuqX%5rAwi`S|@W z-h=ip-)i~YKM3Nn@^>=wB-46tTWnd62sows%@pgL$7D;bo2l*v=?6S!xv&8`)0vt7 zF2-}n6s&uXVYeV*^m1%)KPQVIWodO(pqCKQs^oN6MvI|bC!`0DsK22F9@XTyY&cB7jb*K_%ML{SK2daQ5k@w5se#X3Nw51Jp^_E`OI|6upT zSo~XAktsn2S>G!blsRGcC@-4^X3-Isxa*z~6%1+hjmy6ffCLr(5et-V0`Q6f)CWFN zru`hcbx_g`X01S%6~~2G;G)WIg&p)CHcfKg^Q`u?n+fty$)!!(R`>Kh4BHQ$hynv} z^Yg-O)dfq%o+z1tr*Qx39Lp6wqB~-l=+EyTa>GU)%K=468q2Jk#g<@Hd#a)^K?dSY zyvmNngf@Bu{ueHw8&#YA)Vpp=m0vSJ^?~;~Sb<_&5)G+TlOO_E0V@I)?%}zc-WxYn zay-2m4Us~iL#$ut9d52HAivQ2klzMd{5vp!HkuMu-q2Mm{4 z!paDyOrbflY}SQDlFf#4sy%s?q-9fR%33eO0*9>a>my>e-Ngl%ojM6VP)NY*cbR#a z5q&EUhH2*pYOv>pkPzSqvcm#5IJV5^hDcnpUqb7!Wpg&je^KmK?KcaK%$|?!mi#B# z-1GE1a>7B-FMZQJ28QLw6ks!9-m)n=Zjz+<4d&A3?Hw?NjdN~7;O#oWG2OAhR*LYA z0if&Ec8XQaJ)Ck&1%VdmgsGkL?@$(Ym(^0-z1O)jMDNd0KE}__rL4! zz2%_o8-DZ6JRO#uTh}}JMAU0Jp6|*9gErc*8-u zW!^3;kT5Dw#$R$3p(=P_SUpcEUV1%4^2s;{=KgIGdf3NVcvJrnzEw@=8|_t-uaT8C zFW^wre@qG>p{#GwH8r9TN!&mWFdT4~L&P%6t)*Yo zb{l2EmfJic5O9C!AXXHsd3Z@hA0~bEYImncB~T0v^q4AF$(4xJStBNvuuTHe&6T>t z!wGX|ew;PJX?{BFr16$vC${Lev!P$3M^TNxeP#i-03o6Ok1W7V1c(KKViZ2SE747w ziqv&cSI5{S6^tZg)mWJuRTjTR03z=q-zGzzN$uq-b06 zU{@ydmN*JfP>?ONsG|qE`^7bL;#V~Y+Dbr!6`6YI0u%;zC<(}-&Ljch#Ugvvu=^(j z;1&zK=W79#2+SxsL5Qy%l33_ge;`AY1Urn?nh@NqYL?Df{T3``CYhP66aC}>HZ{j_ zOF%7bgJ9ex_X)6gLx(a7W0l6J07rWRG-Pc(ERUL7cgK5EeZHnge%5M%iZ~z;^%Ut# z#jE3(g9Hn)@h(76G}lPwr{DJv1mG46y!AVZhEAShfylK=P)i9K-GW0FJdG-dC^m+* z?QGRwpVH9GX67G0wlMu#>(qXIeY2PZT)EE*Ez(#2uRq*CI}u=d(`I&egnF0L## z{a@9f@sSuf_ncV}W=5FbI;F!YBY>?qOz| zOiQwgW2#r6#YE>q5}+lm4E3(Y*6wuN98y-z4{X?4)8h#cr60B!Y}O7j9z9+V1a<`6cLawJPdX;D>(KTXEDHaYCV%l zZPpZ;ft1Q2^=NT{f#Y_cfM@zlwqW zt_Xb5se`%E+-MX@^Qxjt;Xr?M%!G1E=fb+cnSVOX9|ErYZa_#a6GFazU)2ucJ-n;!aRhp)4% z3MjiGAr=e>axD|rV3quX+d7f}#jNpms$#9BZL6*5r$N*!5~xs*Pgd$*?mxb7HF~Qj zS@Xd)=VL~Q{~6gc2C+&khQgLHKC`nSkQ7AZuZ+*X?(mI%L zRk*S9pMcR=!o7SUsPhxO;?i%f3Q|wIm*fi!5PG2Dtqi(_@U*-pbxrO0+P0x|1_PR{ zZL2Z0@l;nz`ejOafCi##l_uA^gYC)!h5_M`&@wb2>~lE{+(#D}4_G^w0Xs@^B~kWI zZ?%AbC;(OjI0OS7;gIh~CEGe7Aj?#i3Qj~MTL`I04@Ie31x(s?d9}7zWIa5d@D0#? zzZY^vjn!lZLw~9Y21-#fj-3;CGmG}cruOH;X}J@QV}8HT1o&oHBG!@!2vIBXfVFEq z;6(v~G0=3X!r(=Ot0wh=U+ZN`cgpD;OrESc7B=QkCSMslOjpemm z&%{PV+ejw8H6YT%pewK$9BtPNn)HaoW&OfX;q2YW=Yj*YB%SVG`oo+P#lI!@NWq8x3=_ zPU%9v{cWk&Ey*bs$IU}6`t}d$+QLoy2yOrgz*$-b*vvLlTZxdkKDnX`zWsBZp;B03 zbzJldIMV;04v`Gt4r#o4z@bq#_tOuM1pKoKa1#N1;dlIw#5nYJY86z@0o05q*c}dL zT00dWtv9|l)QjK?dZWL^2^0651vgS_0}ZYL+tS1up=pwp0WgXqCbg7*R9ufu6Se<> zdOleHYvX*ggqgrVg`h`#9~+4j0_q-Hb#4bQh)AByN}B;Z_%V%x)Uhs-pa*<2|H6RO!e5+X6c8o}-M()grt zy0nf%%Pd?XXElBzo@4Eyq2JS52zBNPD56|P05=Yh6utLn#FR_o zIa+q4>U%5>)Vly&oUqo*mF?|OW{2?&}RfX$C|Y#pS^uN=@Ap*0*~2>nWdQaWPQ5V+b0vi2ob82@RD0{rs|a8m;1 z1Rj%zhYYu)CJwc|sEx48)6FC;kfZh18i?BcOpv$XO`4wi*j8j@w39~|612z4LIO&L zvSXz=vJ)z>hQjNFoO1uFqSVpRqAUrp@lLn!7N_G(3zeZ>oP}YA%aWRGQ=4X>XAZ!l z5>~2KNDgrG0RI95Y(R(^NO##&hZ(@%%RCtl)Ojs=_San14|TBnf@6l14H(VH%0IzC zau>%QF^%VAAQ~ORfaIV(C`EQ-;Y%gx@D5UfeTJ-lP>;I z08o zidSS7<1qH+0*A!+)MP-Gp3(2pD;Gt+F#!L%0^F2c;~?K@fSqynDH9+0M2w@ihpjHid0o26=fa)8M!q^RR>;}=r8t6dTD~U4lnml1h{lEfIs}` zn}1IMECbeP;7cB`NV_<2z%d-~JHvs1QJ7RIp^hwoztuYsUZ!1ZIvaB*V`I4s27)fqd9xW*>reWxm_=r`zOGRA4W|GHJTV_H;vctaVf*MFLi+5K+nL29E=`E=j1CozK1J z>Hw|=;NRl_GVo)ujGl$$6^xAk0D&pPI9! zvR2^)`C}NcGgiP`3FD8pL!$x2wyGIk&|OuU_=)I>wSM_{=z=(x`46@?{deYs8a58_ z75y;a-{!!(zTl^MJ|Y7OngUu|ffoXAD@EFZw!axS|sZfZwt9 z?*$MXrvMbnz1n}PI{H`2 zKRmWw%;06Hru|z>BCjVNCOs{VxoWW7OeYO~oi2?LWE0A3K-@WVCukwHEk@1uq9I~$H99KhpHy_~u zOI1tF)E@eOqyH8F{5Lr8=AA$Gz(tC4yd{3+xR(yjh^2Lib9Fc-^5?pI9UHA(kGB$$ z?JETV3Wcr=kO)`|5FWf3fQR;#eqqbYV}n;M-4gOs$BMsIf4`s9&msT!-=!Z0TxHEZo!#-4@WYQeRynOEk{aOgIU;wQZq^ylLL4O_s@K_PJ zg8u@z7xcq`{~iavgC{P7xecWT$hjfU zkq{8l2Nk0rhvQ(|Q=$C|-&tZT9@ssoJq9Z%22^5zB*2QmIwbFz!v~xz6Vv%|VT2`e z4EbpP&HD30m#ifJRSoRFN&jmOy!}%i)5OuR1fFU?h`H_M77O@)P|*A|?&sKD?`G}$ zF~SpJMrDEH#v3)>Nw@Qrgg=$GdNyPRu za(^%FAN2qCIKcVD$1v-8HWt2Lnk>e?z(DQ*7DP-0SJVE9@sZW)*;Xe0m=D>3*%^mn|Yfbe&!A5e?UJRxW4QHzq#dqH~Rm}8~`W$@tvk#v2I9Kc7kd@oID{oU@AW!`~HB}V{CF&6w@`IIp zYy5QmV*_&poqt^T=S%uU{{Mgjsu%o>aW>h)cx&1N^jcOH$Q+6$a`}_Ad^z;%79b56 z9@QRM$O#%)7z8aOS&A$N0*d=qz3p2hEeUX^$k*4%@r(Rhc%i^mlGGF!nZy*Ff-@FW8yVbM;i6e1m>o)5X^7v$4SmCOtb@%SbA`+v~C%78c^ z7JTP>Y7i=EbP0UlAj7xF*OwSri-mHS_5Y9Qe=P%q1n>I>?tp7!&^$7o(>E#5WnsBF#xYt+ z)=9fq95`toHEEseh<^RC?=^HeM)u+1m3qj(-o78V)Qd`!L4WfDFRuT!`u`7Ez)I>* zeGGYL%(Q5eh}eHsgzc3Fp}kL-u;WBlpUp{Y%~;k%KRUU9HnS@BM!nW=z|B|WyXnw( zrIr4#neK=G*Y&^V0Q1&A#_GX>pkf9Fb7(18p{vVg#1wj=N913Rd8?RA33=N*(t|JkOtnwC>Efn|1p>U{ zfo-S0ST%&-9vX0|YQH!{{O+@F^RA+=na~m*$GaTz75aS1X1@Q&>wnFGRS*7L-5I>L z4MSo4V2EQU5T^%|;vN!AF<)6)wyNJS{UGK`Vy}I{)Xm3e3$s-e?bH6cHj)7531Kcmbmyu z@}PtVyagIAKz}3G@Z2CQ)kUVR(t50OKUK+3{0_3ebv$sqn|Hd?NA;J>k%&AK3O0GJ zkU^;t)=ShspfmFFdG`ZGVkN9Bb@0>WtxtSre<%D*0$Sh(p$e1iSwKBs;GPGVfR3*g zdp+}~H-MfVD+67|3}n%>?6*Sf&8YY_3{2ev{Eov<1DX~%<9TeJRvt0zjyegpgrYJ~P$;3zMlb+G<5Z|`Ic;L^%73&{ScEB|R#S^B%IEjnmn3B^t z_)Y|y4hTFJRO;FFHk6vLxA=ds0CM~w*_F`8985RK z%yUWKM|`U<&>pz1H;rC#LZfUD6R1ZJ*U*>{EA-#zKyMb4q3bs3`_lGXvw$9;PaFjE z<$I3(r@ht365@4=J620(-E%n)IN~?xdlvonG=LnDKfOs}>+Q;w4p^rC;SD{TTOu`G}Qua(f>F8Um{WfWrZ9f>i_@%07*qoM6N<$f|48q(*OVf diff --git a/SolastaUnfinishedBusiness/Resources/Subclasses/RoguishOpportunist.png b/SolastaUnfinishedBusiness/Resources/Subclasses/RoguishOpportunist.png index 4b9d2e5cb242d958bde02e8575bbfd7be8109b56..ad52cc816356a8f2366020730d32233a4264b02d 100644 GIT binary patch literal 31839 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 literal 40669 zcmV({K+?a7P)KmURP5vE-+0>O0lV)QA$TeLPR6;Q&3MrKtZaamvU@q9v>zsCoQO;l~GJgLq9!xbZkpUMo2|P8yzIH ztDqPdAiA=rZf9UDDJu;S8!9R;cX4f$jDbZ#KW1TGhktfqTv@%fsd;f}dUS9}MMImD zi8C=ZDJLo-ASKVoyRWC4b8l@|Q&TQ2GRD8Nk%@or>De^+tbJ4 z+0EkI(2a^ zCc?b4*VD_;%)+s(rqs{I_x13`!@j(?vAMLZ{`>Hbi-^p~!vzKnKR`vav8z#0Rp{p6 zfq#95f`DUUV|H|NoSK-vyS93GcSuQ1(a_9lYHg{gr<0M8lfh=X0000fbW%=J01#kx zibXM?C)F^YiM?fB7I*T{!o0cX=I!U>n@Z-}@yhYPsgs|aKQx^TyVkvN(P6^&CJcq$#jEnde@F3~nw@rVL;S*yqy*EfzL-b z^=P2$7{g$w7sqiggd_=?4650K8O1M>&l#SX#_TUo!k^7 zQ^8HWMXjZxaRfz}STr3b(*$$;^4b2*ffq_f>BI?UcXS9;0USw2(-f7CCJ_in<7}_k z&@bwP!EoFl$v$TqWN_bA>hO?02$On?g(8q+h)Gan`h+C>5% z@6Vr}lBh~LAmq0;@2&j(>^PYq*`o-4?4GAAFe`$EiW~NG&QC3Ha(NO{NWZyA>Dk~h z2#F_1ia=d!qg|EtckX=mh4{{+%6!e@Pg?iA?QPjs1M%k%QSaWj)pwe%h{e^_mE)sF zFOzAQOfbhd;)E@F^WtXMy)Mr>7dGJLbhwzXej!3pbQ02Fv_2fekM>$C#Z6y`f!6X` ziOUXI*PzE=d;4Yg?CZB>+gD|wU#H@S2cFrg<|Quf{XG-Ctu;Yh|@t zH{1IAua#7_P1e5u%hZRrYa9j~LLrlXrxR@YObqZ_SNupCPGcrKM(LL$RG6{8m3f9M zfs=dLibcZo#PWn&qYSR7DT5l8!>w0$ZL@9hvE7E}hptWc1R0GI>&=frpA?%W~C;=z$sw+O_oTq8* z8!ru?*jIY1jYd#lHEHg(2`WGU;PU~neMo75aDi)KWLHxB{w?#@n+uDJ8#8W0V_DnO z^wzU~4D!Kt1yKE;2*vvbsL&+YT{6~7hlh?SIA-#MBD9kxOxMnu1R1%Pb@9af`~-p8 z87hoE{6yGfeVrcYK| z{Q3NBAa!~}4#$pP2-v@bLQqjG_aNS*=79krn12*Y(Vkh1rU@tExtw*DdO_w}%0B1V zeP`Tc3c=C9Xr1`8dVxbTB5NE60HBiJBS)h!dlx1n(NOH9V};S=KQ9@Xo_O$~XiU^X zYbTby9Un~I)vN>{>?9f?gT53y`d5ZoBk-l|`*!H%L-2_aP&`LT3R>?@Btml`!&{k` z&IsJ>euM~(Ia>^#1j)#otG~F?t1^w~%A}{ZZ#^wwUyw{kPZ&I)5;V7V?I&xV7v1ij zpVgS>%o7Wxw=8q+wfwUC9}m?FcZXB~h>1BPR4_%x4mF0WWyMfkY zH@$Pt`}1+@8)srDaGLa2vRDZ82Rl=0>&JWb1p<+*WP~htswJFT}*Uq?8dB}rd|qq#RF1_X+)L}vdQn= z$H>$s<&1lEMc|TcxU55^b2!!|pb9P9=`{3tMe_~LIgxYB*)Y|o8r?1ZSn&M75OC>K zg9TFK(r||fixH7vDtgc<1cdd{Av+StA25RL$|#ID3g<#0!t~}Vt^>~7*O2M2Lhkhk zcj407R`F*FxyNvI9H^@VOT1zAW+a5H4=R>`_LYw&x3?#^S0^PM1;9h7_Iam4q(O;L zWNLc3W#OLa#{S;!Na;}T=+HyC-{n}fO~xX=R7^Q;V`oFY12q*Hp8(}Y z1dMK7AB&6nlyAIB6J$0TV($2K!{qcLRPssvm2suXB{;3x-WNm=UT`u7fzT)|V-xS+ zW>Iz&Rg6nP+lsfUXw((5dmv=tuK7o1@yC|Wt$%&+n`f_*4}yw{#(t&i=FP2b`C7Zp zR_;fcSlAathxh=nq?klKf`KRe;iEM5&FT$NpQ!NaD>DI`{_Adcta}xOnW`^=pTRb} zzZhiWFTlgvg?YE9#I`g%C|h;7Tso^#zEjpL1;MVauId8&M@5Y~#^57hOUkV#TfavN!O$cbqB+kpmhO; zi9)~+gOQ8+Yg1?hOV}2Y7y}^(6T2-gao%=oci~^FQ7?~bXcA%UXM})djS8q+3 zjKkmvVaEbjx7J9n%OW&Z_E%i>KjBt0!Qp=Hj28WHLXIcm3Zo4gxdgHk>yM+`cVjA(Y`&iy!d5{AY3Rk^E378j@PpLn*3q>lkKR za1>P4ho(mmUz0gjD~+JNHf9pXnuIFqVaAwPO{X^YEA<+UR;$sDj%Y=yB6OjGS<$3U z1gHU4n~<3qMo&h80J(AP_W5{h*k&F z;#Mtk>LXVZ+;BV^pE&Yg$>7fW(GVeODO~#necBO|N&VRl5=mt-8M|4`SS(rUcG(1? zdIscRuEqn2b_=Utf`G)!aqJ_;LAfqqmn~!ql4WC;Ydh1}B3Xr~=z_SIBMPmK8cinS z=q6x5Za|Q&sM<#1K(J~F>1YopoHniVxHe#?vZC() z$PzqwzjMjQLT%TgMJJl!DSwR$Y_9_CjDgNJ$2z5M6m=J>z}`=UmX=b`I=#l=)$2jw z4~}fCMb$l%le1!rc!85V$1F=tPF8VbxkXZETal0%R%0mUV^I;!h|xGWI5?`&ck7}S zMFpwqe7WLgJu&=`=dC4VPut)5Ft zl)_~+E-EcETLq!Smm9@k9?0C5{Fph1{Z&F5X8FPo{re2u{Q!XPC6Iw>tpU&zh3M3+Tp_{TClo>vr0WHF8A_8qJP4m2BbgD&bsJ3_K8KkUeHM^Lx4 zdQs?HTK#TGNFq5z7AZ8}@Og9-9RUCA;eWdo-d(z+&h)#z(G+1bRESav-aOxl7!f+H z*;+j55~Qgh7&un0PDf}|8bH(6Z)_^-#5Ha1;jGL$R!4_k(l3$dknV1!q0-(e<8V%> zRJqADYKf)b1%3vff2Q{PIk+qy2Q5&_<_5u8=sIYfawV@Ww4c~_G+5^9r)-lbn=xNz z30=MRsROd++V|@hOR}*|3+hu7*#9mAM+(D1p8(r%))vGTXxyg@^4^RXHH|&cVy?i} zR@wl=3gEl$CjW^F$vxDLZm!xV5wV`j5Jz4b{5 zFwPKQqL{UFVk5*;dmSCmu|czmkPDl7v7kCLGeGYE7D%GgYn4D08a%Yx(ZLbph;h2F3p?Y_+xc;Y!dO;x*17%m8Ddf(>+#K3^RSt?#tLM8_D$ zw#F(b2V2Zw*oXdG3;_Ispv96F-6_tE5!tp>QXZ*EuBF=@^PK{&Ae#f@d*A|1P3Pg+ z*K9OSmeTAk!|E(TU7fDKk|)7?!k`|<4#1CsHa}uAj!y@tYWYJ)j~?5-e0F4HWJbTL z9UKhU3zu+!$%6=CY7s8wN<|G0h*1I)MZHB45khdnOq;{|fS?be;`DkEW>-EaJsqIam))){(5!leyc?cXt?$nYXA`|UwW^}Hs zqi8Vruc+V%a~pG0R+p+vnrm%Lm{d+#_12+gvq;cZs&YU?1}szr>v-MWYhG`-Fu%74 zbCN;&0emW6{aS;;i<`lbkwf^?0RDK_x!=z4j|1?>jvgKQ@M_m|-#hC+ezwbh{V~t3 zXXy2@<81H}a3xml@|2&eg5&5lm@ zj@uTr*pA$M{8LWMopP}JG$(dhI#yLsrC3K;rSrm?HUR|;KBB{s(nFx?5MX*)>>{px z;B*W5gG>VMdIJ4C38K;H!4oqLE_;)4X1s44pzWI2#l?RNC&2UV7hPTN$4MXF`1N3Q zuMT}P<02S}FTOgl%tNRILgsQ1V;8v->t2IF*-zjK9l!@NN_$<>g~hR8)Z}--))X*7 z&9#ahyVSCM(`UimV=F7}qSfWxlI9dHrRo$38?4MsU94vd6!j#$`Wb?D0#BzyywSF7 zn)t$n(=B-VS=2@zPa*+LQ9kI^jEoL~a}G3RW8P7NQmLc1lsRA`31W+TrDgM~ z?a;L>29Z?#{RFW&NpQ%(jk|9yehRi9p&VFVWjsk~OEsS-g-7a^IrFJ)+^G{)d7up^ zoz7%QbO}A;PA#1j1Ng%qWD)4}j!KYy-5=tYYfPZ}0sQG{K)@$mUw^-Q^sn&Tc;eml zZ+Bm~)LdTvN?u9is`97jGluvVLGV50`#N6Z_UG!;1FoVppGFS4Odu>^RKeD?Aj(Bc zt=8|C2cyEgDw%D9VNNgH^h>w5fhW9~{vWfuvsag8u(?%`WGyE~N5h!;r7><>8brz? zI-p`_W&-~6(D zX1D6{=U3jo^kKoTik~cdirte}_wILBQV--pRbyex(cnN zJg7=&Q`ZG}5(BR-nLRmsp{IqcCV-uXUWxP{mj9ot@Th6rXaX0--g)obx%a<*_seI8 zj{Y4(9?#pKU(S1eXz186&y`P>S!Y)te>rmf68{bUW3Tgf`ImkSsoR6j0kNBzig~?A zH$o++#) z?K6l;bolI-Yc+?)$JjS>_7l_k z#?H=H;5pg1d?0>2GQf-f`ddF-`4AW){JWvIzdPGCZMrd365ToV&1L?HA1>{lzupLD z0nUK9x2!3y=|*&w%lSUrQzzK=0lz}__#CF}uFnGuFd=J&?JG8F$L_!V<`8ff8u2HG z;yESHUX~_Vs~7>VMe!MfS=c5bN-YJjXr;ZfzaPb%fN-%NoJYTYe3ev!b|p7PL-2XA{(v#7EOdE?R2gmL35|1>w$e2qrmN zZM53ORt(Xn7mykvA_rWtoM3{wJ#sS!Kr0$4wjU&O=92^|<)@&yq2<%hI8E#cnHjEX z2>YGB0F}4qOfKg3P6GVHfB; z%`4xYe4Iaoe|yM?=gf^S-vN!HYkd4{LPk-oXqCn*mvowM&;P&lh}1nS_!yr(b!d_H67u=I});Zy&TV(063`ue^DtrB>JYg^uHa_vr@BB523tVLM_ zY8H98Wk3uVC{AB7tVtwP@)W56f}k-$P0k`^U`?4zvgRm~Vw|Ks%Y@(l&~5(^|E>2) zrR>(k+;j7Nj0T=81_dD!sBJtDQ`4xgd7+wl$>-R+SP-hgtweaURr)*TC4o8X`P( zs*GJ7%S}nRrT&%sZ~cc2fGrgyM{P25$;6a{RBkbl1&hQ|<^;z9!&O2|-O)&ugp*ro zZM~B%VE4o4KjCoo*CAl@2lYQ{nl^&|Z^ZpiSJ&CE-ya|Kt{&|C^3#hieh6kB01pBX z09xVazkdA0*YCfB-=#lfV8%Gp*VSb*#y^`2Em5A^>Zdm92!yN;$Spks;>liGVN&td zDvw81+W-R)lqRL+F3w?VQHW$6`&1aqojYKo?(dKMvj$Kkm8Lj@xmJ>B3a&Dv8ggWj zBx;(FSs}=(>cP+Z5odaSO}hpNyZUhZ!B71VM6NN&2Th|Oj7H#p4)FsE035)( zU%&sv%Kqb^>Hi5Igy)UdFYWwt_2YBzz4y-9!xESVbu$7u=<7@5z|Sex5MDqTr~_+( z8Z<(@25JgZvqJ{JK)VeBDj-hLXbmraimiqn4tRBJRNY#P@k9vDz(;`y%w`3D2wchasbD$VtZ zuFmc1@X)SywS8$H`qC(fLqtUZ#VDXSfg>m)PSGGJpr}Lvjk88037Wwv4na^cYBY%$ zH8oaoh$d<@#`Kyd&7jd(qh2%he2@-nb#Ccnd++k!oU_k9`|O_pc=T*5tre4%y!{n@|oPMCGQ~Ejo2b?irU&5mLc>xGPCfa{_)F48)IYV z5CW(Rpa-r4cYuVhxOlbwX+a1`&Ev=(aI&GL<^vJlgf4Kv%s)AkoSQWfMs=nZ0Rql~ ziGlN?MrxRjzMkp!<}G_^;=BLH3aC&VeNbPto@U@QhNivr?{luEvpsQ**RF-84bp(@ zCbW*KcEjVgE%7;Dw4(Fg8dMUgqI$S;Ofubk*bxwSzah!DX`!JB z5S4u9%$anH^$!Xd{pra4JAD>0+t?q}De7o)XLiDx;zMg1Fq`<>Y zGI_kUwYJteaev&h5}G>!wt%kt8>j&gTxe(l1c(Iyf>N-AFBBA1r6(r?55gp{v4L3# zY9KDc^Mos=BstgLWd#$oiF4K|xKzRJ<_p*6P|{+iAYL&i?XCIM|003*bmC(V+?*S2 zeW}^hVOCApw36);PZZS1=zUr6{JjBQY&Mfw4jV8`0GnKx0EhsS5ddfh0tUPU4bTsI z&ddN;&;8CGpO{#y&VG5Yu(0yM%K-(B{f^vP+q$DrI=+AU$5ZWBSjIx3eyKJEaR4X+>y*w% zgy(+)0Gb03r>|@KD*!MHlh61=4X~Vm2Q?ZAr~zmKcbsk1q<`*!Y#ApY@;#Z#)wPLd z2ce-sZ2EeU?K2;R?3Z8puNlzjV=Fs|XE;kq*+gtIZE-b7?1O6#m1iz9%VJ{u>jT`y zo}M@Q0DzwS{1(uF$NghMa$p1k0mAvKv=k0Jum->|hwmTt^tp{kN)@m35Dt2UkKR8f z5bi!(oTcdZ#~ZAy?EnC^{0)I{@7$Pq6r3}c03ZM>K|h*=2!TAfm%$(?m}Ie{oSd>! z&2p$5Xu!t->;CLGi`6m39@S^#*xbNr#mbk=Mn(}kem!%4fiC;6N8t}RMhDwDY0$a} zcP-m-E^0+EO81gF6N%WVo|`r{{w3iK?(7I=MqjD~Bv3wLKu9)RNuLA{3>XkRFpw|( zr@#ZVNB|^)M_w03w<@RVMhI_o&;Rh4aPQTF<+RT250~*)cGgx6+bZ>ky9D3>ixvRP z001P0`ui_kK>(N!hUw{N@~-%U9t0k2$u9#r6vvE+@Nva>!ufH&W?39Wq>2}H&4Q(= zmzj)EUt@D~{JhK{(*2h__HytUERsUk5fD z2(Vm}1q?`|Ioa6Q3aSb|UY!w5hU7-?V-KqGTR`!4O9bCs2Z!-GpNfA@#r zS52bKy$?Gnc9*Rhy0%jqwu(Oj0;mAse{NQTAcmj?+OH!3a?S$)Py)vbD*SEGv7`mm zP~XiskV7XNTmuFHfqLWc{IT^|9oK!@Z(^Yd>tdvZtZsy?pbI6 ziU0s;M}rWwR2u+r3zYzx0|i(7onR?KC4lxqK!EM;8Za=)n&aM)uuiP=b=<;L-NY*` zk>RIvZVrb8+P>nO|J4XIhy#{ou>z7URY;xBk}>4I?%0)=Q43sBpN&m!gqzm=L!jTwhT==4!@c7G5ek=9H*JEEi zTb3=a>@BZV*LGUrqi0|#*n0N}5I{5tT?3v-yBPsks4t=tu=GH1ZWSN^dJyddU=KkP z01^6PhT)iuZDi9(qb402n0w$EXf~~My$Cnwpp*UNzbgPNdzcjJNRMTBDCRVr>UbY_ zX92cGM)GuVVQB&!3}Vj+C;-a@hye+ZSDNb&8Yn#^4>aI;_s3bl+FVB>e! zhSch6&PR9$;9$vd4;Nm4`Wg2?shFFJU)(ndt*poOGl|wmh8jLrLIGF?!R_0pKLY@w z5*^490%y(yv(m5R0u7o+p#+*BB7*I64C6i*!`e(>u(_iYgHAflnRxJ)K}};93H)lB zY!y%f|6Kw2#4@m$Y+>4iCfPLA-3QyuSYL0%Wx2!*htrQm$UK?I1Vk=iOBTy1?+Ob< z@MjHp{vsT~ELWhjpn*UFpi98>!XXckf$E}Huj@r=u`5e8ZyqdtS~Go`J8&lN?6g{S zb*em~t&TLj1OU#VjS!8(t5^H$KJSDTkhZ#jdH|#Vq)J$b23zubU?~Csz@&3M+WTN( zZYl7Zm?9?`7c-~#SH4s-8kJ%}EM{0NR{ZBB@U=CuEps385usud@)Tdn_&e#oJ?${vkijm-T4J7Bgjy=en-)S z`7cV~I|k{|5~-uW)=y7V=H_cx9ev#6iNvA_OoUTOR7bqj-N(l#Za{JqG$1+x|2Fta zu%!Ut4pIPzAaDW^0l?qhf7&eTp#xq|tJUh->}-nS(@x<2=FaqP{qma+oZ(XD#Kgdq zyQ$!hyhZwvU0D03OsJvfEQvv+v&wMlSf68#Diw9Yws-!wHV$rdcQ3XlP{2)^OBvij zXf`mGS^kz0P?d*9p!p1Tw%?+GEYE+A@J!IP_py?2U(uybA@7)WYKKy4hqh!-@+Nh| z3YiXGwDi#PJZfvV=Fk{GpW6t4ek6uYodOoHh#^?Dfdl{mAfAwtm=a_R&~9WfxhGC| zIoM{_&&|(Ih#RR4XLnEfs^8Lrh>;y{Xm-AHAa-B;&r0A2N-c)lSHy_L2B|1hE*dW=#6j8ZoK2gc09S*7n7!^ zYDt2k#Z5QeeqakKSx@bN(-02n~h zk{gp1Qso3jSTLf1^a8UJ4h;ae&32>#&;&qFv+=xeOYOng1iITcDTNJIcszM6a`uyP zb!#*C0lTIKXEX)cCklnNDRzGZ60q1pzyqiUz!zz|e#)!{Q9vXa=D?&satC8dS#XJM zksv`F$2{TX?(Ta>6g59TsJoUOO0^ZQolKCGh=?kZxY5~f*;l;ypUA;)7ScJo%|K!r z){&9@DWADcq)P)DRXpvAXBN%rL;%jg-RDFEGcFE95ENf-NL~pz!Ttz<x81t8`^;#+wLHJft`YMg8c>{qZ_w}E z?fzT=x6L;K1OReJ&t5l^0I0#_+5GoHlk0M-rR0exqrkKFp%{EC0b7xJD0eVp9azaE6e+Ai=IiI`}%v<@8N=N!D-6 zNH|w_FP{@kWCZt><>#lea%^m3SjY(kE5u?0RMee9hmiKq1b`@@^7*1V@ucHHGg8)54r-7M0JxIehf7K(xIqj?C|0~S4cP?+kyxm0baq=-8gyU% z_af+LYgmV=c%mcDQKheMk~PY4uB2vfW0RLp7R|+h0|nr9;sjHK3Lrl}|F^eT=oElb zuxFC<%(tM5w$n(ww|{m)PyuZG-g)b!&|6s;uYg1FP!itSDlsXM_io?VbbM~bH2wCi zPP*qvNyx4}GPFauhsK~~ANZ?3j0WN9_8gdmNDRVzHwXZTQC>LH0&%2#n1m6q6aoOa z%s!{ACK*Q%s!DS;kgK_p`7jk#njk0|lqq#T|MxRcNxw6wpbCzXK==&zD65?vxV?ib z^$r08sU>|-01jS0o)JtCK{sForiLV=-6$7k07L{p1HlYz>o*&L?Z^a!Ex_CWD<0$3 z>$0;W`)cyeOsg7lVR(@KDzRaO`DCu%d3skN=9`Gb*2}+cz`w7&2cCe%9=G%WDgm<+ z=&yqo%Y)d(8Gq;je-?}7BxvHkAO*d>{x*Bd`T860ez@ateh^~pFbfd zhSLQ>xTbJ}@!w9u?@O_6Q*MpdY{Q75D+4lyheLhSN{#O5wG3Kn3C_*-n1jy=Pm2?( zNiAa)(2x^`R8X)b3{rZr9XPNKMt}tXQ~?_>`zW1;Jff~*W2|@0#KYTz8vhuRfMs!2d zXPE=XaG5nOw1Hl%Kre{Y8Ym}q6D3q)kTgt?wj##qzWeVeFrH3QOoRzCF`@GK`40MO zLVYhBoCN}G(?C{l5!M$`peGaE0wwunvI^a68!r>HXxdfrdue|pr z+?l?&yYPCybNl4h0YR~K#LDhSB2Pue`RGJ|z(lipZH=Fh9c_1H=)+@Z0gEey+TgP{ z1`B~%3tex^v)CfRfWUDSp`;}rFH7yw(E6B6B!(Q0xdvdfva%*%9b|;!4A|A#nqj(} z$lNQxY#>3105JCessT7UBLI?70Ym`+u!v-p zWo1dqVJGxNgTU3cs2oaw$q~rqMPhd%Pu5cp(wN@dc&AAzHU1lW^rv(;+)4r?%=Vfp ztVCm6_11ByLSbkueIRv8R%Gi76zCZjhpcdkrpKm=R)XR%um@Wf;hc(`iZ)mSpaU!; zVC>Dl)M~a?fyj$Fun7PKKp?6eiJ*;F5D7w`hOH#U`}bddq;GG3e2xHklX3(Qm}#Yu z4APbPlEH~3rMG=bD}*G6_CN=0R33DF{Nt?$%L_060RJK+CSb7yYYYH@Ntjn*xsXIz z0HD!AT6#bXq8@+}aB%g#gUf1Z(mAvD<<3%ripkqe@_akqz|d@GpZtfY=lQpcGC-w@Ry!EfN(Ig8<0NXXQ$I%xc)v(-TSnhbfw% zHNAzO8IUuuVor5oO_P*IRQjzu_v!+~-}zS^kbt|>3z6&aBBI=Lpf_|BOOGY0s;ApPKV zu&wZfLIfvzxqBuamISnzglJe^#Gp$;aa0Z{G-ZCBR>;M2G zg!gJZq+);s7>>$JgQ8bt+eD8f>+P)YGvj#P{mOflFS>RsH;^1SP$m?EO^Y-78AeH(xl)njtVKh?vZL^FD;Fi zO?PYzf6M=uJ@6w_IDIgzG3_Wrz;BxHTMeX>7%E|rtT#WkFH;FBkj;%Sdx5YBCP(Gd zehb$Cb0!EP@!(g1OoM&pa~=TMx?>~TDKoQ&FG6}LGmrt^n%&*Gj{w*kLcxg3b~7Ff zzgVeJ#1`$ZIdY%J1`;pvqM^2jz5vtlnKn^ zR_ILz08n}sKeT@rViXUJiscty%8NPe8|?{ccTe>Lsu!A%&K0||gT3>y(0OTrA44Y>CzC@PFQohVn-pdK&@n#G6lQon!N17G7{(gu~; zR4heEecNG}rqXSLgrl4qpR%$6x1%^;cXx0CGWzm+AQ70`Vva;W0a!vY6_5%yuYzrD z=o)es+4>t#SJmS?%YS^hpa>Ge^IJE}KnMaAz;9p(9I-35PfJrOcD2}8>~cJ{RTZ6R zg+F2qL4ji9i*6vx%DbJ#+mFtj9r@_-+HxUigDH6GEHJ_OCplGUCk6nZ2cQHdTW+Ax z5Y&LB2a0M2@@3)mn}dTQspG1)cOa5SH90r(cS*j=Z~oIg02dxU5vhvhFn9^|HGb7a zzDEV4fp3qB@>^;$vA(Wo2u4IOJIY*AU7R2ko&_Ahib7sM@P+eL002Bca>Lsp7>i`k zy%&DGwffh87(6J<<{kOXkt4qu`iKgkxB&q8wY61rb*o$uXgXX`#7a4O{djb=9o`a{ z*-F`7dGYAu_Dt(*V88`$@4MhHw%36kuE;sxcJ}l|Fr9KHj{^+?0Eh+~}SWKq4sjR*z%qU}Hu%zlpSs8tl$d4C9*5EMoum7`6*jahUy_YH{#S=Zm8WCfZ zLyv9Lz6GDHti>xH>*@;kP;?N5dq}E(YCa4>v^vG~uCq2E|F45cLD z6SrS?pFMkh^3y|zN|+NvaBl*&)qeI8NY0$9U?c|7nG{Y${;6eUk~oVJ@Wt8k!=Y?F zn@0ts&9=4zxoEI=otMB71nG1n>CgV@5L6b4#0;XFBT+CoXsBkGFqum$zRlu+va+Lm z0KnY~L=akpZsxNza1Ve`2yCRN0&)tfP$&e>0cI-zYz))_BM+zFE$LqFa~Q4T`d|O% z*C|5_gy)q{Rd~F$bz-8uiV``y6DSyMbmVB)#M*89q|4U7MnM69XNIDxwbSq3-!OY> z8|ToS{m+RZD1wU9r~YuOEhi_$-#iCs&;w3RC^-m90E{tr2VYK6Tx!`MF8ids(Tz@C zHOL08%{VJVo9Tm@Qn#=C6AIvSGMAK%*TS;}j+&dwRd2eR>~MBHtfp*0R)n?nJ?8Ei zfewNIfQ?H&81g`ZPyn!&RplhZF4T4(BrLiIoxXazu6^w4$R8uS6vI1?XcvPTn@wJh)pqhW26fftC3B zB_IKd8U%Cr;@P^kJg^`_ATx##$WQgZ(Qy+=A)oD!6rc=0x)it`Mk30U8ku)>p;D~KtZu|<$_5oh39&j9oTv=#uM z1YqV~KmA43asT9kbXEz>fqYFA4Su1uV`4DQ=a?%1KqA$b<%>8(c_v%Q870dkVh@#H znlN$+$C3UM68NDqQz{Btj|Um38{`V)eC3{LbkxsSrqQ_ZvA$A}foyhM-$1^E#_B=A z=s&MQ>F0w(>P|m>Qup*?KT7xBexcRfReWM3g{~F4y)-38x4tBxPv!IO%I>{HC;$M! z&Khs0udb%-6lUTSB2j$2AA>SpJ2PVkhUs{h>ir1vQXpGriH(}=ar9=b#5OZdoN=6%21ERxL%^L$dBi&(-pe@ z^dGALZ)Gf3%xL5|3mCh-+G>W9uMC{dHgW4UH#0dnA0ID}fzSlyWiasEmT0&? z94k&=Dk!*gr4+@&+E0(Y6@DVDsd=5E-`~eFc9Mp^gs*<2yZat!pl8A(NCm=E)^^Qm zKZNQ%h~Cs9Qv&zZyojN%wQr^9_2jOZp+mxk`JB*x>d)RVGDXmx)B?bHaK;KQo&Mbu z*oauklP-{#nJkf%M_4?8V>nyv9rv=H2?Je}a54esSgjTH1<4&bL@HgDK=1sAB=FS) zPFf9zcny=ybJp~7)D&DNxobL5ds9KfG;OImz1KFMt*AX#4+(JZ?C$Q~=&pRsscpa~MdPiCPjdG6sE5XV zoz@iJD4!iD=f=(^jYn6jy2#@Y8yq^Ugh=WA7ux!JAbr|VUr3#UaHyevOC&7+A1ZfHjFeO5v*N)X4UUh&`TDwgMTj!sQ=S^rV+Ozpgdhxoyqw?N zI+J&);zB7piK1Nmxr2no7kgWsvkAMLX!QZ18+}H)H#P{%`Xdea%Sq~Y@1n`d!o9tB zJG!NT6%l!MsVK~OR&AAphYzfZpc?l+eliA8BNxZcU7Y-b`A7((upfCt7txs%k|^o$ zGZe{f07pQ$zgKVBl$6k-g0pCI9qE2RIO|g2)Xkk1KHj0BE2C zpaLKoSK5B-S?Q%)AvtCM+R-Wueiq^Fkm=AdbV-=<+Pngz3aI?z-FQkvqN*# z&4V{DzdR2ZRHf&fInD~X|HlU{zUv$Z*4{ zgxqq4hcF>Q?kEDs=tutu00t*eEMgGDV?8`%9lB}xjvH0(5xOSo>tSZ1AqZ}m#Sboz zN!6GE$U=S~tLjumZpB473!Ag?b;t`rtFR)afxP%Z5NR5EeRua`_lUU#_P5bXVpQW= zioI~vq=W^aaBXoSwWg5wZqLBUo*6GjHv=oQ6C8nQaAcbw`Q^xM_-vee`pMX-pSf%e z-a=C1<#F=P{&I3&PP#wXB7b;(0m)(3B=};81i%_b00cNdjLcq1OItKD7#wGN{b27}5(CF43OyX9HGLX!rW+1q5CDKEpuCUOgMu-L z1Y=@yS#ABfS4z{XkPrq0P%IM0*2dh{WxFB8TVpg){rI3IblZ zf`bAS3A|9ewUt6Nyu6jmiivTVe0+DfrKvtRDg)Lb_&{**7#8D(mE4dx#LJ0-G4*p+}(m;GhIcf=vj?02GYM zh#RoEp+OvA)&Z>Kt7mSV2OVSq;8K6x*>j)+#}d>tb}8yl2c27^f871_@gp=rk!_yAK8C1W<+QJ&qc9J(PP0r)_iQ)Gx?;OS0 z0svyL1JPBqBnvsBE$IDtxC^(nrRSYV2LR0BSfHuA`BUczFJQ9+xqotb_oT-cuQxXz zcLM-#-_@oh3aeWS$z5I1YWr;tM=GkH;1->nc1-Ieo`eL^Y?|JF7G9+LHEc^qth$P3 zTZbr1b2~%GS~HUaY?1hsR>i`T^I(fS84fx;AA=S`TI$2@ke<|%C#g3x%;ynTR|Ej_ zMh6#{O_T>I-KM>ngGzfM-&yEa6RG5X?e78j)@(p#ZyJ%DAh1`KGqV$6c=C8Ej*p}- zqsR?oi#YIvr3GyAdo&sg05+`P(;*>~$Pxxa7ju$Lop0Lcus7)&C`3p@?R4$VV>kyCt0wBOga#KNf z6beG!uyO`hX7u2ZVugXd2^{6O{?QP~Bpo^mA_IB$?y^PU$#@Qh=RvXMN+do-ZeRx< zb1(w{aU50;+{G;bM8!P)!u*N|BqK^uJiNW`V&)RPb4_u0xSf(TW0y3v`|&mM0q<2l zGVLU(dG>npIJJvXoa8|_h0v=R`oz^6nWz~1b}q#W}Gxl zu40fdj8Pp|G|KBtkbBE80sm+W{E$2K6PdiWnV4jEd8m_s-h_eYf2=cQ z4~^TaiuFmw`sgI#w$iw}G*JR(+hC1RK};bt##>cMYW2JANRhI*0bktZJ#Gai0*FS? zjQj-3Ozrsi_>B7S(Zx2j5Qe0KCkDoFh!e5}Q&U}nC-1-LW6d!$B0dA)=7xpebOaVu z5#zDc>OIe1fk&jD+?nedul(WPn*n-GkrXny6!ONiJ=De9+m4YOy}FfL43q}|0O#Xp zy8Jk^fn5{|xhoPYsvia=@Z{l>5HN;wpV-)-(*UFu{m(ppU7sw0%%G213Slru;pf}L zd=DY72phDj^{ipocku;5Mne&Y`jx+%g4vufgMrb=r+BDjOuAZy4Nwtzesp*xJe=xfEF+W=7(LrBs?5ub=>G>LQ=pN z>xK!B$hc|XfUg~k4O?CF?4{UKI0CAco5peeyE*ucYkYXsjzQ#S+lOX|IOxkMpD*2d|JkSNpvAOp~EWnQ{&v4jb~pH^Fw58o_3 zLUE4`kic_(+O7t?)#X}M68?zYIJt<*B0xB4QGpFh8-f$BS;y$x?_xUw9n=+LQRS=j`uhIP6jyg!xZq}`l;-lMWTe1 zYq+D%)KC%tzzoM?aVQw!W#)hm8wn(&%d(vOQ84s($#52d0ssI&2V62cqU|HUw@;NNWn-wX2#laU%JB;rYLE*oc@ z%02Vy*?fl=vz*PxVr>BcOE4f# zIw}1q>4u)a@(otIme>H_|BM}|-0`kJj)Rmg+g)0zZ;E=k5Uw7-j8B@GQI8iE!mCu! z1&QM-6|dF~^*?F?H2={D$N*lq{u5)@{?CSb#y`9NuR~BKKJ)|zOReAjBDZQ*zBS695s3e!(^)Pk9!q_dd~9Fe@LG^8v1@O2Pyu~Hl1 zMiB+ct=Ogj_Lo;?6CVKnuUyHQbt5=YIVGeeiX9134c?e+TD1*om*)#zJf$|XufP_If z!CkdE@!>E57z2EOV@>W43yb1D>$^9(_u3;Ed8RJW*COs&?LF9}I&?8h$!Hb7I}XcGWPQ3o{6{pW8q*KpHAOgCG^Tce!(+ z@oWH^Lhh8%eJ8G+aSPr@9R#{_URE8x`IgKWF28V4B>Cx%L{L=fm%-!mGF!UNb%n&l z#0opI=0#0|1Kwu_azl^@ZPr4`2L@`+6BBTNg}9v}U2%dDTC%k%`X>wkRkgo{?vKB2 zk*#VrUKb9}KmVYu2S=kej;i;0uInHrG?S80*VxKl<-bkn@Kv>!IXOG24R-X)PQ$6ldB^<8K(i$-ImZ8DAU_zgKbX*suxp#lTpB@b8+Pwv4I5vEz< zBhNI4?A{%8_V)AXmb|8fSdrrAI|YywTgb~7NY0)+Kgjf~Yy@`fNL`$= z=|X%@V}So=JA`DyZjR}Y&2l*Y2;j0Dm*XS|04(Zr*2-$N?H||@!Nus;pG~aw^{u_U zIYXyeiV(j?o$585w^QY}GtREu6w$TXu_vcaX1R*mut$${Pt3;vrEW|K-Q!rud8^g5 z(KWeRZM9;a2EV43S>=TS}y+ynoR=uqVymCrDp+EBg$( z0_8ZM)QOQ?MH}Tn#?6=l&a|sivO@sBGG+Q=HiprA`lKL&axNS*C{ahQ4dhb4IvrlV zCrcRUu_=J_-sjFi05uiCZs8~Ju1E^mmAnQ4)M7B;_pFbr+R+!E{q3_q|NZN)|MvOR zu%%v0v$cbH+YkZFa7M9f>#e)p3)G-`XVc6dW^d|^DqFRS6KVsKiS0ylF4|CLma0^o zQE+Xwa>mCrYC#puPC?s#yQb@E>fvMeSobPn16gsmnk(}% zL#|<}F6D4)?eUXi48J`mgo)MUV8OXhDv)=09z@NgNQ2}TgkpXb@ zeld|FK3RdA0@!oT?R@sR^4cix=3=rhnHU~U^5D&@;m)})SIb&H|K0B&y=XD<+t=Q0 zl$E`Fr*U#%2mOoiPsEp7+J}37Tia7OZ#Q6bRNZDbCbY22M&$);qfjA=6-gvxc0O+u z6_C7Wt*D)=D;wqNbYB*5Atj^}ST^1C4BKKr+VG*Przhpey>ZsPjJP1`NMoru^LqTg z?BLU9PwwfUo(^{xb*B|_+TtjgI|c9+5kQ#1h;?KC1DPRLcVX-yzGC<3l(W0L56lD# zg96bIOFn(N+57yt!^aYl3pVeHycS=Mmtu3zR}4JC?9$(!6|K5#JpR)K5nrl$_ik)> zo~OEL*LwY$FGGkJ8g?`fLHKkKbgS)ZagST=_(N7_Pn=#j(;=|8 z#3$D^?rHW;bi1kd&F)Hy$ZQoC^}1#%!v3uQ(gk`yL1sc}02b40F#eM|QhF|UuvEF? zK?xx)26DDnINrp!v^<`c#ePPY**Y|`fT=U9crkv|+*`8` z@7*KsXYnT1Aku>A@BT07rUUVP|JPbXQ+ zaa4U{rnGcVbKUK()^ ziqEC&32k&uVw}tpK>(y44#?gW{xJFc_2uP>kpRCWsa*;312JdJW2+j@qc8j-OeTd< z=$|F*y**rAzp0*^!TLknJ6k=$3nMxp6D#Z9FTW5flEQ2@b{ogkJDrx++WYqPn{nW5 zTwIu2T3(*HIo;bKEHs+L?e?+x-j$C_b8~N2jL|4?xn*#Y-=s=ge?~nAiTcy=$8)Ul z1d9KK2yxQMijkm!nwpt`_~d5)-N}K`?e0q5OG%O<{oe?{H!h#)%U~vjQg(NQ96-{O zk{!?-dQ}0$Ru5%dAbdc;zRKcjkCRUW-%~G)O%kh2CK1Tj*R}LEt7VmDnE67VB-xNq z^jSe^Hw(l1NE-i5)b>J8xSmGtKgl;-#+L|PDRBW=PiET1?Hq<_y7AG&yBBeVFt7`i;GCs+f|xww22qiqM&A#UP#C|+nC^+8z(G{h@fWX zWsuRB%F2Tegmxs^=RMPp_L7_tjcU%dyk3!j_h-mlA`9oW7H0TLRl|5M?f%E2Hzo zG7GoJFSPgM)a>WKgV8^o=~Xf^AyA{jv{odus_pF>#<{NHD-!BR?g`$WgWogUJimMkI>q5GN{4;}? zSf*~$z4R+J{c1-ws1mEDqjeE6>70f**WE!e{@LeFX1Is!_UjhJ_%)S!TqQ1`_~9@X zo4lMhu@H;+WApPuiGF;%s?RDp*6f?rfz>ZdJ!#@^m#UkA$_3mI^DoH1#N};>xkGI{ zzo3z)3vl;$Z*@oo=yi&qJra|&pbW=ew86!}k~9}l6YdjwK*v+PZ9|r=m`}5M)zihT zEAw~MTW)~38g1T*nx5kOti@fmv*x$mvBqd|guc}0{MiEmRL|UfNj`&3=?rE%yH{Ci z`uWa&fT}cs$2IT`>Acch-%MX-=$?!a56{@7rY2QVlV9kQt8oXC?@!3;QHO$XIQX{E z-7y&-EHw04O|{;x!ZDk*9-i)B=MEI}e8K6d^)oR)c%To@=ylttH(HugCw{@xy zO}SNf@G)!hV97PsOoY@VN>?SdD)apP;|dde20esLVGS|S@}lX|e$|xdoYH`=KN`F*Y>S<^82jzoi+;~9HomFiW#|hjLlS1JwmQd z;qY1G>vcT?1Glf{QVbTvGmDMGhxW1QPQOMwd`Kjgk^et<+xm1!a){Grp=pL+KZ$ZI z3nV5oWp)`o3*UBM++jPF<*6eH-t4cg+)iFhb2XX<Pk_{uQZT{Ouy^;?gUT{pG8fTkH4k*X?1p(LnGfQk8hE%?o0~WI(&gG>X65 z)B@VSRBCAG!-LxU*T(M={@oJm)HGxTa2hZhO-9Xrw@SAoH*S<4it1-ACyN;A(GfgG zbeJKUt;^3(=Oqc!^SPIFrb4Dk{JkAFLrf8~SD4P#70B7qoOT{NAODGg!x6Cac`83o z_s}5hPu`9H@?Yly8|@orP4sz<*4_HD{@a$nW&PkE1pSs5@lAOiGmn8PcF{cdTpS^J z{(9!ct0#XyR#zyNJK~+i#z+#c$>2nw0`+ZvCNbU1<=X-v|3~Y_@Yqda0Eq-i=X#OX zc1@%;7N7HWJ0JXe^JH=JU;b{6Pcw>R(!-(!c(D}thdf-QM6>e?^7Gjn(-9*6cX!+k z3Pg;o7IuDHm0HJ6599Iq?fA)KWA_aCeqdHw0v1Ik2iTu_xxRO-(L?{2Whr(PP2H(&G`U9(p1efEbb<1pO?F$H&D2C-Ntr#WQj z#YL52Z`(4qZC~K1|AD>B#-ns(TLvURL{ZoWO)3!;xAZ_D=wVB&nn*6B9cTj zu*1T_ngB8?h)&OE>&mKhWb6qU{||NuAWRe^?7(psRMU&n)AR9@?NFQu@tDGo%m@Vr zWiJfawcGI>)h%c7X?4Bj)p48l*CgrL%*H_9#C`BDqrZv>i;hW%|KklamW9mg!}Igc zU(AcD?1k5tpFH`)y%+pwFN84XQMr^K#w*(NAx>)CcwmFb>D##^h=lvG6On+_g8;k} z(QbY@WUF`umQDEJf+02={Y74SSW8xfNw9NJ zPA*E4w1(;U+^T}2q9U#?JzXc)>3DuVp$b<&PYlcZ2h=SNWT`JBPLprr*Y!is=I+#6 z(xUi%Tg-3UKT%aus}kks;{Jw_F>(LFpK(RZ8h^`g{l{}v0lmGT^@Su~qoHT5pKMTj z!PrMR(E>itLVUocy@Q;-Z2-<7lJNGNAVcD?fGhDWTBlKGI3G<~aZN?dpCYr@FD@Jm z-&HyHn}EhRSIKawYm6Mkj@Dg*D#$f-u`aq*&lH929F_c)pV(B`%@!NfbZNAqS{5D6 zrPI^LvOGK#?!*TKW(D-z7|6wGJA08-Kr5S@%-4>#+!ysZeVXt(%-)N%ape{(o!w>- zv_|GU8NX=0agp^#X5XdQL7 zy$ACu<){8q3P>?&tGnRslp}2F4Z_Y<$VELVfSAkd?tD}l1y?wCRPwby&9j&V3S~O+E_4Adk zU5QVz{qt;O;QiYe;mE?PKEu1A%QR=(sF#()85^D+#>AMW%1(6K#SL@}GwGQZrL}CKvi30}YUs~Sn8jLN~#DAR_*~u!&ej0gUZanT*oG*of zOL)GVj^QwqI(<)wv8qhW$TywjDKo$S?*=86%#JLbL6olMw-(wpJR=_hVESMM2ZP71 z5I{)fnw9?Ym5wXdv5R=BSZdG18%TOrsJGs9 zWEvIRmm3J`#YmvqT=Ib&_e3|e1UjlgHJDWAyc9t?R?5r%o%)Y4qmc> z-yaU&Q~;d+mB=3YWt@Lq1=z2s`TcK-$5{*I2j?nA7ANXvTwN)l*dXJ{>0Ex6^#I2>TZfVlKAAgXBEp` z%L*+Lz~`$L)B0Pie}TSnQ80iq`rNZ3cAJgI%%q%L0{aV7ehF`$GqNOhOn+$PfDm!i z5l+^jc7ChgB$XoCqw6uWh6h%}8+@+JWeZ@`^!V5xmTi4-xLX5C$cy3YX4a{$rT)t0#g&O5bSm|Fe~&N-fG1&SRC^K_8l9;@2Y@AI z1c`z>uSR10G7NGNPc6@CZPBEQOu7OtZ+8#`5bEdZ?(P$^=V@p8n{!78G#jj$)iUX= z+ccIwn$@2~ZFePd!;$^B!{e;9zn0hD_uw$^)X^z1)_ zTZ-c5-~1+cfwi!|=We3+`1nkSD=ff6??FxH(z$$zKy3^N(5Vf|bar7VC$9ng?hFH> zyrf*FT*{!+g>eaA((St&=yZWN%Oi*)^z@{-V_JTlb!)bwcK!L{$5mP8#0swW2>T%N zSDYM8Z5c8^_f<)*br0bBSWjPd&wqT&)fMqXZE%oknQ6mKRSEpxz@WluGfWP<%qtuA86EmS20bxU{O_54_eoc3-xLl!C~6bZtCj z{jNQ8W^*U&*-B~B?br4y@Neg92#9>q@Yq(F4|`slzTJ3LLU*waxp-|VMIU#bqjqsP z|Grm$JoWpdK;?M+aai4lT3f4Cxs@D>Br0Pz420G0)dd%9}Kz*0r<FoAc4-bD=svk5U z;be9{t3UPOLR;V3>yLM|4!hs3_(=fN$qoFZ!K)8|jyt|Ec{@q<{5D5J=gQkS_BJ$2 zyfhp|FMoU1$I4bz-+X<+$AqzQL^>Bj_&w}3FH&mPw*ij9!GBcAQ7p%#Vjex^)cs8Z z0Q*D$Da`~!2?PQB!5sewv-z>x)a3qicdt_+09Zhvj|a6uUPk9AA~a)r0&HrXUBI4C z=+5K+@ZWEZDRF<^lx~kG;I_nN-Jy&8l=Ih(W2dA z#6{yp`h7GjEWLL)vvtYLGA}(^cq(kt-=0^a|I5ucNZVbUaLPktV{4;Zy#lM6&F4># zWHi|6Y7+Mx-UK}cuOTuWhepF+4{fqvar2FyKMp<5G_i18^V;I}9LYSFu9?HT%z$u%518G*4bXegAH9^TQ4lF8Gc^ zg%Cgt(jc8mbcs8irmrev$XgG#)&!PlEjw>P+WKf#mjZ+q~K;gA1~W zk?MjF-?lr7Z~^UW1-AJXhSJE9TOj}txF>{QQeXX#LjWyOc)k+S%d$Hm?al)oUL%!i*m} zm{sf{2mrrK+is?5WsRqfgQB8v{(HecDCJN|XSS00@p)4r}t!0_$00 zcJSovzH5zC9KWZhAC>BXQm_FQz>DQnnf3%kXmp~cd}D5tN&26#gnlMs#O^c5l^k_J zRzl02e32h})WYHGJv>5jV@wGRt?XQ?=Db;2UO0N6*>@Rb2pM34l1E1{lBSmk`^GWR z^g@SfWw@-2bUM}eMUJ?w-ud#UH9ZnvHA>jFsmALshg{0q+q|~Bh)!goRJ%5D3TN-& zKWdx*{@O&80G}Vnl7hnky!VoU_23G(!zV6wrru@ERb&@`KA!A7r5748BIy|$8mbTU zFU_ZOxiPUtRV@J_banJtdiuVsXcO-{{|Q1wl*!1Da+B<3Rg%`i{3@}p0IQr#Dw#U; z8AM|B?EM|v%DvxBn(rOkFT&Lji1hmm9EQ&$Gwa!mu~a2CeEc}Q!Y{xG1DKR?Q4;Z? z`4GVNYzXR{>Q_c!NojRY^j}&=+tz4K+YfJEM!B2+b{4CsL;@wXIVnW>;Q&q@LI5D| z3J|&i0i<3jZmx*zFAmQ6+B|!g^{}Sq%wQx$yfF zXL`9>Ck+1~$T9L(o+0NSX7CvdL)g=gujkQ(Ap2j=80qEMi#|=52=%r8F`=G@%n;h& zX5gqlnRo1yf4BzqkHQa3o~07z@s(102<$shg8&#o6d-ah2KBJBu^;@upJUCU8hZ3~ zV$J%=j8;7b0`Nl&z<14t4>ZIw)cgY>Vod?E0A*!_m}CL}*$D_c(%DLzOqVr1tYM2( zNF*6CK7oPm)X>5Ei-Ip#-ducmYq9g<-N(iIuSzayWIFI41npm*$DE%anyqU2$35Xc zY|b*$tF)rIw#Kg_EwoQepl|Hdsp&q8GbU#(9G(GJ4P;~p$QfFh^yUdb5n%ipR15dF zDS+_WLy0*4%^m=7gRUIhm5LcHLOJNNe!)sTQ+y`!>uZ&fXZ1e*y)DQBcZX5~ee|#Z z6atE9_3)k$whLPnmfy0kNrf!nKhaN3G2)Dfd=+0NGsd;j3&e^r_>c&SzmE^acgk$9 zesOF6v&E_R=FY{t$Fqye6Egr>n>TQS^`MZ+iGDeMiMO#aq#0frgGVPNjin8RfzHdB z#EUJ0=CeXTbIVH8n!MuY~YWox25boHTxk^c=w+8sgXgp^;$j!UNFmcuVkV0M+%E*GUB4#Gyz~Bh0WA(+YuE1NY2NMhCi+{eG zSRQ$$xgsFpJ!@fwZzC57(YV;aNUWEZcn2J|8e2eoDJES%H36@xfvD8uym}{#6|FTK zzSW9fgzfkKu@;+P#~nYT0G+z+{!$K|a&sf>lV_Ze067c*=l^+B^WNW?7oPoY0{pvy z|GmY)R;IcmXNg4&(EI3J8z2CKB1U7&NGsJ?5d;}0Gh;|M=s(&3Unz*wUka17snh)v zBzMw9s{ArK6SdFfnOu*l#gIgrM# z(upGI#?wuu-wJ{|Cx$tmh0&Kp*ll)=YrO;;FwhGGOjq{{tbc(23!b4tY1dhkQ*-9d zi#NUq-XD3FwfLmDINL+OZe!DFgwPkn^`;}H$=eMa@%&mn+4|h-Z)&S=9|8ELO6#~b za14XnXq%pK`bbVHL_nP1aoE1&@b`x29Lw=0$M2{B0F+2f;J9}&mV`?F_-Avc`OoFq z#a$^E-y{cj5&WD@0ro5y9C zbTX!YE~AR)8v`q1#GLJ%SUvgZYNj70FzrA;>p}biZaEeY9qD8}K8PL4y(ubZE9wCx zKL5H9b#gX90H#N?6D@dA5;-7tUi)-ze~iK_3?ePzANmjYFx}QQv%LhH7f}9^oNe0& zOwN&`;Q%ajuwM@T!95~i%6_|~7}>}sre(wS3PlN>@eg^&V!#>VdUp`a2J zHE_|VxKWfLb8jcx@qM@xp1Ir3d9}758eg}nv{cDGg5clT>a(I7O0QgU>2!<&7!N2)& zadS^y|BZ>tbHERB7yt!1kRL@zMJ2#Q8Y~wp*oXmfa+e~Lfh&2@T`K->7C_vhw;OYx${}@c*E^0#CgF&g?+7`qKpl zlGAxv+uJ$P0bpRK9y_``)pPpv$fFXJHP-;Y+|RG~qFFCv5CAdavcoo}j}c4=Af#;_ zK0s4T4yAenCWjE98xNKr1O*={@ebb~?DqM^&WjgkkqnK@O_o=lK9E3=Lqgq&0_+|P zr3&4BjA8i&+%}PzE)NKxs%h8>*2Tp|=j{Ly+7So3&x+{ns+Ny4aRHpF2BV#R=gH(( z#)%%l6yl03WM4?Y`DOI_p0QvA_wIRDpf3?$-i!vlwq07ZM=aLMLplwS6=pm&w@w{D0n6WJANVkbYU91#9OO;-cNjqMp?+*^ zHiv%(ytTzt@PBymL2z*L0SA;M1b}5p&q3c%YN)$DuOSSLMo*qvx+jh4VzKitajp(> z@*IWGe~SYuK}W||4bmmn_?ZKuFTXTNzMAP|#y(ncCEJ6@2torxlF#+C78jlY6=UJh z_^smN>@$14yL1>H+M-Pzz`AF9CKP}OAUvnP@G)M@M2zYV# zp9pvGzJ2_AYY$y>XumfIwV(HuU{pZO$Bs6`4ITkhxA|^-b8%09=W=oU={@Ij9jk)w z4gnwwq*AHw-O-#drk`?D*0L|FfL3HeA#}A#Z2!UkLe@6Ll;$$OV!WDiA56$izZ0Qo zWC=4rp7e!drDP$%xWf$|XkKJJ8<=B30{wSWk%m{Kx)q|Tcc}h1Qv#!FVK)yE%-zFa zC?)C$eEYR)_&NbISksb625l}H{N`q;?Ay~nJj zTX%8cxiEXTzXB2{iPTqbR{P&1_Csro>qk!!0XR^Q_Z~Tt1O6Qp^;QeU$t0X3WzzCf ziOugNUk>(99go~Reh2{SkF~d5$4@i|fBwhjEAdAcas0nKjyGQW7iP~)4eZ+kL}>v1 zg;0qH^xQq@gIEws#YB*-XiO=uHts_jEH^RpGrO3473zThLBCKkDbs@dOzD?Z3~EM! zsq;1S_4FlPH!=$!*DTzV2l_;I&Q@05W7V!tUi|v&-}Qg-`7SgjqD~BxS>S)o2YL;0 zS`K?h9Xf%P}eE+uh$8vo5(Nk^*bADTU<;Z6jar}!<@V?IM@0Q%$%FmN0 zh8%d(R9E-FQ1Cyfcc)T}Mu8!}K&MiKX=9TE1kR(GF*@c2MTF_c|Hm6UYo*ctEn!>{ zzu=A{?%DgincEF&E}OxG3V2XMC}|Jo4g{v9C3kf_U_HHmv2zk*505ANn=8)b^i#F< zpX~aMz8ioUd&igbr$$DSD?NN7CPrcN|A|R^83NcMZR_#F4(?Nd7aR`Ww@x1qOCE#< z96oex@0DFge|seAw-?Po6#1gOxM$+-GwG-96~uLd89vGAz1) z&J&eZ(G&Iwt7L|}Ft+4EQ|A9j0=7pc|H;~wJ+)m$;c*=upZzDCAtaJSf(apeAWI2b z2uTPKAV7%%fdYY_KpPFEfYd~xw$c(oi%1tK6=^YTbSN!Eu%xsVD4_%ctumw3eHp)- zpfA4Qa-bawGfdC9XTSG+N7h;=6G8=+`d5P~o&}9DAI(v@8RdmQSvR++kzymmGI^fOBMMF1(P%h@}_Z|HW=JL#6 zkH2OR0+1i>%gjL2FM9a#SYU|5Z%fEL)VX)cp84t<$6mb*ES|1U)+%%Nti$@p$7^eI zs&n)h5Q72Gi2y)+CSn!6<-EL+$~UT2ZcA->S{W`xgmSpR)~9#1X;5?OyeTEo_wDJA zZ?808KeNQ1mEne2#!kUi<8a^>Ps!zqO;R#U|I_oUq07Cu!ng!l+3?!CrwWd1j^v@K zh13`R?Lk2TkpL*udmuA67uSig90@0Tm95R zj>J{6|5O7&l{tl&8Q%>(WnoXAlTpU1ih29kO@muyHsh&4Qkr3q-W|Ba#Z9>s9U=lJ zQ1s2&?YXYGw%lcc02(;#aAaNUsjC>W8AK&7Ja^=(y$uc=ghV#;%{PH~1KtS{FlyC_ z9aF($yVua}fY*zBX25R{nwpB=8}98aMg4mXB^R*z&USSLGf@S;zP+a!0HWBb;Te;n z0+5Qaa1rd2^N$fQXo!Y#Ii7qL>a=c4k(gaZ$&8KtLlgb2z*OE1J$_2l-<+adTA05# zdS-ATaYUx3hmeQ#&5_do%v z|AJ80d~YZ)kBg62k}JQQ+gNNLuLi1Nj$&*^DkV6|61^Y>84w>HP{AbvD3ojSC^-~B zI0O$+qQYCT!tb&Rs}KWsMNeDU^%aGj<=}TJ-<^dP_d&MBdF7y}@9JC+1EVuEh&qM_ z9T23qcZ`I9d^i_hIdyH0h#;{3(xJ?Ob_Y1GFnZeT$XmfYh{z!$%X^@-05X6G_Glmg z;wnCU;rmhqy=d5j1Tx9af@__@?QrSTRKirjOK)r}hhF}wt1GZL<;Z<&V}0f#0g)!> z|GAz?>>nABRKU}b2p|z48DN;@r}Og~;Q`8KE6N+(2T=!VhZg#(p4{c$P23Y}`t-WZ zug0{L@06|ieYdJueJYzI)AZ=FdpR}t2FoQ3kP35b{IB*(?1%R z53at9Ma6-m36A*AjnxE#q1}PxU*YkbyDE+FPp9#eHuQlec}NA2vU51-VkD^x{fP@= zdRa+>Q)@MTk1{Ay!!Q8gN> z8W@QW3+YcPU&>`b0EPV=A=Ox~esPIzI+N%^Bj9fT#6q8O*9t&jwbI0wAIQ(sE!n!} zGeb#BB3gZUh;g@2mjWya#u*l$#p5v*1ZTAz$Ur% z7YZ(T*H;o8o^Q6dZ#hQEqTTdb>{OcZpi!xmp0g>zG;C6rO4mthAPO25#UcrmnK?_M zX1&Gj*E)#@U}qbl0J~QK=K94!qsnY!=(6dyL1CO)`qo9iPtI;Zz~$0ylc_o`mpmVh zN}%J`c7SMUd?nCza({w1_+Z`p(z^Frft~08=ubO9L2HkXMPDP=mY0afuvo!-r(g;~ zvNs(C5SzCYl@AKPjI7m_%a`F@HUb+P>#>!UrE}Z&yVu$P=~_#2Uq$j5lZpEpI=4bf zg8*Rv{7E_!{4)&NhSQCHZL!nmpU|J7O5#o#ecFYIf208L0+$AT&4VIJp5|Xt*-W!; z!}jah`HeoUj81CJ6y_u^hWG(4SAr-65mb7Yw=ww^hJ7cuk0fNhHQyBot%JNfxVMDt zc-4b6XiqLAQ7}j_CEmuvslhgT?7q$qUw-Sro`~Y-W*+Tb0iGs~e;W|JCo?Js!2V$r z-Iqo?5c`q)irc!GQt(gIUo1rcAPz8w$$)EaVQXdYQ;k){4NJ}nsZEsEFsrpXzfQ|W z4)9Ot>C;J757a^xU*vab7Mjg#q4iOh(4U`Fj8a=klh7tp@p>|fE+Zw-8spd2SGT*K zpI=>E^dj6%O`sjM9dFr{Rqv}p8xI5dYg*{?s{0cjqV;al4Zo%CkiUkeA$&Ih*^ zH#fJ!C&Pyzg{IgWH$J~Xy!{@}FVnw0xc%j#Hxzy)16fbT-lMCpe)1KVKZ~;uhP~n7 zd){1h8hU%LIjTwKb0NaMSlSUkEDG+cffJg?_n04?`+G2}v>COUE zTNbCD)>;i;^cyV?|I^LWc)8m%tGcUW`(1L=*d;*H*$l=PsRo$=#fFk+OC`aO2MH(% zz)VL6w4iM(w28`~D|jHc4etEam2FtT^2){s!By|ty?cw;!P7ez49?AArTRyqd*A$i z!_)IUt+F6v-hcTLvOai?*&ipwYN{b(i>`m=N}=VkMNJuXY_h)&QAD) z|L36zj^mgVND%*M2KjzOKwqKr9k=WUMZJq^(5QUu?^?7Ll!5<@9z!~)9FqAs=EQ@P z^th+bpH!UfqmIOhj4cd8f=QhYDga^N5-O**JOa2|uoeF4UKp`(d-Ik(Im5es_KmqP z6eFkaG?Mo4jx8RacsV<D#d?7dZhNv;I8w^x8Dg*!!j2^Am&#_^tpP#58TBM@8-g+t5RD}iHK1<4Nk zYbRH;DgoDV;R4tP|74$>qUg&}L8Si^sei$L#Qs~AQaaAUAQMt?LP|U7jB|Z|POrj# zJAPwh{TL=_|JDlKRW`)o-_%(9%-Mam!oizrcca?Ch5+)DoGIWRquBM(0UrE-L=Pp1 z43`&mbX=J7F8|~ijb96by_MB9U~H^~p#o=#YeQJyp{^aU?ZDh}aBexY?)3sOVP$^h z!$TRlZ6nePt5?Q=s#vXB z-dtY}1~w4$d%f2#+2gU*uk_H#tmJXRK2iO2P(=Gte2GoAX#bnIJaYV?NhS8p;$M9E zekv}mu~41lZs;*hyIlEB4W*?Y?=${A1n#mdHp*|B`+XYVi}~nyGP1;BO==;5#58pZ zq9NWQ*OO2HS41Z%5p)ya_UT19u+h)AR@Y*?$J=Le?}dXz)lts}0w26F5B>?j;Km9J zAs96R{0t7_a8qQRyrbYvZ|8y7kqgnYhvy@vPq+s``P0+k{z=<2+5zSBkpN-$Jb4t7 zh8kEX!i-_19ACPf$${8#k&lNyowT$R*Cp9XS%0 zC^tX{lrc42NC18aGEgEIAR43>K@H#zi;9ll+6u4TvbT=_?6sgYYikwU64eKh6-v0+ zg4Hkoy7c@>-0pk335ZWLf;vS6X$1f4@qy~GFSl01o8R1M8w1c=w*yezxtaHY zg-Ph-tr{-fP~2)vYprgNV6(+Hp()ms>;O&=(S0x_VsEpfGc-^|8~ z0kuYTaQ|s*wmAi@Ct3=3Qb){yq(n-lGF`!pfbfHgDl@JRr(e8%>)z(p=HePb9mMrF z2<@+HxciK;Y8&1GAfV`+XP^xkGB(CkR(HUOwn6u6!9F>BPPw-UdBKA0b&T;T_C_(z~k(_u@#_hu<*JHlh&JNy*&@w}MG0 z#lK|7{wG;_MG7&0bD9bhUPtncvxQ6k=5zYQGM7k~=1(&9^i?4O{1J-pkK@I?!#?ZjN zfWrlc9fSzS!~3J~fG7ClMUn3o5tk3jxd32X!ae%VMcp%=4k@CZ$s~~=^Anf||B>vE z+=0>cHZBjOa__p?863{?U zhX}XgGV(+O1BkZBx#OohW)HkJ!aXkGyFFv$cO%NP+$nJ@%v~t?-Le`~9tk2LF=9)_lj6 zCo`yxKJ~26$Hq`Gxiz;*CZPdL_(IYvB_UCwNC*BL5rJM@4rUyljxqZv>1IT%yLOoM z!lz`+@R_%VYNI9})q4{0Ik) zDV~D>qRbQCNjBY4oqYSY=ZlI_Q^fIcQ(#qydnWvW?^7yRQT3;ZYo#oZ*{Dj41LYT{ z7E|uoi(<9AjH=REg`82nP~(IH_|NnR+`yS1M8Zb3vk{xI2AikRXEd0#R7_&sD$4Z`M0a|RqYX%v0|PB5uquMwial$?xr4|i zW70})^K^G#Rgi?IPC{yaoI9O7d=Thk7%=x#CO4IZ^Ouz8)TEM7$X2~bY))D7%M51uU72Bazg0Hd zg0ze-u}S#w1iENiL{li?4k8IMN*Abs816uk-Xo9-2q@i%Xa9-lpwx43A5XB)fXK$U zk>L(tVsoVxOk_NY9xjw0hYup2Z-@c*LCl!cR-WFZzz~a0rv@g*L7abM70W4f|MEc0 zUn=u+X#G^b;<&Z27#YC-K~FsGH1H5I8uu=p#dYJzo%w5}y0%a7B?h(BdLD7FuY1-(NppKVyoxDtr`{0;P zGt<~;)0(1LPCDUAphi8!_^<`BxmmF6w!04|(S>3OBg!rh-6d+fQLqrvh3ci>XBUEA zg0AObciCN*J?A^;cg}ad@B1CR;*3brDpp_3_A}j(3H_6OUooV=`r>*D>reZpX2!KW zrL_ys{(B4nAlw(G-)uZO@4niH1=L1o$3iw#qtsjpvlX_Ow*#DG!Fb&b6Qod>1nnr# zmWL-^0tGI~MdEpqBe1xRkl0wVOc8n=IR=eMlvHyl^>Y&3B~o1l@;laY&>rfOt`FJx z25rmIZ{}UUeceHfp&oP4F5~D3f+5 z0Kk$fW6%KoX%MoOBbHc$za(;T;71}T*-7vdfwpcu+nTv&h7S|p>TcLrcv&f(yer!osXR_3sdc40N~$ffgW9ZS8L6a93Qe4Ttj-ZJ@of_d`2$Gm2M@h z*~kXX8>}BDvP{bB`=wcgu4HXOSwl(U9E{6^InOGo8@Q^GcRuoGb zmlAMo($9$01H=HAfn_%U13<9sEBL8*1;B^jbV6)7v^nr6-OJb~g@42wm#%Xm_*EZ@ zAEjiHCt*>J3+vP~kGX1=Rr0vg^GyE47;EHJ#NTXzUU>HI{@&crX%%Y`eSde79%7rw zi52<&fl~IN< zvASZ1k#a$Y7tfuR``us=YY)NdBg4+zj(Bw~h%eo4uAgbc@a-hkDrSx3u<~XzNH458 zouAG#zAbHRpaTB8<#c{Oz`fhwGyNRzw}$Nd&rFJo1?26d>}F0(b?vQ1^L!vv13 zfrA4G01QXBa0M73=EPmQRYZfsTYTtex}265se<4H8jE&(j33$neF+l!K4;xcTD}Z% ze>nfDg!!RJGpSS&wXbPX1LYuEyG)1;hf(R<&WHztm8@ zYWa%3q@r$Iip`sYjqI+tjmR?evq2xKei*=**IN7ZXaSqGzd(c)k%NTXvhXP7nc)FbObjVCo)-6T%5N4Fn&ZIXgb#8rshWAd&BN0{slb z?FdR$sgBiGvnnI7{tzCj4rC=@FvX-k*x6j)2%!Uta?KpawhPH({~ytxSYUtO)Bk3p z6*6g+o-g$1`yEW?M2{rPh>9OXWR$-pWNkzkUjrO|!I%@?>x(cX791`D2re(e0hOcY zmP@aEUPe=yB>5%MA390F6Nm1;EHVkio|w%Tr?)OOrHHDjs@unjtX~=2FT(>`eI^wh zTotZP>OH*B@@oY%lwN(pGcx#pNdKh|@U-~NVKQX0DsNiD?nZ91LFtO)L$Ba zNue01@8Z%`f|+p~r*dLAsQ~;2l<5~3_iRs>zj}JD5zzH{TJtQFbmwF`Hbm(Ej|qI> zz_ZzD`RD#0d&!bc^%~7iz?!EqGl34vrfCioKZ}HrCw+>U+qEmL{ywYnQ|&j18azeZM{2;PAh zDTb!>M|U^Z^A-InN=S_te){Pb%PjOi<)4((_W6Tk^_u{>gp_T``egyf`efs1A@;yQ zSLtGPP!_b4fnqA_TSB;fRgxrhZUB5lE4P;cE|LJ>c;@!Uum0k*2S2>?(2F%Be+_*HUuDE;#Lxj_WG1x#5{Pz#249|ca_^SK!&0TNw%FC^;W|XZx{)y(X zr-*wX|E!#LF<&^|IWgKY<UNKOTfiGI(%?A4XEYBlFz42>b8 zVK#pyWDW@UQEVZl^4-g?I@rB&b)$QE$xNpTrWxk8gY9Vl;(uCyRK@4;{W5dnEmLx9 zpJN}syma8$-HdguP>9dlvvhkvNO%3=WHMaPI1b32C7hm^+~4U)xkGgLknRq3F z{2X!~oW!y9-p8-wdP`$@_awejZ8ib=j_gd+42|$g3vAL)V*g>NpDZxh-lOtW{++j~ z-}b1I)yCn)JQS#JtD^#c4(i{3T+X`E3}-5#qc#?w0-13%g(Hx`aPZY+GuH`#pJ1x-?L|`j?p-0n_s_%r z?_ZEJ&jr&$S$bUaoAac>wd5c7GODZDDayLZ8g?5afVp(=Xu!nV`MqRXENa9E9Bk0< zV>{mn=A79VZ+`69`zBMX6$GL0bsVqX_k0(;1-MTJhf(T^ZNruFj&jXWZ#v>=|b(SKYs%7*VAG2*td0W zD;Pv~gbe9*Y9h^cp}h=pHl-`y|H7lZ+s1kBe`pwZ^XY0NtY0?Rpo`d@`{~tf->6WF zBK`ea0w@#<Pz)$7@!0+0D}Pr-?ltLt;nQQ zmDI9Db!&6v6MRozbMr^{-FCyRRrl04di+I4P2=!mVx+zhPWmfg8-{?QL1`sLE$h?5 z1B|K3JtoDXrd~2JvNSWNGR))OOh>iaMS#D5QO-Dz7wK~Bq~4-rG9QL5>AKQytUdKi z)Edg&sD>I=cvKn4fP-b%!oSyTu^w9N7rA0#=bJ)Wu-*E|wRb&o#obrmbkFT6K`=I5 zeT^|{;2;3|sS={#`S5!{s#ysb$eV@ae5fBh^Yo2gzO4iNYQ=DS(GEZJj_WwxuOa;Z zT{-(Kgh4s|)|TxUTR~dg?^^oh6|J$hDe;4$rKI~QVuO}~og#EW23IPC-jmS07T(N_ zMB(<^w+`cy)ZBXVjvK2&e;Rig)9E+~I@{3TH^GLV70_%o0*XGQ`0Jj$J;J|$UgG^8 zrhqZ6{^Gmuie;g8a2DEs|F)cV5x*Zk@@+R+%CyR2eqRCWce_|$d#a;WbbXMd8Ek0` zG2A7wKnmE90)Epj98!-;A+03mrSKo?z;SmjO+zwI1V8mirdiV_+EiMq=ew9C5#LbC`5(; zKD+6Hk@BT#=~qy53-#t>QvTqTOE1-_siCp+c{|g1`RVCMD0~U`|BvK!S`_J{!q&TL zo0`v)ef3K?sxGH}b!oHn)t+pXLP=W7=51MKKN`qXu!)_U%3jYq4%6}VlrwiPMy20# z7tRwSg|Xl+u+-91z&+IR)BvS!tq@j9SC#fQsu-sn+XK+(RG6Ekj}}Ucdv|+w?5Pz3 zDE|K|ffLYCv32ZtVzYo7rDn2*B30I}lKrCnusS&``ej`&wc*E{FYn88JRRQiBLr+? zR&YgX8{U+w8uUJ%!#RRyEY#=>GDec6YetIjpcpjqe7U9O?!9p(roH69T(?3V#u%Fx z)fKyo`<=B`fon5J{n`d5u*RUmNU-^pi6*9Nhh5sykM@-D(7ii`p~KzaIxLyq!SbU zrVdY_z_{}zui}D9k!7d$SR~tEno`{D%n32ubet9fWsxh2m^P&hN5)(q0;v7|2Xg8K0e=6WJgvXmEFPKW{K&&`h0H()9E1W) z>~O8xc@ra~loGySnG}Xh3u$)B*&Ob=wh|9YQh%0U#^aH|w%dvc9Mwy(-Ok!mk4>c5 zs|O0kv7+3iU;XhwSy*j<@w@F#dPMWZ=y|7}@;{N&E{X2*ba`Cgns6i2v`kb&y+B1C zLYYwO%Y5t^sX1xxzR!6wA=#qXG+j;?vH~Vp*d?3Wz!6G%Iv#s6l!Z9D#vX|C-a z#$M&aAq?gK@!%`rz9xp-<^Yd3>su$T>Bv*#qvxM~_9_1>`Ki6@2XPt-<9fXs7ab(q zL5FVQAH>L$491uzBorQ)I3!>LR|sh-#7K%@NrX0w?c5veRG*fBST8qtH(i%5MYOni z(7~a*a6=E_Cck$gi2uN?mHR5wHH};G;`~cBdl@_JKhg zD3j{Ov+LFM(m>RU%|fkKX4&9qhg@limu}L)t-~MDj1Zy4SHs%Nrn`^F?Tgo+!GuYH zi1jk8J)6%$o;-R#ZBi;)j_fan@&Bv>1*^8I&33Ns&bRCc@qFIt z$BQWbHx-nURJ9SM^^eoNhc=wwOduDEQ@z|$AtP>s8-!R69DY0qy~v~%d~jW?TQ(xl ztjHTx!1rH={yJ^J50PGX(nRV)UKGWf_okl@FZBu3{8n;qQN{n}3)W&}2ae$p7pCiP zxqU$ZB}^28?Yavy!{tO$;E5l{u@n*F5shfF6pcd7k0#K7)Q4L&(DnT^87u8BJkZKp z^XG4FXb|>;Kuy*b&GvsmhF3JCI;uIN_2GQpcqf7}2#+DVhm#{2=poltWj5|1j-yc& z`QAwINJyYaN>Y1sv*lPC5TI>VJB_GSc+~rRSnSUr=>dX7;TI03%pJOEkS1#IR!R z?$fv1^Sw783$7RrfFEHKP=G3XQW!Q4cekh8Pw!s4BTTmRr11C|rTFUxQGIXb?w&z!HsQd_Ko5+0OqB zPGy)9{1A&kpV+EpAtY_6b->Fn9eDtCro%jNSMY)WB1pIhV4aI2Y>?CGU9_+uR77{^!| Zd<9lMIS;)vBKrUU002ovPDHLkV1jgKTC)HE diff --git a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs index aa4d8f9566..7068c4861c 100644 --- a/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs +++ b/SolastaUnfinishedBusiness/Spells/SpellBuildersLevel09.cs @@ -355,6 +355,14 @@ public bool IsValid(CursorLocationSelectTarget __instance, GameLocationCharacter #region Power Word Kill + internal static readonly EffectForm PowerWordKill2014 = EffectFormBuilder + .Create() + .SetKillForm(KillCondition.UnderHitPoints, 0F, 100) + .Build(); + + internal static readonly EffectForm PowerWordKill2024 = + EffectFormBuilder.DamageForm(DamageTypePsychic, 12, DieType.D12); + internal static SpellDefinition BuildPowerWordKill() { return SpellDefinitionBuilder @@ -371,11 +379,7 @@ internal static SpellDefinition BuildPowerWordKill() EffectDescriptionBuilder .Create() .SetTargetingData(Side.Enemy, RangeType.Distance, 12, TargetType.IndividualsUnique) - .SetEffectForms( - EffectFormBuilder - .Create() - .SetKillForm(KillCondition.UnderHitPoints, 0F, 100) - .Build()) + .SetEffectForms(PowerWordKill2014) .SetParticleEffectParameters(FingerOfDeath) .Build()) .AddCustomSubFeatures( @@ -386,9 +390,6 @@ internal static SpellDefinition BuildPowerWordKill() private sealed class MagicEffectBeforeHitConfirmedOnEnemyPowerWordKill : IMagicEffectBeforeHitConfirmedOnEnemy { - private static readonly EffectForm PsychicDamage = - EffectFormBuilder.DamageForm(DamageTypePsychic, 12, DieType.D12); - public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( GameLocationBattleManager battleManager, GameLocationCharacter attacker, @@ -400,9 +401,9 @@ public IEnumerator OnMagicEffectBeforeHitConfirmedOnEnemy( bool criticalHit) { if (Main.Settings.EnableOneDndPowerWordKillSpell && - defender.RulesetActor.CurrentHitPoints < 100) + defender.RulesetActor.CurrentHitPoints <= 100) { - actualEffectForms.SetRange(PsychicDamage); + actualEffectForms.SetRange(PowerWordKill2014); } yield break; From 30f91c6bff7d4cfda0a836ebfe15f77da9d2a78b Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 18 Nov 2024 12:50:08 -0800 Subject: [PATCH 40/44] tweak martial arcane bursting arrow and update collaterals --- ...esentation-InvalidSyntaxTranslation-en.txt | 6 + .../UnfinishedBusinessBlueprints/Assets.txt | 4 + ...artialArcaneArcherBurstingArrowDamage.json | 4 +- ...erCreateSpellStoringWandOfMagicWeapon.json | 358 ++++++++++++++++++ .../SpellStoringWandOfMagicWeapon.json | 257 +++++++++++++ ...erCreateSpellStoringWandOfMagicWeapon.json | 193 ++++++++++ .../SpellPowerInventorSpellStoringItem2.json | 1 + Documentation/Spells.md | 2 +- .../Subclasses/MartialArcaneArcher.cs | 5 +- 9 files changed, 825 insertions(+), 5 deletions(-) create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfMagicWeapon.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfMagicWeapon.json create mode 100644 Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCreateSpellStoringWandOfMagicWeapon.json diff --git a/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt b/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt index 77522f4477..7437030406 100644 --- a/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt +++ b/Diagnostics/CE-Definitions-GuiPresentation-InvalidSyntaxTranslation-en.txt @@ -1286,6 +1286,8 @@ PowerCreateSpellStoringWandOfMageArmor Title='Mage Armor'. PowerCreateSpellStoringWandOfMageArmor Description='Create a wand that can cast Mage Armor (I) spell using your Artificer spell attack modifier and save DC.'. PowerCreateSpellStoringWandOfMagicMissile Title='Magic Missile'. PowerCreateSpellStoringWandOfMagicMissile Description='Create a wand that can cast Magic Missile (I) spell using your Artificer spell attack modifier and save DC.'. +PowerCreateSpellStoringWandOfMagicWeapon Title='Magic Weapon'. +PowerCreateSpellStoringWandOfMagicWeapon Description='Create a wand that can cast Magic Weapon (II) spell using your Artificer spell attack modifier and save DC.'. PowerCreateSpellStoringWandOfMagnifyGravity Title='Magnify Gravity'. PowerCreateSpellStoringWandOfMagnifyGravity Description='Create a wand that can cast Magnify Gravity (I) spell using your Artificer spell attack modifier and save DC.'. PowerCreateSpellStoringWandOfMirrorImage Title='Mirror Image'. @@ -1546,6 +1548,8 @@ SpellPowerCreateSpellStoringWandOfLevitate Title='Levitate'. SpellPowerCreateSpellStoringWandOfLevitate Description='Create a wand that can cast Levitate (II) spell using your Artificer spell attack modifier and save DC.'. SpellPowerCreateSpellStoringWandOfLongstrider Title='Longstrider'. SpellPowerCreateSpellStoringWandOfLongstrider Description='Create a wand that can cast Longstrider (I) spell using your Artificer spell attack modifier and save DC.'. +SpellPowerCreateSpellStoringWandOfMagicWeapon Title='Magic Weapon'. +SpellPowerCreateSpellStoringWandOfMagicWeapon Description='Create a wand that can cast Magic Weapon (II) spell using your Artificer spell attack modifier and save DC.'. SpellPowerCreateSpellStoringWandOfProtectionFromPoison Title='Protection from Poison'. SpellPowerCreateSpellStoringWandOfProtectionFromPoison Description='Create a wand that can cast Protection from Poison (II) spell using your Artificer spell attack modifier and save DC.'. SpellPowerCreateSpellStoringWandOfSeeInvisibility Title='See Invisibility'. @@ -1822,6 +1826,8 @@ SpellStoringWandOfMageArmor Title='Wand of Mage Armor'. SpellStoringWandOfMageArmor Description='This wand allows casting the Mage Armor spell using spell casting stats of the Artificer who created it.'. SpellStoringWandOfMagicMissile Title='Wand of Magic Missile'. SpellStoringWandOfMagicMissile Description='This wand allows casting the Magic Missile spell using spell casting stats of the Artificer who created it.'. +SpellStoringWandOfMagicWeapon Title='Wand of Magic Weapon'. +SpellStoringWandOfMagicWeapon Description='This wand allows casting the Magic Weapon spell using spell casting stats of the Artificer who created it.'. SpellStoringWandOfMagnifyGravity Title='Wand of Magnify Gravity'. SpellStoringWandOfMagnifyGravity Description='This wand allows casting the Magnify Gravity spell using spell casting stats of the Artificer who created it.'. SpellStoringWandOfMirrorImage Title='Wand of Mirror Image'. diff --git a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt index 88955cbb8c..0cad0a5bcc 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt +++ b/Diagnostics/UnfinishedBusinessBlueprints/Assets.txt @@ -3269,6 +3269,7 @@ PowerCreateSpellStoringWandOfLevitate FeatureDefinitionPowerSharedPool FeatureDe PowerCreateSpellStoringWandOfLongstrider FeatureDefinitionPowerSharedPool FeatureDefinition 3d6d2247-b623-51d5-8610-13ebc867df3a PowerCreateSpellStoringWandOfMageArmor FeatureDefinitionPowerSharedPool FeatureDefinition ba520d41-fbc8-55a9-b25b-c85ece1b6393 PowerCreateSpellStoringWandOfMagicMissile FeatureDefinitionPowerSharedPool FeatureDefinition d294e6ed-4e77-5e0d-8b3d-b47d59e5a472 +PowerCreateSpellStoringWandOfMagicWeapon FeatureDefinitionPowerSharedPool FeatureDefinition cd076fcb-d6f1-588e-ba92-764dcd3b0efb PowerCreateSpellStoringWandOfMagnifyGravity FeatureDefinitionPowerSharedPool FeatureDefinition 5747c51b-c22a-50f2-80ab-65a389328022 PowerCreateSpellStoringWandOfMirrorImage FeatureDefinitionPowerSharedPool FeatureDefinition 4fb9cbe8-b402-5fc8-9360-eb1ef4fe6ea8 PowerCreateSpellStoringWandOfMoonBeam FeatureDefinitionPowerSharedPool FeatureDefinition 1230a203-f7b3-5cf4-bc00-baa24ec3b9bf @@ -6160,6 +6161,7 @@ PowerCreateSpellStoringWandOfLevitate FeatureDefinitionPowerSharedPool FeatureDe PowerCreateSpellStoringWandOfLongstrider FeatureDefinitionPowerSharedPool FeatureDefinitionPower 3d6d2247-b623-51d5-8610-13ebc867df3a PowerCreateSpellStoringWandOfMageArmor FeatureDefinitionPowerSharedPool FeatureDefinitionPower ba520d41-fbc8-55a9-b25b-c85ece1b6393 PowerCreateSpellStoringWandOfMagicMissile FeatureDefinitionPowerSharedPool FeatureDefinitionPower d294e6ed-4e77-5e0d-8b3d-b47d59e5a472 +PowerCreateSpellStoringWandOfMagicWeapon FeatureDefinitionPowerSharedPool FeatureDefinitionPower cd076fcb-d6f1-588e-ba92-764dcd3b0efb PowerCreateSpellStoringWandOfMagnifyGravity FeatureDefinitionPowerSharedPool FeatureDefinitionPower 5747c51b-c22a-50f2-80ab-65a389328022 PowerCreateSpellStoringWandOfMirrorImage FeatureDefinitionPowerSharedPool FeatureDefinitionPower 4fb9cbe8-b402-5fc8-9360-eb1ef4fe6ea8 PowerCreateSpellStoringWandOfMoonBeam FeatureDefinitionPowerSharedPool FeatureDefinitionPower 1230a203-f7b3-5cf4-bc00-baa24ec3b9bf @@ -8580,6 +8582,7 @@ SpellStoringWandOfLevitate ItemDefinition ItemDefinition 2c5ea290-6814-5faf-a0ee SpellStoringWandOfLongstrider ItemDefinition ItemDefinition 153f8d70-1a9c-5082-a553-a88b39230417 SpellStoringWandOfMageArmor ItemDefinition ItemDefinition 176168a6-d1db-5754-a575-f04234f43536 SpellStoringWandOfMagicMissile ItemDefinition ItemDefinition 69379745-9091-51e4-87eb-824991b76b44 +SpellStoringWandOfMagicWeapon ItemDefinition ItemDefinition e9d7d695-2e96-513a-acb9-09fe65233e8b SpellStoringWandOfMagnifyGravity ItemDefinition ItemDefinition 0e2ce3fb-0554-57be-9721-9be8b7a48716 SpellStoringWandOfMirrorImage ItemDefinition ItemDefinition 2bc5f501-970e-5237-9cd2-554ee0a4e08d SpellStoringWandOfMoonBeam ItemDefinition ItemDefinition d890edaa-abd9-572e-bdec-1899ed70a64e @@ -12549,6 +12552,7 @@ SpellPowerCreateSpellStoringWandOfJump SpellDefinition SpellDefinition 2a1c6a52- SpellPowerCreateSpellStoringWandOfLesserRestoration SpellDefinition SpellDefinition 74829b05-e117-5bbd-8c88-8ae6ad144f35 SpellPowerCreateSpellStoringWandOfLevitate SpellDefinition SpellDefinition 65faa1e8-8d58-5fba-809b-ad687f339c86 SpellPowerCreateSpellStoringWandOfLongstrider SpellDefinition SpellDefinition 75212485-bfb8-5fa1-987d-cc85d4c45515 +SpellPowerCreateSpellStoringWandOfMagicWeapon SpellDefinition SpellDefinition c1ca2d21-9129-54f7-88d5-2dcabe933902 SpellPowerCreateSpellStoringWandOfProtectionFromPoison SpellDefinition SpellDefinition 14464b01-5974-5845-8f44-3255661ac027 SpellPowerCreateSpellStoringWandOfSeeInvisibility SpellDefinition SpellDefinition 013ae371-c645-5d7f-86a8-c29edea9de61 SpellPowerCreateSpellStoringWandOfSpiderClimb SpellDefinition SpellDefinition afc50e93-bfce-5358-9e57-63e8738ec40e diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerMartialArcaneArcherBurstingArrowDamage.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerMartialArcaneArcherBurstingArrowDamage.json index fd5ddbd612..68e590438c 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerMartialArcaneArcherBurstingArrowDamage.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPower/PowerMartialArcaneArcherBurstingArrowDamage.json @@ -6,9 +6,9 @@ "rangeParameter": 6, "halfDamageOnAMiss": false, "hitAffinitiesByTargetTag": [], - "targetType": "IndividualsUnique", + "targetType": "Cube", "itemSelectionType": "None", - "targetParameter": 1, + "targetParameter": 7, "targetParameter2": 2, "emissiveBorder": "None", "emissiveParameter": 1, diff --git a/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfMagicWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfMagicWeapon.json new file mode 100644 index 0000000000..d2ec19e61d --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/FeatureDefinitionPowerSharedPool/PowerCreateSpellStoringWandOfMagicWeapon.json @@ -0,0 +1,358 @@ +{ + "$type": "FeatureDefinitionPowerSharedPool, SolastaUnfinishedBusiness", + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "None", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "CharacterOnly", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "All", + "durationType": "Permanent", + "durationParameter": 0, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": true, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [ + { + "$type": "EffectForm, Assembly-CSharp", + "formType": "Summon", + "addBonusMode": "None", + "applyLevel": "No", + "levelType": "ClassLevel", + "levelMultiplier": 1, + "diceByLevelTable": [], + "createdByCharacter": true, + "createdByCondition": false, + "hasSavingThrow": true, + "savingThrowAffinity": "None", + "dcModifier": 0, + "canSaveToCancel": false, + "saveOccurence": "EndOfTurn", + "summonForm": { + "$type": "SummonForm, Assembly-CSharp", + "summonType": "InventoryItem", + "itemDefinition": "Definition:SpellStoringWandOfMagicWeapon:e9d7d695-2e96-513a-acb9-09fe65233e8b", + "trackItem": true, + "monsterDefinitionName": "", + "number": 1, + "conditionDefinition": null, + "persistOnConcentrationLoss": true, + "decisionPackage": null, + "effectProxyDefinitionName": null + }, + "hasFilterId": false, + "filterId": 0 + } + ], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "c61bb30a4b6e80642a36538c6ff1d675", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterSelfParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "casterQuickSpellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "targetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "effectSubTargetParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "zoneParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "beforeImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "impactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectImpactParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderCellEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "emissiveBorderSurfaceEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionStartParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "f4489c0ea1762ec4dbe7fedbbcf0d4a8", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "conditionEndParticleReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "3b107035e3bdbc6418aedb674221f5e3", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation1", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "delegatedToAction": false, + "surrogateToSpell": null, + "triggeredBySpecialMove": false, + "activationTime": "Action", + "autoActivationRequiredTargetSenseType": "None", + "autoActivationRequiredTargetCreatureTag": "", + "autoActivationPowerTag": "", + "triggeringPower": null, + "copyTargetingFromTriggeringPower": false, + "reactionContext": "None", + "damageTypes": [], + "reactionName": "", + "reactionActingCharacterParamIdx": 0, + "reactionAttackerParamIdx": -1, + "hasCastingFailure": false, + "castingSuccessComputation": "CasterLevel", + "canUseInDialog": false, + "disableIfConditionIsOwned": null, + "disableIfTargetConditionIsOwned": null, + "rechargeRate": "LongRest", + "costPerUse": 1, + "spellcastingFeature": null, + "usesDetermination": "Fixed", + "abilityScoreDetermination": "Explicit", + "usesAbilityScoreName": "Charisma", + "fixedUsesPerRecharge": 1, + "abilityScore": "Intelligence", + "attackHitComputation": "AbilityScore", + "fixedAttackHit": 0, + "abilityScoreBonusToAttack": false, + "proficiencyBonusToAttack": false, + "uniqueInstance": true, + "showCasting": true, + "shortTitleOverride": "", + "overriddenPower": null, + "includeBaseDescription": false, + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Magic Weapon", + "description": "Create a wand that can cast Magic Weapon (II) spell using your Artificer spell attack modifier and save DC.", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "cdbd83e68b3d8d44eb03f6852a7fd63b", + "m_SubObjectName": "MagicWeapon", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=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": "cd076fcb-d6f1-588e-ba92-764dcd3b0efb", + "contentPack": 9999, + "name": "PowerCreateSpellStoringWandOfMagicWeapon" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfMagicWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfMagicWeapon.json new file mode 100644 index 0000000000..25ed18baad --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/ItemDefinition/SpellStoringWandOfMagicWeapon.json @@ -0,0 +1,257 @@ +{ + "$type": "ItemDefinition, Assembly-CSharp", + "inDungeonEditor": false, + "merchantCategory": "MagicDevice", + "weight": 0.5, + "slotTypes": [ + "UtilitySlot", + "ContainerSlot" + ], + "slotsWhereActive": [ + "MainHandSlot", + "OffHandSlot", + "UtilitySlot" + ], + "activeOnGround": false, + "destroyedWhenUnequiped": false, + "forceEquip": false, + "forceEquipSlot": "", + "canBeStacked": false, + "stackSize": 10, + "defaultStackCount": -1, + "costs": [ + 0, + 0, + 0, + 0, + 0 + ], + "itemTags": [ + "Wood" + ], + "activeTags": [], + "inactiveTags": [], + "magical": true, + "requiresAttunement": false, + "requiresIdentification": false, + "requiredAttunementClasses": [], + "itemRarity": "Rare", + "incompatibleWithMonkReturnMissile": false, + "staticProperties": [], + "isArmor": false, + "isWeapon": false, + "isAmmunition": false, + "isUsableDevice": true, + "usableDeviceDescription": { + "$type": "UsableDeviceDescription, Assembly-CSharp", + "usage": "Charges", + "chargesCapital": "Fixed", + "chargesCapitalNumber": 6, + "chargesCapitalDie": "D1", + "chargesCapitalBonus": 0, + "rechargeRate": "None", + "rechargeNumber": 1, + "rechargeDie": "D1", + "rechargeBonus": 0, + "outOfChargesConsequence": "Destroy", + "magicAttackBonus": -2, + "saveDC": -2, + "deviceFunctions": [ + { + "$type": "DeviceFunctionDescription, Assembly-CSharp", + "parentUsage": "ByFunction", + "useAffinity": "ChargeCost", + "useAmount": 1, + "rechargeRate": "Dawn", + "durationType": "Instantaneous", + "canOverchargeSpell": false, + "type": "Spell", + "spellDefinition": "Definition:MagicWeapon:c9c2c6779e83836468fb6f4ab562897f", + "featureDefinitionPower": null + } + ], + "usableDeviceTags": [], + "onUseParticle": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": null, + "m_SubObjectType": null + } + }, + "isTool": false, + "isMusicalInstrument": false, + "musicalInstrumentDefinition": null, + "isStarterPack": false, + "isContainerItem": false, + "isLightSourceItem": false, + "isFocusItem": true, + "focusItemDefinition": { + "$type": "FocusItemDescription, Assembly-CSharp", + "focusType": "Arcane", + "shownAsFocus": true + }, + "isWealthPile": false, + "isSpellbook": false, + "isDocument": false, + "isFood": false, + "isFactionRelic": false, + "personalityFlagOccurences": [], + "soundEffectDescriptionOverride": { + "$type": "SoundEffectDescription, Assembly-CSharp", + "startEvent": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "stopEvent": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "startSwitch": { + "$type": "AK.Wwise.Switch, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "groupIdInternal": 0, + "groupGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + }, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "stopSwitch": { + "$type": "AK.Wwise.Switch, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "groupIdInternal": 0, + "groupGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + }, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiStoreBody": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiPickBody": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiStoreOther": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + }, + "guiPickOther": { + "$type": "AK.Wwise.Event, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + } + }, + "soundEffectOnHitDescriptionOverride": { + "$type": "SoundEffectOnHitDescription, Assembly-CSharp", + "switchOnHit": { + "$type": "AK.Wwise.Switch, AK.Wwise.Unity.API.WwiseTypes", + "WwiseObjectReference": null, + "groupIdInternal": 0, + "groupGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + }, + "idInternal": 0, + "valueGuidInternal": { + "$type": "System.Byte[], mscorlib", + "$value": "" + } + } + }, + "itemPresentation": { + "$type": "ItemPresentation, Assembly-CSharp", + "unidentifiedTitle": "Equipment/&WandSpecialTitle", + "unidentifiedDescription": "Equipment/&WandSpecialDescription", + "overrideSubtype": "None", + "assetReference": { + "$type": "UnityEngine.AddressableAssets.AssetReference, Unity.Addressables", + "m_AssetGUID": "", + "m_SubObjectName": "", + "m_SubObjectType": "" + }, + "scaleFactorWhileWielded": 1.0, + "useArmorAddressableName": false, + "isArmorAddressableNameGenderSpecific": false, + "armorAddressableName": "", + "maleArmorAddressableName": "", + "femaleArmorAddressableName": "", + "useCustomArmorMaterial": false, + "customArmorMaterial": "", + "ignoreCustomArmorMaterialOnCommonClothes": false, + "hasCrownVariationMask": false, + "crownVariationMask": 0, + "sameBehavioursForMaleAndFemale": true, + "maleBodyPartBehaviours": [], + "femaleBodyPartBehaviours": [], + "itemFlags": [], + "serializedVersion": 1 + }, + "clueSuspectPairs": [], + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Wand of Magic Weapon", + "description": "This wand allows casting the Magic Weapon spell using spell casting stats of the Artificer who created it.", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "99f5e6021bff7994bb5b9f6832f8145a", + "m_SubObjectName": "WandOfMagicMissiles", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=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": "e9d7d695-2e96-513a-acb9-09fe65233e8b", + "contentPack": 9999, + "name": "SpellStoringWandOfMagicWeapon" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCreateSpellStoringWandOfMagicWeapon.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCreateSpellStoringWandOfMagicWeapon.json new file mode 100644 index 0000000000..27939b72c8 --- /dev/null +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerCreateSpellStoringWandOfMagicWeapon.json @@ -0,0 +1,193 @@ +{ + "$type": "SpellDefinition, Assembly-CSharp", + "spellsBundle": false, + "subspellsList": [], + "compactSubspellsTooltip": false, + "implemented": true, + "schoolOfMagic": "SchoolEvocation", + "spellLevel": 0, + "ritual": false, + "uniqueInstance": false, + "castingTime": "Action", + "reactionContext": "None", + "ritualCastingTime": "Action", + "requiresConcentration": false, + "effectDescription": { + "$type": "EffectDescription, Assembly-CSharp", + "rangeType": "Self", + "rangeParameter": 0, + "halfDamageOnAMiss": false, + "hitAffinitiesByTargetTag": [], + "targetType": "Self", + "itemSelectionType": "Equiped", + "targetParameter": 1, + "targetParameter2": 2, + "emissiveBorder": "None", + "emissiveParameter": 1, + "requiresTargetProximity": false, + "targetProximityDistance": 6, + "targetExcludeCaster": false, + "canBePlacedOnCharacter": true, + "affectOnlyGround": false, + "targetFilteringMethod": "AllCharacterAndGadgets", + "targetFilteringTag": "No", + "requiresVisibilityForPosition": true, + "inviteOptionalAlly": false, + "slotTypes": [], + "recurrentEffect": "No", + "retargetAfterDeath": false, + "retargetActionType": "Bonus", + "poolFilterDiceNumber": 5, + "poolFilterDieType": "D8", + "trapRangeType": "Triggerer", + "targetConditionName": "", + "targetConditionAsset": null, + "targetSide": "Enemy", + "durationType": "Instantaneous", + "durationParameter": 1, + "endOfEffect": "EndOfTurn", + "hasSavingThrow": false, + "disableSavingThrowOnAllies": false, + "savingThrowAbility": "Dexterity", + "ignoreCover": false, + "grantedConditionOnSave": null, + "rollSaveOnlyIfRelevantForms": false, + "hasShoveRoll": false, + "createdByCharacter": false, + "difficultyClassComputation": "SpellCastingFeature", + "savingThrowDifficultyAbility": "Wisdom", + "fixedSavingThrowDifficultyClass": 15, + "savingThrowAffinitiesBySense": [], + "savingThrowAffinitiesByFamily": [], + "damageAffinitiesByFamily": [], + "advantageForEnemies": false, + "canBeDispersed": false, + "hasVelocity": false, + "velocityCellsPerRound": 2, + "velocityType": "AwayFromSourceOriginalPosition", + "restrictedCreatureFamilies": [], + "immuneCreatureFamilies": [], + "restrictedCharacterSizes": [], + "hasLimitedEffectPool": false, + "effectPoolAmount": 60, + "effectApplication": "All", + "effectFormFilters": [], + "effectForms": [], + "specialFormsDescription": "", + "effectAdvancement": { + "$type": "EffectAdvancement, Assembly-CSharp", + "effectIncrementMethod": "None", + "incrementMultiplier": 1, + "additionalTargetsPerIncrement": 0, + "additionalSubtargetsPerIncrement": 0, + "additionalDicePerIncrement": 0, + "additionalSpellLevelPerIncrement": 0, + "additionalSummonsPerIncrement": 0, + "additionalHPPerIncrement": 0, + "additionalTempHPPerIncrement": 0, + "additionalTargetCellsPerIncrement": 0, + "additionalItemBonus": 0, + "additionalWeaponDie": 0, + "alteredDuration": "None" + }, + "speedType": "Instant", + "speedParameter": 10.0, + "offsetImpactTimeBasedOnDistance": false, + "offsetImpactTimeBasedOnDistanceFactor": 0.1, + "offsetImpactTimePerTarget": 0.0, + "effectParticleParameters": { + "$type": "EffectParticleParameters, Assembly-CSharp", + "casterParticleReference": null, + "casterSelfParticleReference": null, + "casterQuickSpellParticleReference": null, + "targetParticleReference": null, + "effectParticleReference": null, + "effectSubTargetParticleReference": null, + "zoneParticleReference": null, + "beforeImpactParticleReference": null, + "impactParticleReference": null, + "activeEffectImpactParticleReference": null, + "activeEffectCellStartParticleReference": null, + "activeEffectCellParticleReference": null, + "activeEffectCellEndParticleReference": null, + "activeEffectSurfaceStartParticleReference": null, + "activeEffectSurfaceParticleReference": null, + "activeEffectSurfaceEndParticleReference": null, + "activeEffectSurfaceParticlePerIndex": "", + "activeEffectSurfaceParticlePerIndexCount": 0, + "emissiveBorderCellStartParticleReference": null, + "emissiveBorderCellParticleReference": null, + "emissiveBorderCellEndParticleReference": null, + "emissiveBorderSurfaceStartParticleReference": null, + "emissiveBorderSurfaceParticleReference": null, + "emissiveBorderSurfaceEndParticleReference": null, + "conditionStartParticleReference": null, + "conditionParticleReference": null, + "conditionEndParticleReference": null, + "forceApplyZoneParticle": false, + "applyEmissionColorOnWeapons": false, + "emissionColor": { + "$type": "UnityEngine.Color, UnityEngine.CoreModule", + "r": 0.0, + "g": 0.0, + "b": 0.0, + "a": 0.0 + }, + "emissionColorFadeInDuration": 0.0, + "emissionColorFadeOutDuration": 0.0 + }, + "effectAIParameters": { + "$type": "EffectAIParameters, Assembly-CSharp", + "aoeScoreMultiplier": 1.0, + "cooldownForCaster": 0, + "cooldownForBattle": 0, + "sortingScoreMultiplier": 1.0, + "dynamicCooldown": false + }, + "animationMagicEffect": "Animation0", + "lightCounterDispellsEffect": false, + "hideSavingThrowAnimation": false + }, + "aiParameters": { + "$type": "SpellAIParameters, Assembly-CSharp", + "learnPriority": "Low", + "preparePriority": "Low" + }, + "concentrationAction": "None", + "verboseComponent": true, + "somaticComponent": true, + "materialComponentType": "Mundane", + "specificMaterialComponentTag": "Diamond", + "specificMaterialComponentCostGp": 100, + "specificMaterialComponentConsumed": true, + "terminateOnItemUnequip": false, + "displayConditionDuration": false, + "vocalSpellSemeType": "None", + "guiPresentation": { + "$type": "GuiPresentation, Assembly-CSharp", + "hidden": false, + "title": "Magic Weapon", + "description": "Create a wand that can cast Magic Weapon (II) spell using your Artificer spell attack modifier and save DC.", + "spriteReference": { + "$type": "UnityEngine.AddressableAssets.AssetReferenceSprite, Unity.Addressables", + "m_AssetGUID": "cdbd83e68b3d8d44eb03f6852a7fd63b", + "m_SubObjectName": "MagicWeapon", + "m_SubObjectType": "UnityEngine.Sprite, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=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": "c1ca2d21-9129-54f7-88d5-2dcabe933902", + "contentPack": 9999, + "name": "SpellPowerCreateSpellStoringWandOfMagicWeapon" +} \ No newline at end of file diff --git a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerInventorSpellStoringItem2.json b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerInventorSpellStoringItem2.json index 033b9608f1..ede4b161a0 100644 --- a/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerInventorSpellStoringItem2.json +++ b/Diagnostics/UnfinishedBusinessBlueprints/SpellDefinition/SpellPowerInventorSpellStoringItem2.json @@ -10,6 +10,7 @@ "Definition:SpellPowerCreateSpellStoringWandOfInvisibility:3d5d8b2b-61ad-5713-9e57-bb3e0b10771c", "Definition:SpellPowerCreateSpellStoringWandOfLesserRestoration:74829b05-e117-5bbd-8c88-8ae6ad144f35", "Definition:SpellPowerCreateSpellStoringWandOfLevitate:65faa1e8-8d58-5fba-809b-ad687f339c86", + "Definition:SpellPowerCreateSpellStoringWandOfMagicWeapon:c1ca2d21-9129-54f7-88d5-2dcabe933902", "Definition:SpellPowerCreateSpellStoringWandOfProtectionFromPoison:14464b01-5974-5845-8f44-3255661ac027", "Definition:SpellPowerCreateSpellStoringWandOfSeeInvisibility:013ae371-c645-5d7f-86a8-c29edea9de61", "Definition:SpellPowerCreateSpellStoringWandOfSpiderClimb:afc50e93-bfce-5358-9e57-63e8738ec40e" diff --git a/Documentation/Spells.md b/Documentation/Spells.md index a64db78795..80bab2c257 100644 --- a/Documentation/Spells.md +++ b/Documentation/Spells.md @@ -1952,7 +1952,7 @@ Blazing orbs of fire plummet to the ground at a single point you can see within **[Bard, Cleric]** -A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. +A wave of healing energy washes over the creature you touch. The target regains all its hit points. If the creature is charmed, frightened, paralyzed, poisoned, or stunned, the condition ends. If the creature is prone, it can use its reaction to stand up. This spell has no effect on undead or constructs. # 323. - *Power Word Kill* © (V,S) level 9 Transmutation [UB] diff --git a/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs b/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs index 409edffaf2..b3cd60a724 100644 --- a/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs +++ b/SolastaUnfinishedBusiness/Subclasses/MartialArcaneArcher.cs @@ -329,7 +329,7 @@ private static List BuildArcaneShotPowers( .SetEffectDescription( EffectDescriptionBuilder .Create() - .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.IndividualsUnique) + .SetTargetingData(Side.Enemy, RangeType.Distance, 6, TargetType.Cube, 7) .SetEffectForms( EffectFormBuilder .Create() @@ -677,13 +677,14 @@ private void HandleBurstingArrow(GameLocationCharacter attacker, GameLocationCha var rulesetAttacker = attacker.RulesetCharacter; var usablePower = PowerProvider.Get(powerBurstingArrowDamage, rulesetAttacker); var targets = Gui.Battle.AllContenders - .Where(x => x.IsWithinRange(defender, 3) && x != defender) + .Where(x => x.IsWithinRange(defender, 3)) .ToArray(); EffectHelpers .StartVisualEffect(attacker, defender, SpellDefinitions.Shatter, EffectHelpers.EffectType.Zone); // burst arrow damage is a use at will power + rulesetAttacker.LogCharacterUsedPower(powerBurstingArrow); attacker.MyExecuteActionSpendPower(usablePower, targets); } } From 4404252ade24ace606e793fdb5680ce85cb60c75 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 18 Nov 2024 13:42:07 -0800 Subject: [PATCH 41/44] tweak translations --- SolastaUnfinishedBusiness/Translations/de/Settings-de.txt | 2 +- SolastaUnfinishedBusiness/Translations/en/Settings-en.txt | 2 +- SolastaUnfinishedBusiness/Translations/es/Settings-es.txt | 2 +- SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt | 2 +- SolastaUnfinishedBusiness/Translations/it/Settings-it.txt | 2 +- SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt | 2 +- SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt | 2 +- SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt | 2 +- SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt | 2 +- SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt index 54d936bab8..91cb241a06 100644 --- a/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt +++ b/SolastaUnfinishedBusiness/Translations/de/Settings-de.txt @@ -154,7 +154,7 @@ ModUi/&EnableOneDndGuidanceSpell=Aktivieren Sie die Zauberversion Wunden heilen, Falsches Leben, Heilendes Wort, Massenheilung von Wunden und Massenheilungswort 5e 2024 Zauberversion [bessere Heilung] ModUi/&EnableOneDndLesserRestorationSpell=Aktiviere die Zauberversion Geringere Wiederherstellung 5e 2024 [Bonusaktion] ModUi/&EnableOneDndMagicWeaponSpell=Aktiviere Magische Waffe 5e 2024 Zauberversion [Bonusaktion, keine Konzentration, Verstärkungs-Upgrade auf der 3. und 6. Zauberstufe] -ModUi/&EnableOneDndPowerWordKillSpell=Aktiviere Machtwort: Töten 5e 2024 Zauberversion [12d12 psychischer Schaden wenn unter 100 PS] +ModUi/&EnableOneDndPowerWordKillSpell=Aktiviere Machtwort: Töten 5e 2024 Zauberversion [12d12 psychischer Schaden wenn über 100 PS] ModUi/&EnableOneDndStoneSkinSpell=Aktiviere Steinhaut 5e 2024 Zauberversion [bietet auch Widerstand gegen magisches B/P/S] ModUi/&EnableOneDndTrueStrikeCantrip=Aktiviere True Strike 5e 2024 Cantrip-Version [Neustart erforderlich]\n[Angriff nutzt deine Zauberfähigkeit für den Angriffswurf und Schadensbonus sowie zusätzlichen Strahlungsschaden ab Level 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Aktiviere Handauflegen als Bonusaktion diff --git a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt index d41a7d28c8..a26ae4283e 100644 --- a/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt +++ b/SolastaUnfinishedBusiness/Translations/en/Settings-en.txt @@ -154,7 +154,7 @@ ModUi/&EnableOneDndGuidanceSpell=Enable Guidance 5e 2024 ModUi/&EnableOneDndHealingSpellsUpgrade=Enable Cure Wounds, False Life, Healing Word, Mass Cure Wounds, and Mass Healing Word 5e 2024 spells version [better healing] ModUi/&EnableOneDndLesserRestorationSpell=Enable Lesser Restoration 5e 2024 spell version [bonus action] ModUi/&EnableOneDndMagicWeaponSpell=Enable Magic Weapon 5e 2024 spell version [bonus action, no concentration, enhancement upgrade at 3rd and 6th spell level] -ModUi/&EnableOneDndPowerWordKillSpell=Enable Power Word: Kill 5e 2024 spell version [12d12 psychic damage if under 100 hp] +ModUi/&EnableOneDndPowerWordKillSpell=Enable Power Word: Kill 5e 2024 spell version [12d12 psychic damage if above 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Enable Stone Skin 5e 2024 spell version [provides resistance to magical B/P/S as well] ModUi/&EnableOneDndTrueStrikeCantrip=Enable True Strike 5e 2024 cantrip version [Requires Restart]\n[attack uses your spellcasting ability for the attack roll and damage bonus, and additional radiant damage from level 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Enable Lay on Hands as bonus action diff --git a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt index a835e4635d..ddc2c4dd81 100644 --- a/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt +++ b/SolastaUnfinishedBusiness/Translations/es/Settings-es.txt @@ -154,7 +154,7 @@ ModUi/&EnableOneDndGuidanceSpell=Habilitar Orientación v ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar heridas, Vida falsa, Palabra de sanación, Curar heridas en masa y Palabra de sanación en masa versión 5e 2024 hechizos [mejor sanación] ModUi/&EnableOneDndLesserRestorationSpell=Habilitar Restauración menor versión del hechizo 5e 2024 [acción adicional] ModUi/&EnableOneDndMagicWeaponSpell=Habilitar Arma mágica versión del hechizo 5e 2024 [acción adicional, sin concentración, mejora de mejora en el 3.er y 6.º nivel del hechizo] -ModUi/&EnableOneDndPowerWordKillSpell=Habilitar Palabra de poder: matar versión del hechizo 5e 2024 [12d12 de daño psíquico si tienes menos de 100 HP] +ModUi/&EnableOneDndPowerWordKillSpell=Habilitar Palabra de poder: matar versión del hechizo 5e 2024 [12d12 de daño psíquico si tienes más de 100 HP] ModUi/&EnableOneDndStoneSkinSpell=Habilitar Piel de piedra versión del hechizo 5e 2024 [también proporciona resistencia a B/P/S mágicos] ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar Golpe verdadero versión 5e 2024 del truco [Requiere reinicio]\n[el ataque usa tu capacidad de lanzamiento de conjuros para la tirada de ataque y la bonificación de daño, y daño radiante adicional a partir del nivel 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Imposición de manos como acción adicional diff --git a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt index 2aaf7a0392..b9454fd491 100644 --- a/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt +++ b/SolastaUnfinishedBusiness/Translations/fr/Settings-fr.txt @@ -154,7 +154,7 @@ ModUi/&EnableOneDndGuidanceSpell=Activer Guidage 5e versi ModUi/&EnableOneDndHealingSpellsUpgrade=Activer les sorts Soin des blessures, Fausse vie, Mot de guérison, Soin de masse des blessures et Mot de guérison de masse 5e 2024 version [meilleure guérison] ModUi/&EnableOneDndLesserRestorationSpell=Activer Restauration mineure 5e 2024 version du sort [action bonus] ModUi/&EnableOneDndMagicWeaponSpell=Activer Arme magique 5e version du sort 2024 [action bonus, pas de concentration, amélioration aux niveaux de sort 3 et 6] -ModUi/&EnableOneDndPowerWordKillSpell=Activer Mot de pouvoir : Tuer 5e version du sort 2024 [12d12 dégâts psychiques si moins de 100 pv] +ModUi/&EnableOneDndPowerWordKillSpell=Activer Mot de pouvoir : Tuer 5e version du sort 2024 [12d12 dégâts psychiques si supérieur à 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Activer la version du sort Stone Skin 5e 2024 [offre également une résistance aux B/P/S magiques] ModUi/&EnableOneDndTrueStrikeCantrip=Activer True Strike 5e 2024 version du tour de passe-passe [Nécessite un redémarrage]\n[L'attaque utilise votre capacité de lancement de sorts pour le jet d'attaque et le bonus de dégâts, ainsi que des dégâts radiants supplémentaires à partir du niveau 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Activer Imposition des mains comme action bonus diff --git a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt index 8efcd12aeb..26a43d9720 100644 --- a/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt +++ b/SolastaUnfinishedBusiness/Translations/it/Settings-it.txt @@ -154,7 +154,7 @@ ModUi/&EnableOneDndGuidanceSpell=Abilita la versione dell'incantesimo Cura Ferite, Falsa Vita, Parola Guaritrice, Cura Ferite di Massa e Parola Guaritrice di Massa versione incantesimi 5e 2024 [migliore guarigione] ModUi/&EnableOneDndLesserRestorationSpell=Abilita Restauro Minore versione incantesimo 5e 2024 [azione bonus] ModUi/&EnableOneDndMagicWeaponSpell=Abilita Arma magica versione incantesimo 5e 2024 [azione bonus, nessuna concentrazione, potenziamento potenziamento al 3° e 6° livello incantesimo] -ModUi/&EnableOneDndPowerWordKillSpell=Abilita Parola di potere: Uccidi versione incantesimo 5e 2024 [12d12 danni psichici se sotto i 100 hp] +ModUi/&EnableOneDndPowerWordKillSpell=Abilita Parola di potere: Uccidi versione incantesimo 5e 2024 [12d12 danni psichici se sopra i 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Abilita Pelle di pietra versione incantesimo 5e 2024 [fornisce anche resistenza a B/P/S magici] ModUi/&EnableOneDndTrueStrikeCantrip=Abilita True Strike versione trucchetto 5e 2024 [Richiede riavvio]\n[l'attacco usa la tua capacità di lanciare incantesimi per il tiro di attacco e il bonus al danno, e danni radianti aggiuntivi dal livello 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Abilita Imposizione delle mani come azione bonus diff --git a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt index 9626b4f455..3a54610170 100644 --- a/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt +++ b/SolastaUnfinishedBusiness/Translations/ja/Settings-ja.txt @@ -154,7 +154,7 @@ ModUi/&EnableOneDndGuidanceSpell=ガイダンス 5e 2024 ModUi/&EnableOneDndHealingSpellsUpgrade=Cure Wounds、False Life、Healing Word、Mass Cure Wounds、Mass Healing Word 5e 2024 呪文バージョン [better healing] を有効にします ModUi/&EnableOneDndLesserRestorationSpell=Lesser Restoration 5e 2024 呪文バージョン [ボーナスアクション] を有効にする ModUi/&EnableOneDndMagicWeaponSpell=魔法の武器 5e 2024 呪文バージョン [ボーナス アクション、集中力なし、呪文レベル 3 および 6 で強化アップグレード] を有効にします -ModUi/&EnableOneDndPowerWordKillSpell=パワーワード: キル 5e 2024 呪文バージョンを有効にする [HP 100 未満の場合は 12d12 の精神ダメージ] +ModUi/&EnableOneDndPowerWordKillSpell=パワーワード: キル 5e 2024 呪文バージョンを有効にする [HP 100 以上の場合、12d12 の精神ダメージ] ModUi/&EnableOneDndStoneSkinSpell=ストーンスキン 5e 2024 呪文バージョンを有効にする [魔法の B/P/S に対する耐性も付与します] ModUi/&EnableOneDndTrueStrikeCantrip=トゥルーストライク 5e 2024 キャントリップ バージョンを有効にします [再起動が必要]{99>[攻撃は、攻撃ロールとダメージ ボーナスに呪文発動能力を使用し、レベル 5 から追加の光ダメージを与えます] ModUi/&EnablePaladinLayOnHandsAsBonusAction=ボーナスアクションとして手を置くを有効にする diff --git a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt index 164548f717..d154fa4036 100644 --- a/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt +++ b/SolastaUnfinishedBusiness/Translations/ko/Settings-ko.txt @@ -154,7 +154,7 @@ ModUi/&EnableOneDndGuidanceSpell=지침 5e 2024 주문 ModUi/&EnableOneDndHealingSpellsUpgrade=상처 치료, 거짓 생명, 치유의 말씀, 대량 상처 치료, 대량 치유의 말씀 5e 2024 주문 버전 [치유력 향상]을 활성화합니다. ModUi/&EnableOneDndLesserRestorationSpell=하위 회복 5e 2024 주문 버전 [보너스 액션]을 활성화합니다. ModUi/&EnableOneDndMagicWeaponSpell=마법 무기 5e 2024 주문 버전 활성화 [보너스 액션, 집중 없음, 3, 6번째 주문 레벨에서 강화 업그레이드] -ModUi/&EnableOneDndPowerWordKillSpell=힘의 말씀: 살해 5e 2024 주문 버전을 활성화합니다. [체력이 100 미만일 경우 12d12의 사이킥 데미지] +ModUi/&EnableOneDndPowerWordKillSpell=힘의 말씀: 살해 5e 2024 주문 버전을 활성화합니다. [체력이 100 이상일 경우 12d12의 사이킥 데미지] ModUi/&EnableOneDndStoneSkinSpell=스톤 스킨 5e 2024 주문 버전을 활성화합니다. [마법 B/P/S에 대한 저항력도 제공] ModUi/&EnableOneDndTrueStrikeCantrip=True Strike 5e 2024 캔트립 버전 사용 [재시작 필요]\n[공격 시 공격 굴림과 피해 보너스에 주문 시전 능력을 사용하고, 레벨 5부터 추가 방사형 피해] ModUi/&EnablePaladinLayOnHandsAsBonusAction=안수를 보너스 액션으로 활성화합니다. diff --git a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt index dbf1c944fc..2dfbd64c2f 100644 --- a/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt +++ b/SolastaUnfinishedBusiness/Translations/pt-BR/Settings-pt-BR.txt @@ -154,7 +154,7 @@ ModUi/&EnableOneDndGuidanceSpell=Habilitar Orientação v ModUi/&EnableOneDndHealingSpellsUpgrade=Habilitar Curar Ferimentos, Vida Falsa, Palavra de Cura, Curar Ferimentos em Massa e Palavra de Cura em Massa versão de feitiços 5e 2024 [melhor cura] ModUi/&EnableOneDndLesserRestorationSpell=Habilitar Restauração Menor versão de magia 5e 2024 [ação bônus] ModUi/&EnableOneDndMagicWeaponSpell=Habilitar Arma Mágica versão de magia 5e 2024 [ação bônus, sem concentração, atualização de aprimoramento no 3º e 6º nível da magia] -ModUi/&EnableOneDndPowerWordKillSpell=Habilitar Palavra de Poder: Matar versão de magia 5e 2024 [12d12 de dano psíquico se tiver menos de 100 hp] +ModUi/&EnableOneDndPowerWordKillSpell=Habilitar Palavra de Poder: Matar versão de magia 5e 2024 [12d12 de dano psíquico se acima de 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Habilitar Stone Skin versão de magia 5e 2024 [fornece resistência a B/P/S mágicos também] ModUi/&EnableOneDndTrueStrikeCantrip=Habilitar True Strike versão 5e 2024 do truque [Requer reinicialização]\n[o ataque usa sua habilidade de conjuração para a jogada de ataque e bônus de dano, além de dano radiante adicional do nível 5] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Habilitar Impor as Mãos como ação bônus diff --git a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt index b564643393..2c3af94f2a 100644 --- a/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt +++ b/SolastaUnfinishedBusiness/Translations/ru/Settings-ru.txt @@ -154,7 +154,7 @@ ModUi/&EnableOneDndGuidanceSpell=Включить версию заклинан ModUi/&EnableOneDndHealingSpellsUpgrade=Включить Исцеление ран, Ложная жизнь, Слово исцеления, Массовое исцеление ран и Слово массового исцеления 5e 2024 заклинания версии [лучшее исцеление] ModUi/&EnableOneDndLesserRestorationSpell=Включить Малое восстановление 5e 2024 версия заклинания [бонусное действие] ModUi/&EnableOneDndMagicWeaponSpell=Включить версию заклинания Магическое оружие 5e 2024 [бонусное действие, нет концентрации, улучшение на 3-м и 6-м уровнях заклинания] -ModUi/&EnableOneDndPowerWordKillSpell=Включить Слово силы: Убить 5e 2024 версия заклинания [12d12 психического урона, если менее 100 hp] +ModUi/&EnableOneDndPowerWordKillSpell=Включить Слово силы: Убить 5e 2024 версия заклинания [12d12 психического урона, если выше 100 hp] ModUi/&EnableOneDndStoneSkinSpell=Включить версию заклинания Stone Skin 5e 2024 [также обеспечивает сопротивление магическому B/P/S] ModUi/&EnableOneDndTrueStrikeCantrip=Включить версию колдовства True Strike 5e 2024 [Требуется перезапуск]\n[атака использует вашу способность к заклинаниям для броска атаки и бонуса к урону, а также дополнительный урон от излучения с 5-го уровня] ModUi/&EnablePaladinLayOnHandsAsBonusAction=Включить Наложение рук бонусным действием diff --git a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt index b2d8ffe0d6..ccb935ad53 100644 --- a/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt +++ b/SolastaUnfinishedBusiness/Translations/zh-CN/Settings-zh-CN.txt @@ -154,7 +154,7 @@ ModUi/&EnableOneDndGuidanceSpell=启用Guidance 5e 2024 ModUi/&EnableOneDndHealingSpellsUpgrade=启用治疗伤口、虚假生命、治疗之语、群体治疗伤口和群体治疗之语 5e 2024 法术版本 [更好的治疗] ModUi/&EnableOneDndLesserRestorationSpell=启用次级修复 5e 2024 法术版本[奖励行动] ModUi/&EnableOneDndMagicWeaponSpell=启用魔法武器 5e 2024 法术版本[奖励行动,无需集中注意力,在第 3 级和第 6 级法术增强升级] -ModUi/&EnableOneDndPowerWordKillSpell=启用Power Word: Kill 5e 2024 法术版本[如果生命值低于 100,则造成 12d12 精神伤害] +ModUi/&EnableOneDndPowerWordKillSpell=启用Power Word: Kill 5e 2024 法术版本[如果生命值超过 100,则造成 12d12 精神伤害] ModUi/&EnableOneDndStoneSkinSpell=启用石肤 5e 2024 法术版本[同时提供对魔法 B/P/S 的抵抗力] ModUi/&EnableOneDndTrueStrikeCantrip=启用 True Strike 5e 2024 法术版本 [需要重启]{99>[攻击使用你的施法能力进行攻击掷骰和伤害加成,并从 5 级开始造成额外的辐射伤害] ModUi/&EnablePaladinLayOnHandsAsBonusAction=启用圣疗术作为奖励行动 From 24c52e62b313a3a7d36da168570d5f61c5057d4a Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 18 Nov 2024 16:52:34 -0800 Subject: [PATCH 42/44] prefer Sorting.CompareTitle --- .../CustomUI/CustomInvocationSelectionPanel.cs | 2 +- SolastaUnfinishedBusiness/Models/ClassesContext.cs | 11 ++--------- SolastaUnfinishedBusiness/Models/FeatsContext.cs | 2 +- ...haracterStageFightingStyleSelectionPanelPatcher.cs | 8 +++----- .../CharacterStageSubclassSelectionPanelPatcher.cs | 8 +++----- .../Patches/RecipesByTooltypeLinePatcher.cs | 8 +++----- 6 files changed, 13 insertions(+), 26 deletions(-) diff --git a/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSelectionPanel.cs b/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSelectionPanel.cs index 719119a468..87559cad2c 100644 --- a/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSelectionPanel.cs +++ b/SolastaUnfinishedBusiness/CustomUI/CustomInvocationSelectionPanel.cs @@ -1139,7 +1139,7 @@ internal static void CustomFeatureBind(this SpellsByLevelGroup instance, var allFeatures = pool.GetLevelFeatures(featureLevel); - allFeatures.Sort((a, b) => string.CompareOrdinal(a.FormatTitle(), b.FormatTitle())); + allFeatures.Sort(Sorting.CompareTitle); var spellsTable = instance.spellsTable; var spellPrefab = instance.spellPrefab; diff --git a/SolastaUnfinishedBusiness/Models/ClassesContext.cs b/SolastaUnfinishedBusiness/Models/ClassesContext.cs index 19bae91e63..02a98a9d9e 100644 --- a/SolastaUnfinishedBusiness/Models/ClassesContext.cs +++ b/SolastaUnfinishedBusiness/Models/ClassesContext.cs @@ -1,8 +1,6 @@ -using System; -using System.Collections; +using System.Collections; using System.Collections.Generic; using System.Linq; -using HarmonyLib; using SolastaUnfinishedBusiness.Api.GameExtensions; using SolastaUnfinishedBusiness.Api.Helpers; using SolastaUnfinishedBusiness.Api.LanguageExtensions; @@ -31,11 +29,7 @@ internal static void Load() { InventorClass.Build(); - DatabaseRepository.GetDatabase() - .Do(x => x.FeatureUnlocks.Sort(Sorting.CompareFeatureUnlock)); - LoadMonkWeaponSpecialization(); - SwitchScimitarWeaponSpecialization(); SwitchBarbarianFightingStyle(); SwitchFighterWeaponSpecialization(); @@ -115,8 +109,7 @@ internal static void SwitchRangerHumanoidFavoredEnemy() .AdditionalDamageMarshalFavoredEnemyHumanoid); } - AdditionalDamageRangerFavoredEnemyChoice.FeatureSet.Sort((x, y) => - string.Compare(x.FormatTitle(), y.FormatTitle(), StringComparison.CurrentCulture)); + AdditionalDamageRangerFavoredEnemyChoice.FeatureSet.Sort(Sorting.CompareTitle); } #endregion diff --git a/SolastaUnfinishedBusiness/Models/FeatsContext.cs b/SolastaUnfinishedBusiness/Models/FeatsContext.cs index 914f39946c..ae9261402d 100644 --- a/SolastaUnfinishedBusiness/Models/FeatsContext.cs +++ b/SolastaUnfinishedBusiness/Models/FeatsContext.cs @@ -91,7 +91,7 @@ internal static void LateLoad() foreach (var groupedFeat in GroupFeats.Groups .Select(groupDefinition => groupDefinition.GetFirstSubFeatureOfType())) { - groupedFeat?.Feats.Sort((a, b) => string.CompareOrdinal(a.FormatTitle(), b.FormatTitle())); + groupedFeat?.Feats.Sort(Sorting.CompareTitle); } // settings paring feats diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs index 6bbecdd233..c4427ce986 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageFightingStyleSelectionPanelPatcher.cs @@ -1,9 +1,9 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using System.Linq; using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; +using SolastaUnfinishedBusiness.Builders; using UnityEngine; using UnityEngine.UI; @@ -55,9 +55,7 @@ public static void Prefix([NotNull] CharacterStageFightingStyleSelectionPanel __ return; } - __instance.compatibleFightingStyles - .Sort((a, b) => - string.Compare(a.FormatTitle(), b.FormatTitle(), StringComparison.CurrentCultureIgnoreCase)); + __instance.compatibleFightingStyles.Sort(Sorting.CompareTitle); } } diff --git a/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs b/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs index 8eb172a2c4..f572b50777 100644 --- a/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/CharacterStageSubclassSelectionPanelPatcher.cs @@ -1,8 +1,8 @@ -using System; -using System.Diagnostics.CodeAnalysis; +using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; using SolastaUnfinishedBusiness.Api.Helpers; +using SolastaUnfinishedBusiness.Builders; using UnityEngine; using UnityEngine.UI; @@ -39,9 +39,7 @@ public static void Prefix([NotNull] CharacterStageSubclassSelectionPanel __insta return; } - __instance.compatibleSubclasses - .Sort((a, b) => - string.Compare(a.FormatTitle(), b.FormatTitle(), StringComparison.CurrentCultureIgnoreCase)); + __instance.compatibleSubclasses.Sort(Sorting.CompareTitle); } } diff --git a/SolastaUnfinishedBusiness/Patches/RecipesByTooltypeLinePatcher.cs b/SolastaUnfinishedBusiness/Patches/RecipesByTooltypeLinePatcher.cs index c9f50d0b1b..2d6ece53b8 100644 --- a/SolastaUnfinishedBusiness/Patches/RecipesByTooltypeLinePatcher.cs +++ b/SolastaUnfinishedBusiness/Patches/RecipesByTooltypeLinePatcher.cs @@ -1,8 +1,8 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using HarmonyLib; using JetBrains.Annotations; +using SolastaUnfinishedBusiness.Builders; using SolastaUnfinishedBusiness.Models; namespace SolastaUnfinishedBusiness.Patches; @@ -19,9 +19,7 @@ public static class Load_Patch public static void Prefix(List recipes) { //PATCH: sort the recipes by crafted item title - recipes.Sort((a, b) => - string.Compare(a.CraftedItem.FormatTitle(), b.CraftedItem.FormatTitle(), - StringComparison.CurrentCultureIgnoreCase)); + recipes.Sort(Sorting.CompareTitle); } } From 281ae69701b10f10142a9f501f8a96e8c141baf6 Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 18 Nov 2024 16:56:11 -0800 Subject: [PATCH 43/44] prefer MoveModeFly2 on Arcane Sword --- SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs | 2 +- SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs index cf6ba40b36..36d96f4d3d 100644 --- a/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs +++ b/SolastaUnfinishedBusiness/Api/DatabaseHelper-RELEASE.cs @@ -310,7 +310,7 @@ internal static class ConditionDefinitions { internal static ConditionDefinition ConditionStoneskin { get; } = GetDefinition("ConditionStoneskin"); - + internal static ConditionDefinition ConditionBardicInspiration { get; } = GetDefinition("ConditionBardicInspiration"); diff --git a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs index e754d63ba1..9cbf500be4 100644 --- a/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs +++ b/SolastaUnfinishedBusiness/Models/Tabletop2024Context.cs @@ -1056,7 +1056,7 @@ internal static void SwitchOneDndDamagingSpellsUpgrade() EffectProxyDefinitions.ProxyArcaneSword.damageDieNum = 4; EffectProxyDefinitions.ProxyArcaneSword.addAbilityToDamage = true; EffectProxyDefinitions.ProxyArcaneSword.AdditionalFeatures.AddRange( - FeatureDefinitionMoveModes.MoveModeFly6, + FeatureDefinitionMoveModes.MoveModeFly2, FeatureDefinitionMoveModes.MoveModeMove6); CircleOfDeath.EffectDescription.EffectForms[0].DamageForm.dieType = DieType.D8; FlameStrike.EffectDescription.EffectForms[0].DamageForm.diceNumber = 5; @@ -1070,7 +1070,7 @@ internal static void SwitchOneDndDamagingSpellsUpgrade() EffectProxyDefinitions.ProxyArcaneSword.damageDieNum = 3; EffectProxyDefinitions.ProxyArcaneSword.addAbilityToDamage = false; EffectProxyDefinitions.ProxyArcaneSword.AdditionalFeatures.AddRange( - FeatureDefinitionMoveModes.MoveModeFly4, + FeatureDefinitionMoveModes.MoveModeFly2, FeatureDefinitionMoveModes.MoveModeMove4); CircleOfDeath.EffectDescription.EffectForms[0].DamageForm.dieType = DieType.D6; FlameStrike.EffectDescription.EffectForms[0].DamageForm.diceNumber = 4; From 7a50fb68f6f8a781fa30ec9e0caeb31d07d79f1f Mon Sep 17 00:00:00 2001 From: ThyWolf Date: Mon, 18 Nov 2024 16:56:28 -0800 Subject: [PATCH 44/44] prepare for `1.5.97.39` release --- .../ChangelogHistory.txt | 19 ++++++++++--------- SolastaUnfinishedBusiness/Info.json | 2 +- .../SolastaUnfinishedBusiness.csproj | 2 +- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/SolastaUnfinishedBusiness/ChangelogHistory.txt b/SolastaUnfinishedBusiness/ChangelogHistory.txt index a40ba828bb..b091450601 100644 --- a/SolastaUnfinishedBusiness/ChangelogHistory.txt +++ b/SolastaUnfinishedBusiness/ChangelogHistory.txt @@ -2,21 +2,22 @@ - added 'Allow Potions and Scrolls to be carried and used in the ammunition slots' setting [by SilverGriffon] - added 'Allow Potions and Scrolls to be carried and used in the off-hand weapon slot' setting [by SilverGriffon] -- added 'Enable Arcane Sword, Circle of Death, Flame Strike, Ice Storm, and Vicious Mockery 5e 2024 spells version' -- added 'Enable Divine Favor 5e 2024 spell version' -- added 'Enable Lesser Restoration 5e 2024 spell version' -- added 'Enable Magic Weapon 5e 2024 spell version' -- added 'Enable Power Word: Kill 5e 2024 spell version' -- added 'Enable Stone Skin 5e 2024 spell version' -- added 'Enable True Strike 5e 2024 cantrip version' +- added 'Enable Arcane Sword, Circle of Death, Flame Strike, Ice Storm, and Vicious Mockery 5e 2024 spells version' setting +- added 'Enable Divine Favor 5e 2024 spell version' setting [no concentration] +- added 'Enable Lesser Restoration 5e 2024 spell version' setting [bonus action] +- added 'Enable Magic Weapon 5e 2024 spell version' setting [bonus action, no concentration, enhancement at 3rd and 6th] +- added 'Enable Power Word: Kill 5e 2024 spell version' setting [12d12 psychic damage if above 100 hp] +- added 'Enable Stone Skin 5e 2024 spell version' setting [provides resistance to magical B/P/S as well] +- added 'Enable True Strike 5e 2024 cantrip version' setting [blade cantrip like] - fixed 'Enable all Casters to use new prepared spells tables' not considering subclass bonuses - fixed 'Enable bonus action on Healing Potions and Antitoxin usages' allowing other usable item types - fixed 'Enable Lay on Hands as bonus action' not getting offered in combat - fixed 'Enable Second Wind to use 5e 2024 usages progression' adding +1 usage - fixed Aimed Attack maneuver not consuming bonus action, and not adding die damage to attack - fixed Bonfire and Word of Radiance cantrips getting auto immunity from positions -- fixed dice damage progression on powers and additional damage blueprints defined in mod subclasses [i.e: Hail of Blades] -- fixed SpendPower action passing a null battle manager instance to mod custom behaviors leading to desyncs and soft locks +- fixed dice damage progression on powers and additional damage blueprints defined in subclasses [i.e: Hail of Blades] +- fixed Martial Arcane Archer bursting arrow not damaging original target nor applying same dice rolls to all targets +- fixed spend power action passing a null instance to mod custom behaviors leading to desyncs and soft locks - fixed Stealthy action from key bind not broadcasting status on multiplayer sessions KNOWN ISSUES: diff --git a/SolastaUnfinishedBusiness/Info.json b/SolastaUnfinishedBusiness/Info.json index 68747de967..bd2946f4c4 100644 --- a/SolastaUnfinishedBusiness/Info.json +++ b/SolastaUnfinishedBusiness/Info.json @@ -1,7 +1,7 @@ { "Id": "SolastaUnfinishedBusiness", "DisplayName": "[Un] Finished Business", - "Version": "1.5.97.38", + "Version": "1.5.97.39", "GameVersion": "1.5.97", "ManagerVersion": "0.24.0", "AssemblyName": "SolastaUnfinishedBusiness.dll", diff --git a/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj b/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj index c26f5c417b..9ae5f854ff 100644 --- a/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj +++ b/SolastaUnfinishedBusiness/SolastaUnfinishedBusiness.csproj @@ -3,7 +3,7 @@ 12 net48 - 1.5.97.38 + 1.5.97.39 https://github.com/SolastaMods/SolastaUnfinishedBusiness git Debug Install;Release Install