diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/ChainBlessing.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/ChainBlessing.cs index 4bc39ae1..39504e09 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/ChainBlessing.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/ChainBlessing.cs @@ -2,16 +2,52 @@ using Continentis.MainGame.Card; using Continentis.MainGame.Character; +using Continentis.MainGame.Commands; using SLSFramework.General; using System.Collections.Generic; +using UnityEngine; namespace Continentis.Mods.Basic.Cards.Cleric { public class ChainBlessing : CardLogicBase { + protected override void SetUpLogicComponents() + { + AddLogicComponent(); + } + protected override List PlayEffect(List targetList) { - return base.PlayEffect(targetList); + CommandGroup mainGroup = new CommandGroup(ExecutionMode.Sequential); + mainGroup.AddCommand(new Cmd_PlayAnimation(user.characterView, "Skill")); + mainGroup.AddCommand(new Cmd_Function(() => + { + //Get powe cards in hand + var powerCards = new List(); + foreach (var card in user.deckSubmodule.HandPile) + { + if (card.cardLogic.contentSubmodule.cardType == MainGame.Card.CardType.Power) + { + powerCards.Add(card); + } + } + + if (powerCards.TryGetRandom(out CardInstance randomPowerCard)) + { + var copyCount = GetAttribute("CopyCount"); + for (int i = 0; i < copyCount; i++) + { + CardInstance newCard = CardInstance.GenerateCardInstance(randomPowerCard.cardLogic, user, "Hand"); + newCard.cardLogic.SetAttribute("StaminaCost", 0); + newCard.GenerateHandCardView("Hand"); + } + } + else + { + Debug.LogWarning("ChainBlessing: No other power cards in hand to copy."); + } + })); + return new List { mainGroup }; } } } diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/FreedomOfMovement.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/FreedomOfMovement.cs index 486276f4..8b399d10 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/FreedomOfMovement.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/FreedomOfMovement.cs @@ -2,6 +2,7 @@ using Continentis.MainGame.Card; using Continentis.MainGame.Character; +using Continentis.MainGame.Commands; using SLSFramework.General; using System.Collections.Generic; @@ -11,7 +12,12 @@ namespace Continentis.Mods.Basic.Cards.Cleric { protected override List PlayEffect(List targetList) { - return base.PlayEffect(targetList); + CommandGroup mainGroup = TargetListCommandGroup(targetList, + new Cmd_ParamFunction(0.01f, target => + { + CreateCharacterBuff(GetAttribute("BuffStack")).Apply(target, user, this); + })); + return new List { mainGroup }; } } } diff --git a/Assets/Mods/Basic/Cards/Scripts/Cleric/ShieldOfDevotion.cs b/Assets/Mods/Basic/Cards/Scripts/Cleric/ShieldOfDevotion.cs index 2bed32cc..cb7ef734 100644 --- a/Assets/Mods/Basic/Cards/Scripts/Cleric/ShieldOfDevotion.cs +++ b/Assets/Mods/Basic/Cards/Scripts/Cleric/ShieldOfDevotion.cs @@ -2,6 +2,8 @@ using Continentis.MainGame.Card; using Continentis.MainGame.Character; +using Continentis.MainGame.Commands; +using Continentis.Mods.Basic.Buffs; using SLSFramework.General; using System.Collections.Generic; @@ -11,7 +13,12 @@ namespace Continentis.Mods.Basic.Cards.Cleric { protected override List PlayEffect(List targetList) { - return base.PlayEffect(targetList); + CommandGroup mainGroup = TargetListCommandGroup(targetList, + new Cmd_ParamFunction(0.01f, target => + { + CreateCharacterBuff(GetAttribute("BuffStack")).Apply(target, user, this); + })); + return new List { mainGroup }; } } } diff --git a/Assets/Mods/Basic/Characters/CombatBuffs/Cleric.meta b/Assets/Mods/Basic/Characters/CombatBuffs/Cleric.meta new file mode 100644 index 00000000..1a4f89a0 --- /dev/null +++ b/Assets/Mods/Basic/Characters/CombatBuffs/Cleric.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 47cedfeff83e44e44bea76c498fb6ab6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Mods/Basic/Characters/CombatBuffs/Cleric/FreedomOfMovement.cs b/Assets/Mods/Basic/Characters/CombatBuffs/Cleric/FreedomOfMovement.cs new file mode 100644 index 00000000..6d53f9a7 --- /dev/null +++ b/Assets/Mods/Basic/Characters/CombatBuffs/Cleric/FreedomOfMovement.cs @@ -0,0 +1,44 @@ +using Continentis.MainGame; +using Continentis.MainGame.Character; +using SLSFramework.General; +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace Continentis.Mods.Basic.Buffs +{ + public class FreedomOfMovement : CharacterCombatBuffBase + { + public FreedomOfMovement(int stack) + { + Initialize(BuffType.Positive, BuffDispelLevel.Basic); + this.contentSubmodule = new ContentSubmodule(this) + .AddParameterGetter("Stack", () => unitedStackSubmodule.stackAmount.ToString()); + + this.iconSubmodule = new IconSubmodule(this); + this.unitedStackSubmodule = new UnitedStackSubmodule(this, stack); + + this.eventSubmodule = new EventSubmodule(this); + this.eventSubmodule.onBeforePlayCard.Add(this.GetType().FullName, new PrioritizedAction>(OnBeforePlayCard)); + } + + private void OnBeforePlayCard(MainGame.Card.CardInstance instance, List list) + { + if (instance.cardLogic.contentSubmodule.cardType == MainGame.Card.CardType.Power) + { + this.attachedCharacter.deckSubmodule.DrawCards(unitedStackSubmodule.stackAmount); + } + } + + public override bool OnBuffApply(out CharacterCombatBuffBase existingBuff) + { + MainGameManager.Instance.basePrefabs.GenerateInfoText("Freedom Of Movement", attachedCharacter.characterView); + if (FindExistingSameBuff(out existingBuff)) + { + existingBuff.unitedStackSubmodule.AddStack(this.unitedStackSubmodule.stackAmount); + return false; + } + return true; + } + } +} diff --git a/Assets/Mods/Basic/Characters/CombatBuffs/Cleric/FreedomOfMovement.cs.meta b/Assets/Mods/Basic/Characters/CombatBuffs/Cleric/FreedomOfMovement.cs.meta new file mode 100644 index 00000000..63410544 --- /dev/null +++ b/Assets/Mods/Basic/Characters/CombatBuffs/Cleric/FreedomOfMovement.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: df411ffb583330948b70f1a72c4f62df \ No newline at end of file diff --git a/Assets/Mods/Basic/Keywords/KeywordData_Basic_Buff.asset b/Assets/Mods/Basic/Keywords/KeywordData_Basic_Buff.asset index 6c5f8188..364d3d6e 100644 --- a/Assets/Mods/Basic/Keywords/KeywordData_Basic_Buff.asset +++ b/Assets/Mods/Basic/Keywords/KeywordData_Basic_Buff.asset @@ -44,5 +44,11 @@ MonoBehaviour: description: Keyword_Basic_Sharpness_Description index: 4 isKeyDuplicated: 0 + - Key: Basic_Withstand + Value: + name: Keyword_Basic_Withstand + description: Keyword_Basic_Withstand_Description + index: 5 + isKeyDuplicated: 0 dividerPosProp: 0.2 - keywordToAdd: Basic_KnifeTrick + keywordToAdd: Basic_Withstand diff --git a/Assets/Mods/Basic/Keywords/KeywordData_Basic_Default.asset b/Assets/Mods/Basic/Keywords/KeywordData_Basic_Default.asset index 7f8debd4..fe4b0e6b 100644 --- a/Assets/Mods/Basic/Keywords/KeywordData_Basic_Default.asset +++ b/Assets/Mods/Basic/Keywords/KeywordData_Basic_Default.asset @@ -135,4 +135,4 @@ MonoBehaviour: index: 19 isKeyDuplicated: 0 dividerPosProp: 0.2 - keywordToAdd: CounterAttack + keywordToAdd: Withstand diff --git a/Assets/Mods/Basic/Localization/Localization_Basic_BuffKeywords.csv b/Assets/Mods/Basic/Localization/Localization_Basic_BuffKeywords.csv index 393a14e0..13169fdb 100644 --- a/Assets/Mods/Basic/Localization/Localization_Basic_BuffKeywords.csv +++ b/Assets/Mods/Basic/Localization/Localization_Basic_BuffKeywords.csv @@ -10,6 +10,8 @@ Keyword_Basic_WoundDeterioration_Description,"When dealing at least 20 damage in Keyword_Basic_Corrosion,Corrosion,腐蚀,,,,, Keyword_Basic_Corrosion_Description,TODO,未知效果。,,,,, Keyword_Basic_Sharpness,Sharpness,锋利,,,,, -Keyword_Basic_Sharpness_Description,TODO,下次攻击将造成额外等同于层数的伤害并失去所有层数。,,,,, +Keyword_Basic_Sharpness_Description,TODO,下次攻击失去所有层数,并造成额外等同于层数的伤害。,,,,, Keyword_Basic_KnifeTrick,Knife Trick,刀具把戏,,,,, -Keyword_Basic_KnifeTrick_Description,TODO,每次失去所有锋利后,获得4层锋利。,,,,, +Keyword_Basic_KnifeTrick_Description,TODO,每次失去所有锋利后,获得等同于层数的$Keyword("Basic_Sharpness")。,,,,, +Keyword_Basic_Withstand,Withstand,抵御,,,,, +Keyword_Basic_Withstand_Description,TODO,结束回合时,获得等同于层数的格挡。,,,,, diff --git a/Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv b/Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv index 5c2033ee..4df533a1 100644 --- a/Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv +++ b/Assets/Mods/Basic/Localization/Localization_Basic_ClericCards.csv @@ -8,9 +8,9 @@ Card_Basic_BlessedHolyWater_FunctionText,TODO,将1张“圣水”加入公共牌 Card_Basic_Sanctuary_DisplayName,Sanctuary,庇护术,,,,, Card_Basic_Sanctuary_FunctionText,TODO,$Keyword("Purify")一名友方目标。\n$Keyword("Reuseable")。,,,,, Card_Basic_ShieldOfDevotion_DisplayName,Shield Of Devotion,虔诚护盾,,,,, -Card_Basic_ShieldOfDevotion_FunctionText,TODO,,,,,, +Card_Basic_ShieldOfDevotion_FunctionText,TODO,$Keyword("Blessing")。\n获得$Attribute("BuffStack")层$Keyword("Basic_Sharpness")。,,,,, Card_Basic_FreedomOfMovement_DisplayName,Freedom Of Movement,行动自如,,,,, -Card_Basic_FreedomOfMovement_FunctionText,TODO,,,,,, +Card_Basic_FreedomOfMovement_FunctionText,TODO,$Keyword("Blessing")。\n每打出一张能力牌,抽$Attribute("BuffStack")张牌。,,,,, Card_Basic_SpiritGuardian_DisplayName,Spirit Guardian,灵体卫士,,,,, Card_Basic_SpiritGuardian_FunctionText,TODO,$Keyword("Blessing")。\n获得$Attribute("BuffStack")层$Keyword("CounterAttack")。,,,,, Card_Basic_Faith_DisplayName,Faith,信仰,,,,, @@ -20,4 +20,4 @@ Card_Basic_DivinePunishment_FunctionText,TODO,造成$Attribute("Damage")点伤 Card_Basic_DivineProtection_DisplayName,Divine Protection,神圣守护,,,,, Card_Basic_DivineProtection_FunctionText,TODO,获得$Attribute("Block")点格挡。\n这张牌在本场战斗中的格挡+$Attribute("BlockStack")。,,,,, Card_Basic_ChainBlessing_DisplayName,Chain Blessing,连锁祝福,,,,, -Card_Basic_ChainBlessing_FunctionText,TODO,,,,,, +Card_Basic_ChainBlessing_FunctionText,TODO,选择一张手牌里的能力牌并复制$Attribute("CopyCount")张。,,,,, diff --git a/Assets/Mods/Basic/Localization/Localization_Basic_GeneralBuffs.csv b/Assets/Mods/Basic/Localization/Localization_Basic_GeneralBuffs.csv index 1e1b08dd..4a465793 100644 --- a/Assets/Mods/Basic/Localization/Localization_Basic_GeneralBuffs.csv +++ b/Assets/Mods/Basic/Localization/Localization_Basic_GeneralBuffs.csv @@ -45,3 +45,7 @@ Buff_Basic_Protecting_DisplayName,Protecting,保护,,,,, Buff_Basic_Protecting_FunctionText,"You are protecting $ParameterString(""Target""), for $ParameterInt(""Count"") rounds.",你正在$ParameterInt("Count")回合内保护$ParameterString("Target")。,,,,, Buff_Basic_CounterAttack_DisplayName,Counter Attack,反击,,,,, Buff_Basic_CounterAttack_FunctionText,"Whenever you are attacked, deal $ParameterAbsInt(""Stack"") damage back.",每当你被攻击时,对攻击者造成$ParameterAbsInt("Stack")点伤害。,,,,, +Buff_Basic_Withstand_DisplayName,Withstand,抵御,,,,, +Buff_Basic_Withstand_FunctionText,"Whenever you are attacked, deal $ParameterAbsInt(""Stack"") damage back.",结束回合时,获得$ParameterAbsInt("Stack")点格挡。,,,,, +Buff_Basic_FreedomOfMovement_DisplayName,Freedom Of Movement,行动自如,,,,, +Buff_Basic_FreedomOfMovement_FunctionText,"Whenever you played a Power card, draw $ParameterAbsInt(""Stack"") card.",每打出一张能力牌,抽$ParameterAbsInt("Stack")张牌。,,,,, diff --git a/Assets/Mods/Basic/Sprites/Buffs/BuffIcon_Basic_FreedomOfMovement.png b/Assets/Mods/Basic/Sprites/Buffs/BuffIcon_Basic_FreedomOfMovement.png new file mode 100644 index 00000000..c4be1084 Binary files /dev/null and b/Assets/Mods/Basic/Sprites/Buffs/BuffIcon_Basic_FreedomOfMovement.png differ diff --git a/Assets/Mods/Basic/Sprites/Buffs/BuffIcon_Basic_FreedomOfMovement.png.meta b/Assets/Mods/Basic/Sprites/Buffs/BuffIcon_Basic_FreedomOfMovement.png.meta new file mode 100644 index 00000000..c5e6056c --- /dev/null +++ b/Assets/Mods/Basic/Sprites/Buffs/BuffIcon_Basic_FreedomOfMovement.png.meta @@ -0,0 +1,119 @@ +fileFormatVersion: 2 +guid: 03cacd4aae6a19c4c8943d1d5417b3f2 +labels: +- UnityAI +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 1024 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 4 + buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + customData: + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spriteCustomMetadata: + entries: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: