From 27af2b7eb294c8bd4616ce0eb70102252051984c Mon Sep 17 00:00:00 2001 From: SoulliesOfficial Date: Sun, 30 Nov 2025 21:22:39 -0500 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E4=BF=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CardData_Basic_ArmyOfTheDead.asset | 4 +++ .../CardData_Basic_GreatswordSweep.asset | 7 ++-- .../CardData_Basic_HellfireBlast.asset | 7 ++-- .../CardData_Basic_NecromanticInfusion.asset | 4 +++ .../CardData_Basic_WrathOfUnderworld.asset | 9 +++++ .../MarshalOfUnderworld/WrathOfUnderworld.cs | 16 ++++----- .../Cards/Scripts/Mage/ArcaneMissiles.cs | 2 -- .../References/Basic_ModEditReference.asset | 29 +++++++++++++++ Assets/Prefabs/MainGameBasePrefabs.asset | 35 +++++++++++++++++++ Assets/Scripts/MainGame/Base/BasePrefabs.cs | 1 + .../Base/Interpreters/CardTextInterpreter.cs | 19 +++++----- .../MainGame/Card/CardData/CardData.cs | 1 + Assets/Scripts/MainGame/Card/CardInstance.cs | 20 +++++++++++ .../IntentionCardViewMark.cs | 8 ++++- .../MainGame/Card/Editor/CardDataEditor.cs | 3 ++ .../UModAssistance/Editor/DataEditor.cs | 2 +- 16 files changed, 143 insertions(+), 24 deletions(-) diff --git a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_ArmyOfTheDead.asset b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_ArmyOfTheDead.asset index 5ac42b14..b1fea93d 100644 --- a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_ArmyOfTheDead.asset +++ b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_ArmyOfTheDead.asset @@ -24,6 +24,10 @@ MonoBehaviour: cardLayoutTags: [] functionText: Card_Basic_ArmyOfTheDead_FunctionText cardDescription: + intentionIconKeys: + - Summon + intentionValueNames: + - SummonCount baseWeight: 1 variableAttributes: dictionaryList: diff --git a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_GreatswordSweep.asset b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_GreatswordSweep.asset index 8879380c..bc69cee6 100644 --- a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_GreatswordSweep.asset +++ b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_GreatswordSweep.asset @@ -25,8 +25,11 @@ MonoBehaviour: functionText: Card_Basic_GreatswordSweep_FunctionText cardDescription: '$Keyword("Sorcery"), $Keyword("LifeSteal"): $Attribute("LifeStealPercent", true, true), deal $Attribute("Damage") darkness damage 3 times to all enemies.' - intentionIconKeys: [] - intentionValueNames: [] + intentionIconKeys: + - PhysicsAttack + intentionValueNames: + - Damage + intentionTextOverride: $Attribute("Damage") ALL baseWeight: 0 variableAttributes: dictionaryList: diff --git a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_HellfireBlast.asset b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_HellfireBlast.asset index ba109741..c04c3b28 100644 --- a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_HellfireBlast.asset +++ b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_HellfireBlast.asset @@ -25,8 +25,11 @@ MonoBehaviour: cardLayoutTags: [] functionText: Card_Basic_HellfireBlast_FunctionText cardDescription: - intentionIconKeys: [] - intentionValueNames: [] + intentionIconKeys: + - MagicAttack + - Weaken + intentionValueNames: + - Damage baseWeight: 1 variableAttributes: dictionaryList: diff --git a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_NecromanticInfusion.asset b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_NecromanticInfusion.asset index ede33485..cb387c19 100644 --- a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_NecromanticInfusion.asset +++ b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_NecromanticInfusion.asset @@ -24,6 +24,10 @@ MonoBehaviour: cardLayoutTags: [] functionText: Card_Basic_NecromanticInfusion_FunctionText cardDescription: + intentionIconKeys: + - Boost + - Weaken + intentionValueNames: [] baseWeight: 0 variableAttributes: dictionaryList: diff --git a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_WrathOfUnderworld.asset b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_WrathOfUnderworld.asset index aa188614..e839c9ab 100644 --- a/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_WrathOfUnderworld.asset +++ b/Assets/Mods/Basic/Cards/Data/Enemies/Bosses/MarshalOfUnderworld/CardData_Basic_WrathOfUnderworld.asset @@ -25,6 +25,11 @@ MonoBehaviour: cardLayoutTags: [] functionText: Card_Basic_WrathOfUnderworld_FunctionText cardDescription: + intentionIconKeys: + - PhysicsAttack + intentionValueNames: + - Damage + intentionTextOverride: '$Attribute("Damage")*$Attribute("AttackCount") ' baseWeight: 1 variableAttributes: dictionaryList: @@ -44,6 +49,10 @@ MonoBehaviour: Value: 0 index: 3 isKeyDuplicated: 0 + - Key: AttackCount + Value: 5 + index: 4 + isKeyDuplicated: 0 dividerPosProp: 0.5 originalAttributes: dictionaryList: [] diff --git a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/WrathOfUnderworld.cs b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/WrathOfUnderworld.cs index 1c80e1cb..3f3d30b5 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/WrathOfUnderworld.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Enemies/Bosses/MarshalOfUnderworld/WrathOfUnderworld.cs @@ -18,16 +18,16 @@ namespace Continentis.Mods.Basic.Cards public override List PlayEffect(List targetList) { - CommandGroup singleTargetGroup = new CommandGroup(ExecutionMode.Parallel, - new Cmd_PlayAnimation(user.characterView, "Attack"), - new Cmd_ParamFunction(0.4f, target => + List templates = new List(); + templates.Add(new Cmd_PlayAnimation(user.characterView, "Attack")); + for (int i = 0; i < GetAttribute("AttackCount"); i++) + { + templates.Add(new Cmd_ParamFunction(0.4f, target => { user.Attack(target, GetTargetedFinalDamage(target)); - }) - ); - - CommandGroup mainGroup = TargetListCommandGroup(targetList, ExecutionMode.Parallel, ExecutionMode.Sequential, - singleTargetGroup, singleTargetGroup, singleTargetGroup, singleTargetGroup, singleTargetGroup); + })); + } + CommandGroup mainGroup = TargetListCommandGroup(targetList, ExecutionMode.Parallel, ExecutionMode.Sequential, templates.ToArray()); return new List { mainGroup }; } diff --git a/Assets/Mods/Basic/Cards/Scripts/Mage/ArcaneMissiles.cs b/Assets/Mods/Basic/Cards/Scripts/Mage/ArcaneMissiles.cs index d39adedc..3de29268 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Mage/ArcaneMissiles.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Mage/ArcaneMissiles.cs @@ -16,8 +16,6 @@ namespace Continentis.Mods.Basic.Cards public override List PlayEffect(List targetList) { - base.PlayEffect(targetList); - List templates = new List(); templates.Add(new Cmd_PlayAnimation(user.characterView, "Attack")); for (int i = 0; i < GetAttribute("AttackCount"); i++) //多段攻击(段数可变)情况的处理 diff --git a/Assets/Mods/Basic/References/Basic_ModEditReference.asset b/Assets/Mods/Basic/References/Basic_ModEditReference.asset index 308d9682..f5b6b394 100644 --- a/Assets/Mods/Basic/References/Basic_ModEditReference.asset +++ b/Assets/Mods/Basic/References/Basic_ModEditReference.asset @@ -16,7 +16,36 @@ MonoBehaviour: - groupName: CardKeywords items: - TargetSelf + - TargetEnemies + - TargetAllies + - TargetAll + - Strike + - Prick + - Slash + - Arcane + - Sorcery + - Swiftness + - Fortitude + - Prediction + - Exhaust + - Instant + - Unplayable + - Innate + - Tardy + - Retain + - Ethereal + - Reuse + - Physics + - Magic + - Exhaustible - groupName: IntentionIconKeys items: - PhysicsAttack - MagicAttack + - Block + - Dodge + - Dodge + - Summon + - Boost + - Weaken + - Unknown diff --git a/Assets/Prefabs/MainGameBasePrefabs.asset b/Assets/Prefabs/MainGameBasePrefabs.asset index b48c9243..79a8bf47 100644 --- a/Assets/Prefabs/MainGameBasePrefabs.asset +++ b/Assets/Prefabs/MainGameBasePrefabs.asset @@ -16,6 +16,41 @@ MonoBehaviour: handCardObject: {fileID: 3557185132091183519, guid: 1dad8eae410dd904d9823c5abbb8c410, type: 3} intentionCardObject: {fileID: 3557185132091183519, guid: 743c2d994309ea8498ecc0f93f5d29eb, type: 3} inspectionCardObject: {fileID: 0} + intentionMarkIcons: + dictionaryList: + - Key: PhysicsAttack + Value: {fileID: 21300000, guid: b90cf57e4a981b74ab3222051c7b32de, type: 3} + index: 0 + isKeyDuplicated: 0 + - Key: MagicAttack + Value: {fileID: 21300000, guid: 71f2ca2dddf77894c8b0300a2f0cc392, type: 3} + index: 1 + isKeyDuplicated: 0 + - Key: Block + Value: {fileID: 21300000, guid: 914f95cd530d0944aa0a5a72a6c73af0, type: 3} + index: 2 + isKeyDuplicated: 0 + - Key: Dodge + Value: {fileID: 21300000, guid: 23d250c834ecea143a96400c89c7301d, type: 3} + index: 3 + isKeyDuplicated: 0 + - Key: Summon + Value: {fileID: 21300000, guid: eaf9e89bd74dad644a7367b0a6e61a16, type: 3} + index: 4 + isKeyDuplicated: 0 + - Key: Boost + Value: {fileID: 21300000, guid: 655278e667665b340b95bfe1cf45fde7, type: 3} + index: 5 + isKeyDuplicated: 0 + - Key: Weaken + Value: {fileID: 21300000, guid: bccfadd54b581ee478a7a83ed3870da2, type: 3} + index: 6 + isKeyDuplicated: 0 + - Key: Unknown + Value: {fileID: 21300000, guid: b1681d93c7048f04491995446f022c8a, type: 3} + index: 7 + isKeyDuplicated: 0 + dividerPosProp: 0.5 cardViewCollections: dictionaryList: - Key: Basic diff --git a/Assets/Scripts/MainGame/Base/BasePrefabs.cs b/Assets/Scripts/MainGame/Base/BasePrefabs.cs index 17d83aad..1ff7b302 100644 --- a/Assets/Scripts/MainGame/Base/BasePrefabs.cs +++ b/Assets/Scripts/MainGame/Base/BasePrefabs.cs @@ -28,6 +28,7 @@ namespace Continentis.MainGame public GameObject handCardObject; public GameObject intentionCardObject; public GameObject inspectionCardObject; + public SerializableDictionary intentionMarkIcons; public SerializableDictionary cardViewCollections; [Header("GeneralUI")] public GameObject customImage; diff --git a/Assets/Scripts/MainGame/Base/Interpreters/CardTextInterpreter.cs b/Assets/Scripts/MainGame/Base/Interpreters/CardTextInterpreter.cs index 82003347..9fea6fd6 100644 --- a/Assets/Scripts/MainGame/Base/Interpreters/CardTextInterpreter.cs +++ b/Assets/Scripts/MainGame/Base/Interpreters/CardTextInterpreter.cs @@ -20,11 +20,9 @@ namespace Continentis.MainGame TextInterpreter.SetVariable(keyword.Key, keyword.Key); } } - - public static void InterpretText(CardInstance card, bool overrideDescription = false) + + public static string InterpretText(CardInstance card, string textToInterpret) { - //card.contentSubmodule.keywords.Clear(); - foreach (KeyValuePair attribute in card.attributeSubmodule.attributeGroup.current) { TextInterpreter.SetVariable(attribute.Key, attribute.Value); @@ -34,13 +32,18 @@ namespace Continentis.MainGame TextInterpreter.SetFunction("Attribute", new Func((name) => GetAttribute(card, name, true, false))); TextInterpreter.SetFunction("Attribute", new Func((name, high) => GetAttribute(card, name, high, false))); TextInterpreter.SetFunction("Attribute", new Func((name, high, percent) => GetAttribute(card, name, high, percent))); + + string result = DynamicTextInterpreter.Parse(TextInterpreter, textToInterpret); + + Debug.Log($"Interpreted Text: {result}"); + return result; + } + public static void InterpretText(CardInstance card) + { string descriptionToParse = card.contentSubmodule.originalFunctionText; - string result = DynamicTextInterpreter.Parse(TextInterpreter, descriptionToParse); - + string result = InterpretText(card, descriptionToParse); card.contentSubmodule.interpretedFunctionText = result; - - Debug.Log($"Interpreted Description: {result}"); } } diff --git a/Assets/Scripts/MainGame/Card/CardData/CardData.cs b/Assets/Scripts/MainGame/Card/CardData/CardData.cs index e457a05d..30adffa8 100644 --- a/Assets/Scripts/MainGame/Card/CardData/CardData.cs +++ b/Assets/Scripts/MainGame/Card/CardData/CardData.cs @@ -46,6 +46,7 @@ namespace Continentis.MainGame.Card [Header("Intention")] public List intentionIconKeys; public List intentionValueNames; + public string intentionTextOverride; public float baseWeight = 0f; [Header("Attributes")] [Tooltip("可变属性,这个属性会自动设置BaseAttr进入Original,设置Attr,BaseAttrOffset=0,以及DisplayAttr进入Current")] diff --git a/Assets/Scripts/MainGame/Card/CardInstance.cs b/Assets/Scripts/MainGame/Card/CardInstance.cs index b5030151..6624b747 100644 --- a/Assets/Scripts/MainGame/Card/CardInstance.cs +++ b/Assets/Scripts/MainGame/Card/CardInstance.cs @@ -188,6 +188,26 @@ namespace Continentis.MainGame.Card this.intentionCardView = intentionCardView; intentionCardView.transform.localScale = Vector3.one; intentionCardView.Setup(this); + + string iconMarkKey = cardData.intentionIconKeys[0]; + Sprite iconSprite = MainGameManager.Instance.basePrefabs.intentionMarkIcons[iconMarkKey]; + if (string.IsNullOrEmpty(cardData.intentionTextOverride)) + { + if (cardData.intentionValueNames.Count > 0) + { + string intentionValue = attributeSubmodule.GetRoundCurrentAttribute(cardData.intentionValueNames[0]).ToString(); + intentionCardView.intentionMark.SetMark(iconSprite, intentionValue); + } + else + { + intentionCardView.intentionMark.SetMark(iconSprite); + } + } + else + { + intentionCardView.intentionMark.SetMark(iconSprite, cardData.intentionTextOverride); + } + return intentionCardView; } diff --git a/Assets/Scripts/MainGame/Card/CardView/IntentionCardView/IntentionCardViewMark.cs b/Assets/Scripts/MainGame/Card/CardView/IntentionCardView/IntentionCardViewMark.cs index 7a4221d7..9b1ee6cf 100644 --- a/Assets/Scripts/MainGame/Card/CardView/IntentionCardView/IntentionCardViewMark.cs +++ b/Assets/Scripts/MainGame/Card/CardView/IntentionCardView/IntentionCardViewMark.cs @@ -15,7 +15,13 @@ namespace Continentis.MainGame.Card public void SetMark(Sprite sprite, string text) { markImage.sprite = sprite; - markText.text = text; + markText.text = CardTextInterpreter.InterpretText(intentionCardView.card, text); + } + + public void SetMark(Sprite sprite) + { + markImage.sprite = sprite; + markText.text = string.Empty; } public void OnPointerEnter(PointerEventData eventData) diff --git a/Assets/Scripts/MainGame/Card/Editor/CardDataEditor.cs b/Assets/Scripts/MainGame/Card/Editor/CardDataEditor.cs index 8e25e12b..9228f64d 100644 --- a/Assets/Scripts/MainGame/Card/Editor/CardDataEditor.cs +++ b/Assets/Scripts/MainGame/Card/Editor/CardDataEditor.cs @@ -29,6 +29,7 @@ namespace Continentis.MainGame.Card private SerializedProperty intentionIconKeysProp; private SerializedProperty intentionValueNamesProp; + private SerializedProperty intentionTextOverrideProp; private SerializedProperty baseWeightProp; @@ -60,6 +61,7 @@ namespace Continentis.MainGame.Card intentionIconKeysProp = serializedObject.FindProperty("intentionIconKeys"); intentionValueNamesProp = serializedObject.FindProperty("intentionValueNames"); + intentionTextOverrideProp = serializedObject.FindProperty("intentionTextOverride"); baseWeightProp = serializedObject.FindProperty("baseWeight"); variableAttributesProp = serializedObject.FindProperty("variableAttributes"); @@ -131,6 +133,7 @@ namespace Continentis.MainGame.Card EditorGUILayout.LabelField("Attributes", EditorStyles.boldLabel); DrawListWithEditRefSelector(intentionIconKeysProp, "IntentionIconKeys"); DrawListWithLocalSelector(intentionValueNamesProp, "variableAttributes"); + EditorGUILayout.PropertyField(intentionTextOverrideProp); EditorGUILayout.PropertyField(baseWeightProp); EditorGUILayout.PropertyField(variableAttributesProp, true); EditorGUILayout.PropertyField(originalAttributesProp, true); diff --git a/Assets/Scripts/ScriptExtensions/UModAssistance/Editor/DataEditor.cs b/Assets/Scripts/ScriptExtensions/UModAssistance/Editor/DataEditor.cs index f3e20809..1364d79b 100644 --- a/Assets/Scripts/ScriptExtensions/UModAssistance/Editor/DataEditor.cs +++ b/Assets/Scripts/ScriptExtensions/UModAssistance/Editor/DataEditor.cs @@ -358,7 +358,7 @@ namespace SLSFramework.UModAssistance if (GUILayout.Button(item, EditorStyles.label)) { _onSelectCallback?.Invoke(item); - // this.Close(); // 可选:点击后关闭 + this.Close(); // 可选:点击后关闭 } } }