From abc540809f1e3f147d395aad76d4b784ee54cdda Mon Sep 17 00:00:00 2001 From: SoulliesOfficial Date: Sat, 1 Nov 2025 06:13:58 -0400 Subject: [PATCH] =?UTF-8?q?CardBuff=EF=BC=8CExhaustible?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/ExportedMods/Basic.umod | 4 +- Assets/Mods/Basic/Basic_Manifest.asset | 6 ++ .../Basic/Cards/Data/PlayerHeros/Cleric.meta | 8 ++ .../CardData_Basic_LessRestoration.asset | 66 ++++++++++++++ .../CardData_Basic_LessRestoration.asset.meta | 8 ++ .../Mage/CardData_Basic_Abundant.asset | 61 +++++++++++++ .../Mage/CardData_Basic_Abundant.asset.meta | 8 ++ Assets/Mods/Basic/Cards/Scripts/Cleric.meta | 8 ++ .../Cards/Scripts/Cleric/LessRestoration.cs | 26 ++++++ .../Scripts/Cleric/LessRestoration.cs.meta | 2 + .../Mods/Basic/Cards/Scripts/Mage/Abundant.cs | 83 ++++++++++++------ .../Data/CharacterData_Basic_Mage.asset | 8 +- .../Contents/Basic_SteelBracer/SteelBracer.cs | 1 + .../Keywords/KeywordData_Basic_Default.asset | 8 +- .../Localization_Basic_ClericCards.csv | 3 + .../Localization_Basic_ClericCards.csv.meta | 7 ++ .../Localization_Basic_GeneralKeywords.csv | 2 + .../Localization_Basic_MageCards.csv | 3 + .../Localization_Basic_MageCards.csv.meta | 7 ++ .../Basic_EditKeywordsReference.asset | 4 + ...er.jpeg => CardSprite_Basic_Abundant.jpeg} | Bin ...ta => CardSprite_Basic_Abundant.jpeg.meta} | 0 .../Scripts/MainGame/Base/AttributeGroup.cs | 14 ++- .../MainGame/Card/CardAssistanceFunctions.cs | 30 +++++++ .../Card/CardBuff/CardCombatBuffBase.cs | 13 ++- .../MainGame/Card/CardMainFunctions.cs | 35 ++++++-- .../Card/CardSubmodules/AttributeSubmodule.cs | 11 +++ .../HandCardView/HandCardView_Operations.cs | 2 + .../CombatBuffSubmodule.cs | 11 +++ .../MainGame/Combat/CombatMainManager.cs | 2 +- 30 files changed, 395 insertions(+), 46 deletions(-) create mode 100644 Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric.meta create mode 100644 Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric/CardData_Basic_LessRestoration.asset create mode 100644 Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric/CardData_Basic_LessRestoration.asset.meta create mode 100644 Assets/Mods/Basic/Cards/Data/PlayerHeros/Mage/CardData_Basic_Abundant.asset create mode 100644 Assets/Mods/Basic/Cards/Data/PlayerHeros/Mage/CardData_Basic_Abundant.asset.meta create mode 100644 Assets/Mods/Basic/Cards/Scripts/Cleric.meta create mode 100644 Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs create mode 100644 Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs.meta create mode 100644 Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv create mode 100644 Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv.meta create mode 100644 Assets/Mods/Basic/Localization/Localization_Basic_MageCards.csv create mode 100644 Assets/Mods/Basic/Localization/Localization_Basic_MageCards.csv.meta rename Assets/Mods/Basic/Sprites/Cards/AI/{CardSprite_Basic_CommomHolyWater.jpeg => CardSprite_Basic_Abundant.jpeg} (100%) rename Assets/Mods/Basic/Sprites/Cards/AI/{CardSprite_Basic_CommomHolyWater.jpeg.meta => CardSprite_Basic_Abundant.jpeg.meta} (100%) diff --git a/Assets/ExportedMods/Basic.umod b/Assets/ExportedMods/Basic.umod index 5f0e396a..1a6a6f4d 100644 --- a/Assets/ExportedMods/Basic.umod +++ b/Assets/ExportedMods/Basic.umod @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:f0eed223db84ff2e637144d06f0fd0616bd3336c818321f20d9939ba444b64d6 -size 484283232 +oid sha256:325ea46f4d4f6cb30235797c6afc9e643b97f227b7a391594538668cc5457698 +size 484315297 diff --git a/Assets/Mods/Basic/Basic_Manifest.asset b/Assets/Mods/Basic/Basic_Manifest.asset index 089e63d5..f3494818 100644 --- a/Assets/Mods/Basic/Basic_Manifest.asset +++ b/Assets/Mods/Basic/Basic_Manifest.asset @@ -50,6 +50,7 @@ MonoBehaviour: - CardData_Basic_Dazed - CardData_Basic_Faint - CardData_Basic_Oblivion + - CardData_Basic_LessRestoration - CardData_Basic_BattlefieldExperience - CardData_Basic_BodyAsShield - CardData_Basic_Cover @@ -65,6 +66,7 @@ MonoBehaviour: - CardData_Basic_OathOfHonor - CardData_Basic_Smite - CardData_Basic_UtmostStrike + - CardData_Basic_Abundant - CardData_Basic_ArcaneMissiles - CardData_Basic_ConcentratedSpellcasting - CardData_Basic_ElectricClaw @@ -72,7 +74,9 @@ MonoBehaviour: - CardData_Basic_FireBall - CardData_Basic_FlameInscription - CardData_Basic_Haste + - CardData_Basic_IdentifyWeakness - CardData_Basic_Scorch + - CardData_Basic_WitchcraftRay characterDataIDList: - CharacterData_Basic_Knight - CharacterData_Basic_Mage @@ -87,5 +91,7 @@ MonoBehaviour: - {fileID: 4900000, guid: c3a2d38972f95ed41aa340ad6c5ca3b5, type: 3} - {fileID: 4900000, guid: dae5bc8e90366584ca78827dfe470a23, type: 3} - {fileID: 4900000, guid: 769aea741717c4a4bbf3c474056da92f, type: 3} + - {fileID: 4900000, guid: e1ad01987651df444878ed7e1da1b9c8, type: 3} + - {fileID: 4900000, guid: 5d66745b8665526429012762a60469bd, type: 3} - {fileID: 4900000, guid: b8e11e42fa0f82c41a2cb84cd79ccb79, type: 3} - {fileID: 4900000, guid: 240d7d7c1050c1c498575d637265ab32, type: 3} diff --git a/Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric.meta b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric.meta new file mode 100644 index 00000000..a498527a --- /dev/null +++ b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 097f26782b8dc8b48ba083504b8f534c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric/CardData_Basic_LessRestoration.asset b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric/CardData_Basic_LessRestoration.asset new file mode 100644 index 00000000..b4ae7895 --- /dev/null +++ b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric/CardData_Basic_LessRestoration.asset @@ -0,0 +1,66 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9a4129cdd7011ca46b83d8c17d9f3623, type: 3} + m_Name: CardData_Basic_LessRestoration + m_EditorClassIdentifier: + modName: Basic + className: LessRestoration + displayName: Card_Basic_LessRestoration_DisplayName + cardRarity: 10 + cardType: 10 + keywords: + - TargetAllies + - Exhaustible + cardSprite: {fileID: 21300000, guid: c7e0489a5e85e65499fcacddb7c1391e, type: 3} + cardLayoutTags: [] + functionText: Card_Basic_LessRestoration_FunctionText + cardDescription: + baseWeight: 1 + variableAttributes: + dictionaryList: + - Key: StaminaCost + Value: 0 + index: 0 + isKeyDuplicated: 0 + - Key: ManaCost + Value: 1 + index: 1 + isKeyDuplicated: 0 + - Key: TargetCount + Value: 1 + index: 2 + isKeyDuplicated: 0 + - Key: ExhaustibleCount + Value: 3 + index: 3 + isKeyDuplicated: 0 + - Key: HealAmount + Value: 6 + index: 4 + isKeyDuplicated: 0 + dividerPosProp: 0.5 + originalAttributes: + dictionaryList: [] + dividerPosProp: 0.5 + runtimeCurrentAttributes: + dictionaryList: [] + dividerPosProp: 0.5 + upgradeNode: + sourceCard: {fileID: 0} + isTerminalNode: 0 + isInfiniteUpgrade: 0 + maxUpgradeLevel: 0 + upgradeCards: [] + customDescriptions: [] + prefabRefs: [] + derivativeCardDataRefs: [] + derivativeCharacterDataRefs: [] diff --git a/Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric/CardData_Basic_LessRestoration.asset.meta b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric/CardData_Basic_LessRestoration.asset.meta new file mode 100644 index 00000000..44f6cc40 --- /dev/null +++ b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Cleric/CardData_Basic_LessRestoration.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d11d663db0010e4982e754bfafbcd49 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mods/Basic/Cards/Data/PlayerHeros/Mage/CardData_Basic_Abundant.asset b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Mage/CardData_Basic_Abundant.asset new file mode 100644 index 00000000..8d5f5783 --- /dev/null +++ b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Mage/CardData_Basic_Abundant.asset @@ -0,0 +1,61 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9a4129cdd7011ca46b83d8c17d9f3623, type: 3} + m_Name: CardData_Basic_Abundant + m_EditorClassIdentifier: + modName: Basic + className: Abundant + displayName: Card_Basic_Abundant_DisplayName + cardRarity: 20 + cardType: 10 + keywords: + - TargetSelf + cardSprite: {fileID: 21300000, guid: aae12ccc5edd96c40b082fba851f3056, type: 3} + cardLayoutTags: [] + functionText: Card_Basic_Abundant_FunctionText + cardDescription: + baseWeight: 1 + variableAttributes: + dictionaryList: + - Key: StaminaCost + Value: 0 + index: 0 + isKeyDuplicated: 0 + - Key: ManaCost + Value: 1 + index: 1 + isKeyDuplicated: 0 + - Key: TargetCount + Value: 0 + index: 2 + isKeyDuplicated: 0 + - Key: BuffStack_Abundant + Value: 2 + index: 3 + isKeyDuplicated: 0 + dividerPosProp: 0.5 + originalAttributes: + dictionaryList: [] + dividerPosProp: 0.5 + runtimeCurrentAttributes: + dictionaryList: [] + dividerPosProp: 0.5 + upgradeNode: + sourceCard: {fileID: 0} + isTerminalNode: 0 + isInfiniteUpgrade: 0 + maxUpgradeLevel: 0 + upgradeCards: [] + customDescriptions: [] + prefabRefs: [] + derivativeCardDataRefs: [] + derivativeCharacterDataRefs: [] diff --git a/Assets/Mods/Basic/Cards/Data/PlayerHeros/Mage/CardData_Basic_Abundant.asset.meta b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Mage/CardData_Basic_Abundant.asset.meta new file mode 100644 index 00000000..8aa9f4dc --- /dev/null +++ b/Assets/Mods/Basic/Cards/Data/PlayerHeros/Mage/CardData_Basic_Abundant.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d5ff08c0f122bb74a99b0f7c6e445719 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric.meta b/Assets/Mods/Basic/Cards/Scripts/Cleric.meta new file mode 100644 index 00000000..48160182 --- /dev/null +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a410ef469d4ae7a4f9595394751c7236 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs new file mode 100644 index 00000000..35b54599 --- /dev/null +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs @@ -0,0 +1,26 @@ +using System.Collections.Generic; +using Continentis.MainGame; +using Continentis.MainGame.Card; +using Continentis.MainGame.Character; +using Continentis.MainGame.Commands; +using SLSFramework.General; +using UnityEngine; + +namespace Continentis.Mods.Basic.Cards +{ + public class LessRestoration : CardLogicBase + { + protected override CommandBase PlayEffect(List targetList) + { + CommandGroup mainGroup = TargetListCommandGroup(targetList, + new Cmd_PlayAnimation(user.characterView, "Skill"), + new Cmd_ParamFunction(0.1f, target => + { + target.Heal(GetAttribute("HealAmount")); + target.combatBuffSubmodule.Dispel(BuffDispelLevel.Basic, user); + })); + + return mainGroup; + } + } +} \ No newline at end of file diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs.meta b/Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs.meta new file mode 100644 index 00000000..e0d680f4 --- /dev/null +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/LessRestoration.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8f7dd98409993714c963704f02449599 \ No newline at end of file diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/Abundant.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/Abundant.cs index 3dd5fe9e..4278a4e5 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/Abundant.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/Abundant.cs @@ -1,39 +1,72 @@ using System.Collections.Generic; +using Continentis.MainGame; using Continentis.MainGame.Card; using Continentis.MainGame.Character; using Continentis.MainGame.Commands; +using Continentis.Mods.Basic.Buffs; using SLSFramework.General; using UnityEngine; -namespace Continentis.Mods.Basic.Cards +namespace Continentis.Mods.Basic { - public class Abundant : CardLogicBase + namespace Cards { - protected override void SetUpLogicComponents() + public class Abundant : CardLogicBase { - AddLogicComponent().SetCondition(SelectCondition).SetEffect(SelectEffect); - } - - protected override CommandBase PlayEffect(List targetList) - { - CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, - new Cmd_PlayAnimation(user.characterView, "Skill")); - LogicComponent().AddSelectionCommands(ref mainGroup); - - return mainGroup; - } - - private bool SelectCondition(CardInstance card) - { - return card.cardLogic.contentSubmodule.cardType is CardType.Attack && card.cardLogic.HasKeyword("Magic"); - } - - private void SelectEffect(CardInstance card) - { - /*if (card.cardLogic.HasAttribute("Damage")) + protected override void SetUpLogicComponents() { - card.cardLogic.ModifyAttribute("Damage", GetAttribute("DamageIncrease")); - }*/ + AddLogicComponent().SetCondition(SelectCondition).SetEffect(SelectEffect); + } + + protected override CommandBase PlayEffect(List targetList) + { + CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential, + new Cmd_PlayAnimation(user.characterView, "Skill")); + LogicComponent().AddSelectionCommands(ref mainGroup); + + return mainGroup; + } + + private bool SelectCondition(CardInstance card) + { + return card.cardLogic.contentSubmodule.cardType is CardType.Attack && card.cardLogic.HasKeyword("Magic"); + } + + private void SelectEffect(CardInstance card) + { + CreateCardBuff(GetAttribute("BuffStack_Abundant")).Apply(card.cardLogic, user, this); + } + } + } + + namespace Buffs + { + public class Abundant : CardCombatBuffBase + { + public Abundant(int stack) + { + Initialize(BuffType.Positive, BuffDispelLevel.Strong); + + this.contentSubmodule = new ContentSubmodule(this); + + this.unitedStackSubmodule = new UnitedStackSubmodule(this, true, -1, stack); + + this.attributeSubmodule = new AttributeSubmodule(this); + this.attributeSubmodule.numericChange.Add("Damage", stack); + } + + public override bool OnBuffApply(out CardCombatBuffBase existingBuff) + { + if (FindExistingSameBuff(out existingBuff)) + { + existingBuff.unitedStackSubmodule.ModifyStack(this.unitedStackSubmodule.stackAmount); + int newStack = existingBuff.unitedStackSubmodule.stackAmount; + existingBuff.attributeSubmodule.numericChange["Damage"] = newStack; + return false; + } + + return true; + } } } } \ No newline at end of file diff --git a/Assets/Mods/Basic/Characters/Data/CharacterData_Basic_Mage.asset b/Assets/Mods/Basic/Characters/Data/CharacterData_Basic_Mage.asset index 7fe5ccd1..495bf84c 100644 --- a/Assets/Mods/Basic/Characters/Data/CharacterData_Basic_Mage.asset +++ b/Assets/Mods/Basic/Characters/Data/CharacterData_Basic_Mage.asset @@ -37,7 +37,7 @@ MonoBehaviour: index: 2 isKeyDuplicated: 0 - Key: Intelligence - Value: 18 + Value: 12 index: 3 isKeyDuplicated: 0 - Key: Physique @@ -45,7 +45,7 @@ MonoBehaviour: index: 4 isKeyDuplicated: 0 - Key: Perception - Value: 18 + Value: 24 index: 5 isKeyDuplicated: 0 - Key: Charisma @@ -148,7 +148,7 @@ MonoBehaviour: index: 22 isKeyDuplicated: 0 - Key: DrawCardAmountPerAction - Value: 4 + Value: 8 index: 23 isKeyDuplicated: 0 - Key: Awareness @@ -215,5 +215,7 @@ MonoBehaviour: - CardData_Basic_ElectricClaw - CardData_Basic_IdentifyWeakness - CardData_Basic_WitchcraftRay + - CardData_Basic_Abundant + - CardData_Basic_LessRestoration hudDataRefs: - HUDData_Basic_Default diff --git a/Assets/Mods/Basic/Equipments/Contents/Basic_SteelBracer/SteelBracer.cs b/Assets/Mods/Basic/Equipments/Contents/Basic_SteelBracer/SteelBracer.cs index ce7aca2a..4e40e09b 100644 --- a/Assets/Mods/Basic/Equipments/Contents/Basic_SteelBracer/SteelBracer.cs +++ b/Assets/Mods/Basic/Equipments/Contents/Basic_SteelBracer/SteelBracer.cs @@ -15,6 +15,7 @@ namespace Continentis.Mods.Basic.Equipments eventSubmodule.onCombatStart.InsertByPriority("SteelBracer_AddFirm", new PrioritizedAction(() => { new Firm(1).Apply(character); + new Vulnerable(2).Apply(character); })); } } diff --git a/Assets/Mods/Basic/Keywords/KeywordData_Basic_Default.asset b/Assets/Mods/Basic/Keywords/KeywordData_Basic_Default.asset index 4fb94758..62394df1 100644 --- a/Assets/Mods/Basic/Keywords/KeywordData_Basic_Default.asset +++ b/Assets/Mods/Basic/Keywords/KeywordData_Basic_Default.asset @@ -104,5 +104,11 @@ MonoBehaviour: description: Keyword_Magic_Description index: 14 isKeyDuplicated: 0 + - Key: Exhaustible + Value: + name: Keyword_Exhaustible + description: Keyword_Exhaustible_Description + index: 15 + isKeyDuplicated: 0 dividerPosProp: 0.2 - keywordToAdd: Magic + keywordToAdd: Exhaustible diff --git a/Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv b/Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv new file mode 100644 index 00000000..0fc0dfd6 --- /dev/null +++ b/Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv @@ -0,0 +1,3 @@ +Key,English,Simplified Chinese,Traditional Chinese,Japanese,Korean,Vietnamese,Thai +Card_Basic_LessRestoration_DisplayName,Less Restoration,次级恢复术,,,,, +Card_Basic_LessRestoration_FunctionText,"$Keyword(""Exhaustible""): $Attribute(""ExhaustibleCount""), Heal $Attribute(""HealAmount"") and basic dispel target.","$Keyword(""Exhaustible""): $Attribute(""ExhaustibleCount""),治疗目标$Attribute(""HealAmount"")点生命值,并施加弱驱散。",,,,, diff --git a/Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv.meta b/Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv.meta new file mode 100644 index 00000000..2a3424d2 --- /dev/null +++ b/Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5d66745b8665526429012762a60469bd +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mods/Basic/Localization/Localization_Basic_GeneralKeywords.csv b/Assets/Mods/Basic/Localization/Localization_Basic_GeneralKeywords.csv index b125f768..213e6b19 100644 --- a/Assets/Mods/Basic/Localization/Localization_Basic_GeneralKeywords.csv +++ b/Assets/Mods/Basic/Localization/Localization_Basic_GeneralKeywords.csv @@ -25,3 +25,5 @@ Keyword_Retain,Retain,保留,,,,, Keyword_Retain_Description,"After you finish your action, if this card is in your hand pile, keep it.",你的行动结束时,如果这张卡牌在你的手牌堆中,保留它。,,,,, Keyword_Ethereal,Ethereal,虚无,,,,, Keyword_Ethereal_Description,"After you finish your action, if this card is in your hand pile, exhaust it.",你的行动结束时,如果这张卡牌在你的手牌堆中,消耗它。,,,,, +Keyword_Exhaustible,Exhaustible,消耗性,,,,, +Keyword_Exhaustible_Description,"After play this card for certain times, exhaust it.",在你打出这张牌一定次数之后,消耗它。,,,,, diff --git a/Assets/Mods/Basic/Localization/Localization_Basic_MageCards.csv b/Assets/Mods/Basic/Localization/Localization_Basic_MageCards.csv new file mode 100644 index 00000000..a39f21c6 --- /dev/null +++ b/Assets/Mods/Basic/Localization/Localization_Basic_MageCards.csv @@ -0,0 +1,3 @@ +Key,English,Simplified Chinese,Traditional Chinese,Japanese,Korean,Vietnamese,Thai +Card_Basic_ArcaneMissiles_DisplayName,Arcane Missiles,奥术飞弹,,,,, +Card_Basic_ArcaneMissiles_FunctionText,"Deal $Attribute(""Damage"") damage for $Attribute(""AttackCount"") times.","造成$Attribute(""Damage"")点伤害 $Attribute(""AttackCount"")次。",,,,, diff --git a/Assets/Mods/Basic/Localization/Localization_Basic_MageCards.csv.meta b/Assets/Mods/Basic/Localization/Localization_Basic_MageCards.csv.meta new file mode 100644 index 00000000..bd4b9349 --- /dev/null +++ b/Assets/Mods/Basic/Localization/Localization_Basic_MageCards.csv.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e1ad01987651df444878ed7e1da1b9c8 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mods/Basic/References/Basic_EditKeywordsReference.asset b/Assets/Mods/Basic/References/Basic_EditKeywordsReference.asset index ec604714..fc396a0b 100644 --- a/Assets/Mods/Basic/References/Basic_EditKeywordsReference.asset +++ b/Assets/Mods/Basic/References/Basic_EditKeywordsReference.asset @@ -102,4 +102,8 @@ MonoBehaviour: Value: index: 21 isKeyDuplicated: 0 + - Key: Exhaustible + Value: + index: 22 + isKeyDuplicated: 0 dividerPosProp: 0.3 diff --git a/Assets/Mods/Basic/Sprites/Cards/AI/CardSprite_Basic_CommomHolyWater.jpeg b/Assets/Mods/Basic/Sprites/Cards/AI/CardSprite_Basic_Abundant.jpeg similarity index 100% rename from Assets/Mods/Basic/Sprites/Cards/AI/CardSprite_Basic_CommomHolyWater.jpeg rename to Assets/Mods/Basic/Sprites/Cards/AI/CardSprite_Basic_Abundant.jpeg diff --git a/Assets/Mods/Basic/Sprites/Cards/AI/CardSprite_Basic_CommomHolyWater.jpeg.meta b/Assets/Mods/Basic/Sprites/Cards/AI/CardSprite_Basic_Abundant.jpeg.meta similarity index 100% rename from Assets/Mods/Basic/Sprites/Cards/AI/CardSprite_Basic_CommomHolyWater.jpeg.meta rename to Assets/Mods/Basic/Sprites/Cards/AI/CardSprite_Basic_Abundant.jpeg.meta diff --git a/Assets/Scripts/MainGame/Base/AttributeGroup.cs b/Assets/Scripts/MainGame/Base/AttributeGroup.cs index ea72c409..c2adf0d7 100644 --- a/Assets/Scripts/MainGame/Base/AttributeGroup.cs +++ b/Assets/Scripts/MainGame/Base/AttributeGroup.cs @@ -72,12 +72,24 @@ namespace Continentis.MainGame current[attributeName] = originalAttribute; } } + + public void SetAttribute(string attributeName, float value) + { + if (!current.ContainsKey(attributeName)) + { + Debug.Log($"{attributeName} is not found in current attributes, use default value"); + } + + current[attributeName] = value; + } public void ModifyAttribute(string attributeName, float numericChange, float percentageChangeOfAccumulation, float percentChangeOfMultiplication) { if (!current.ContainsKey(attributeName)) { + Debug.Log($"{attributeName} is not found in current attributes, use default value"); + if (attributeName.Contains("Multiplier")) { current[attributeName] = 1f; @@ -86,8 +98,6 @@ namespace Continentis.MainGame { current[attributeName] = 0f; } - - Debug.Log($"{attributeName} is not found in current attributes, use default value"); } current[attributeName] += numericChange; diff --git a/Assets/Scripts/MainGame/Card/CardAssistanceFunctions.cs b/Assets/Scripts/MainGame/Card/CardAssistanceFunctions.cs index deccec5e..80a898b9 100644 --- a/Assets/Scripts/MainGame/Card/CardAssistanceFunctions.cs +++ b/Assets/Scripts/MainGame/Card/CardAssistanceFunctions.cs @@ -281,6 +281,36 @@ namespace Continentis.MainGame.Card return ModManager.CreateInstance(buffTypeID, parameters); } + + /// + /// 创建一个卡牌战斗Buff实例 + /// 注意,此函数依赖ModManager的类型注册功能,请确保在Mod加载时已注册对应Buff类型 + /// 此函数中的T并不是原型参数,而是获取Mod中注册的类型用的 + /// + public T CreateCardBuff(params object[] parameters) where T :CardBuffBase + { + string buffTypeID = ModManager.GetTypeID(typeof(T)); + + if (string.IsNullOrEmpty(buffTypeID)) + { + Debug.LogError($"Failed to get buff name for type {typeof(T).FullName}"); + return null; + } + + return ModManager.CreateInstance(buffTypeID, parameters); + } + + + public T CreateCardBuff(string buffTypeID, params object[] parameters) where T :CardBuffBase + { + if (string.IsNullOrEmpty(buffTypeID)) + { + Debug.LogError($"Failed to get buff name for type {typeof(T).FullName}"); + return null; + } + + return ModManager.CreateInstance(buffTypeID, parameters); + } } #endregion } \ No newline at end of file diff --git a/Assets/Scripts/MainGame/Card/CardBuff/CardCombatBuffBase.cs b/Assets/Scripts/MainGame/Card/CardBuff/CardCombatBuffBase.cs index b1b62514..e7c7ffa4 100644 --- a/Assets/Scripts/MainGame/Card/CardBuff/CardCombatBuffBase.cs +++ b/Assets/Scripts/MainGame/Card/CardBuff/CardCombatBuffBase.cs @@ -27,8 +27,8 @@ namespace Continentis.MainGame.Card public override void OnAfterFirstApply() { - attributeSubmodule?.RefreshAllModifiedAttributes(); - } + + } public override void OnBuffRemove() { @@ -63,7 +63,7 @@ namespace Continentis.MainGame.Card public partial class CardCombatBuffBase { - protected bool FindExistingBuff(out T existingBuff) where T : CardBuffBase + protected bool FindExistingSameBuff(out T existingBuff) where T : CardBuffBase { return base.FindExistingSameBuff(out existingBuff, attachedCard.combatBuffSubmodule.buffList); } @@ -84,6 +84,13 @@ namespace Continentis.MainGame.Card this.attachedCard.combatBuffSubmodule.buffList.Add(this); OnAfterFirstApply(); } + + attributeSubmodule?.RefreshAllModifiedAttributes(); + Debug.Log(base.attachedCard.GetAttribute("Damage")); + CardTextInterpreter.InterpretText(attachedCard); + attachedCard.handCardView?.Setup(); + attachedCard.intentionCardView?.Setup(); + Debug.Log(base.attachedCard.contentSubmodule.interpretedFunctionText); } public override void Remove() diff --git a/Assets/Scripts/MainGame/Card/CardMainFunctions.cs b/Assets/Scripts/MainGame/Card/CardMainFunctions.cs index 05234b71..7b5c94e6 100644 --- a/Assets/Scripts/MainGame/Card/CardMainFunctions.cs +++ b/Assets/Scripts/MainGame/Card/CardMainFunctions.cs @@ -238,13 +238,33 @@ namespace Continentis.MainGame.Card return; } + if (HasKeyword("Exhaust")) + { + CommandQueueManager.Instance.AddCommand(user.deckSubmodule.ExhaustCard(cardInstance)); + return; + } + + if(HasKeyword("Exhaustible")) + { + if (!cardInstance.cardLogic.HasAttribute("ExhaustibleCount")) + { + Debug.LogError("Exhaustible card missing ExhaustibleCount attribute: " + contentSubmodule.cardName); + CommandQueueManager.Instance.AddCommand(user.deckSubmodule.ExhaustCard(cardInstance)); + return; + } + + cardInstance.cardLogic.ModifyAttribute("ExhaustibleCount", -1); + + if(cardInstance.cardLogic.GetAttribute("ExhaustibleCount") <= 0) + { + CommandQueueManager.Instance.AddCommand(user.deckSubmodule.ExhaustCard(cardInstance)); + return; + } + } + if (user is PlayerHero playerHero) { - if (HasKeyword("Exhaust")) - { - CommandQueueManager.Instance.AddCommand(playerHero.deckSubmodule.ExhaustCard(cardInstance)); - } - else if(!HasKeyword("Reuse")) + if(!HasKeyword("Reuse")) { CommandQueueManager.Instance.AddCommand(playerHero.deckSubmodule.DiscardCard(cardInstance, false)); CommandQueueManager.Instance.AddCommand(new Cmd_Function(() => @@ -258,10 +278,7 @@ namespace Continentis.MainGame.Card } else if (user is CombatNPC npc) { - if (HasKeyword("Exhaust")) - { - CommandQueueManager.Instance.AddCommand(npc.deckSubmodule.ExhaustCard(cardInstance)); - } + } } } diff --git a/Assets/Scripts/MainGame/Card/CardSubmodules/AttributeSubmodule.cs b/Assets/Scripts/MainGame/Card/CardSubmodules/AttributeSubmodule.cs index 352ff73c..f49c5520 100644 --- a/Assets/Scripts/MainGame/Card/CardSubmodules/AttributeSubmodule.cs +++ b/Assets/Scripts/MainGame/Card/CardSubmodules/AttributeSubmodule.cs @@ -44,6 +44,7 @@ namespace Continentis.MainGame.Card } attributeGroup = new AttributeGroup(originalAttributes, endowingAttributes); + attributeGroup.ApplyAllAttributes(); } } @@ -59,6 +60,11 @@ namespace Continentis.MainGame.Card owner.ApplyAttributeChangesByCard(); owner.combatBuffSubmodule.GetAttributeChange(attributeName, out float numeric, out float pAccumulation, out float pMultiplication); attributeGroup.ModifyAttribute(attributeName, numeric, pAccumulation, pMultiplication); + string displayAttributeName = "Display" + attributeName; + if(attributeGroup.current.ContainsKey(displayAttributeName)) + { + attributeGroup.SetAttribute(displayAttributeName, attributeGroup.current[attributeName]); + } } /// @@ -77,6 +83,11 @@ namespace Continentis.MainGame.Card { owner.combatBuffSubmodule.GetAttributeChange(attributeName, out float numeric, out float pAccumulation, out float pMultiplication); attributeGroup.ModifyAttribute(attributeName, numeric, pAccumulation, pMultiplication); + string displayAttributeName = "Display" + attributeName; + if(attributeGroup.current.ContainsKey(displayAttributeName)) + { + attributeGroup.SetAttribute(displayAttributeName, attributeGroup.current[attributeName]); + } } } } diff --git a/Assets/Scripts/MainGame/Card/CardView/HandCardView/HandCardView_Operations.cs b/Assets/Scripts/MainGame/Card/CardView/HandCardView/HandCardView_Operations.cs index e2550ac0..e0ac27f5 100644 --- a/Assets/Scripts/MainGame/Card/CardView/HandCardView/HandCardView_Operations.cs +++ b/Assets/Scripts/MainGame/Card/CardView/HandCardView/HandCardView_Operations.cs @@ -19,6 +19,8 @@ namespace Continentis.MainGame.Card public override void OnPointerEnter(PointerEventData eventData) { base.OnPointerEnter(eventData); + CardTextInterpreter.InterpretText(cardLogic); + cardDescriptionText.text = cardLogic.contentSubmodule.interpretedFunctionText; if (CombatUIManager.Instance.selectingCardView == null) { canvas.overrideSorting = true; diff --git a/Assets/Scripts/MainGame/Character/CharacterSubmodules/CombatBuffSubmodule.cs b/Assets/Scripts/MainGame/Character/CharacterSubmodules/CombatBuffSubmodule.cs index df47262a..39a5a837 100644 --- a/Assets/Scripts/MainGame/Character/CharacterSubmodules/CombatBuffSubmodule.cs +++ b/Assets/Scripts/MainGame/Character/CharacterSubmodules/CombatBuffSubmodule.cs @@ -45,6 +45,17 @@ namespace Continentis.MainGame.Character { return buffList.Exists(x => x.GetType() == typeof(T)); } + + public List Dispel(BuffDispelLevel dispelLevel, CharacterBase dispelSource) + { + List dispelledBuffs = buffList + .Where(buff => buff.dispelThreshold <= dispelLevel && + buff.buffType == (owner.IsAlly(dispelSource) ? BuffType.Negative : BuffType.Positive)) + .ToList(); + + dispelledBuffs.For(buff => buff.Remove()); + return dispelledBuffs; + } } public partial class CombatBuffSubmodule diff --git a/Assets/Scripts/MainGame/Combat/CombatMainManager.cs b/Assets/Scripts/MainGame/Combat/CombatMainManager.cs index 5bf8e422..ffb88742 100644 --- a/Assets/Scripts/MainGame/Combat/CombatMainManager.cs +++ b/Assets/Scripts/MainGame/Combat/CombatMainManager.cs @@ -154,7 +154,7 @@ namespace Continentis.MainGame.Combat playerHero.combatBuffSubmodule.ActionStart(); combatMainPage.handPile.isUpdatingLayout = false; - CommandQueueManager.Instance.AddCommand(playerHero.deckSubmodule.DrawCards(5)); + CommandQueueManager.Instance.AddCommand(playerHero.deckSubmodule.DrawCards(playerHero.GetAttribute("DrawCardAmountPerAction"))); CommandQueueManager.Instance.AddCommand(new Cmd_Function(0f, () => { //Debug.Log((drawCard.groupContext.context["DrawnCards"] as List).Count);