意图初步

This commit is contained in:
SoulliesOfficial
2025-11-15 09:08:36 -05:00
parent 9a8eadef24
commit 85bbe2431c
33 changed files with 508 additions and 198 deletions

View File

@@ -18,5 +18,4 @@ MonoBehaviour:
- CharacterData_Basic_Assassin
- CharacterData_Basic_Cleric
enemyCharacters:
- CharacterData_Basic_MarshalOfTheUnderworld
- CharacterData_Basic_MarshalOfTheUnderworld
- CharacterData_Basic_MarshalOfUnderworld

View File

@@ -18,16 +18,17 @@ MonoBehaviour:
- KeywordData_Basic_Buff_Assassin
- KeywordData_Basic_Default
cardDataIDList:
- CardData_Basic_AblazeInPurgatory
- CardData_Basic_HellfireBrand
- CardData_Basic_SoulCleave
- CardData_Basic_ArmyOfTheDead
- CardData_Basic_GreatswordSweep
- CardData_Basic_HellfireBlast
- CardData_Basic_NecromanticInfusion
- CardData_Basic_WrathOfUnderworld
- CardData_Basic_Rouse
- CardData_Basic_Tactic
- CardData_Basic_Whimsy
- CardData_Basic_AblazeInPurgatory
- CardData_Basic_ArmyOfTheDead
- CardData_Basic_HellfireBlast
- CardData_Basic_HellfireBrand
- CardData_Basic_NecromanticInfusion
- CardData_Basic_SoulCleave
- CardData_Basic_WrathOfTheUnderworld
- CardData_Basic_Bludgeon
- CardData_Basic_DualStrike
- CardData_Basic_FireBolt
@@ -105,7 +106,7 @@ MonoBehaviour:
- CharacterData_Basic_Cleric
- CharacterData_Basic_Knight
- CharacterData_Basic_Mage
- CharacterData_Basic_MarshalOfTheUnderworld
- CharacterData_Basic_MarshalOfUnderworld
- CharacterData_Basic_SkeletonGuard
equipmentDataIDList:
- EquipmentData_Basic_SteelBracer

View File

@@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: 3665151d5823cfb4990befbc8e4dbc62
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -13,18 +13,32 @@ MonoBehaviour:
m_Name: CardData_Basic_NecromanticInfusion
m_EditorClassIdentifier:
modName: Basic
categoryName:
className: NecromanticInfusion
displayName: Card_Basic_NecromanticInfusion_DisplayName
cardRarity: 40
cardRarity: 30
cardType: 10
tags: []
keywords:
- TargetEnemies
cardSprite: {fileID: 21300000, guid: 4319eef242cf5a94cace1528f74bfe42, type: 3}
cardLayoutTags: []
functionText: Card_Basic_NecromanticInfusion_FunctionText
cardDescription: $Keyword("Exhaust"), Apply 50% Lifesteal amplification to all
allies.
baseWeight: 10
cardDescription:
baseWeight: 0
variableAttributes:
dictionaryList: []
dictionaryList:
- Key: TargetCount
Value: 1
index: 0
isKeyDuplicated: 0
- Key: StaminaCost
Value: 2
index: 1
isKeyDuplicated: 0
- Key: ManaCost
Value: 0
index: 2
isKeyDuplicated: 0
dividerPosProp: 0.5
originalAttributes:
dictionaryList: []

View File

@@ -12,16 +12,18 @@ namespace Continentis.Mods.Basic.Cards
{
protected override List<CommandBase> PlayEffect(List<CharacterBase> targetList)
{
base.PlayEffect(targetList);
CommandGroup main = new CommandGroup(new Cmd_Function(() =>
{
CreateCharacterBuff<Prowess>(2).Apply(user, user, this);
}));
CommandGroup mainGroup = TargetListCommandGroup(targetList, ExecutionMode.Parallel, ExecutionMode.Parallel,
CommandGroup weak = TargetListCommandGroup(targetList,
new Cmd_ParamFunction<CharacterBase>(0.2f, target =>
{
Basic_SoulAbsorption buff = new Basic_SoulAbsorption(50);
buff.Apply(target, user, this);
CreateCharacterBuff<Weak>(2).Apply(target, user, this);
}));
return new List<CommandBase> { mainGroup };
return new List<CommandBase> { main, weak };
}
}
}

View File

@@ -18,8 +18,6 @@ namespace Continentis.Mods.Basic.Cards
protected override List<CommandBase> PlayEffect(List<CharacterBase> targetList)
{
base.PlayEffect(targetList);
CommandGroup singleTargetGroup = new CommandGroup(ExecutionMode.Parallel,
new Cmd_PlayAnimation(user.characterView, "Attack"),
new Cmd_ParamFunction<CharacterBase>(0.4f, target =>

View File

@@ -10,13 +10,13 @@ MonoBehaviour:
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: b6560183465e5944ba49e39974faafd4, type: 3}
m_Name: CharacterData_Basic_MarshalOfTheUnderworld
m_Name: CharacterData_Basic_MarshalOfUnderworld
m_EditorClassIdentifier:
haveCustomClass: 0
classFullName:
haveCustomClass: 1
classFullName: MarshalOfUnderworld
modName: Basic
className: MarshalOfTheUnderworld
displayName: Marshal Of The Underworld
className: MarshalOfUnderworld
displayName: Marshal Of Underworld
tags: []
avatar: {fileID: 21300000, guid: 8b60e98b9ca5e6a4587341cd27607e24, type: 3}
portrait: {fileID: 0}
@@ -144,7 +144,7 @@ MonoBehaviour:
index: 20
isKeyDuplicated: 0
- Key: StaminaRecoverPerAction
Value: 0
Value: 4
index: 21
isKeyDuplicated: 0
- Key: ManaRecoverPerAction
@@ -192,6 +192,11 @@ MonoBehaviour:
prefabRefs: []
derivativeCardDataRefs: []
derivativeCharacterDataRefs: []
initialDeckRef: []
initialDeckRef:
- CardData_Basic_ArmyOfTheDead
- CardData_Basic_GreatswordSweep
- CardData_Basic_HellfireBlast
- CardData_Basic_WrathOfUnderworld
- CardData_Basic_NecromanticInfusion
hudDataRefs:
- HUDData_Basic_Default

View File

@@ -0,0 +1,130 @@
using System.Collections.Generic;
using System.Linq;
using Continentis.MainGame.Card;
using Continentis.MainGame.Character;
using Continentis.MainGame.Combat;
using Continentis.Mods.Basic.Buffs;
using Continentis.Mods.Basic.Cards;
using UnityEngine;
namespace Continentis.Mods.Basic.Characters
{
public class MarshalOfUnderworld : CharacterLogicBase
{
public override void Initialize(CharacterBase character)
{
base.Initialize(character);
character.RegisterIntention(
new Normal(character.intentionSubmodule),
new SummonFirst(character.intentionSubmodule),
new UltimateAttackFirst(character.intentionSubmodule));
}
private class Normal : IntentionBase
{
public Normal(IntentionSubmodule intentionSubmodule) : base(intentionSubmodule)
{
}
public override void RefreshCardWeights()
{
characterDeck.PoolPile.ForEach(card =>
{
card.cardLogic.weightSubmodule.baseWeight = 0;
card.cardLogic.weightSubmodule.forceUse = false;
card.cardLogic.weightSubmodule.forceIgnore = false;
});
foreach (CardInstance card in characterDeck.PoolPile)
{
if (card.cardLogic is HellfireBlast)
{
card.cardLogic.weightSubmodule.baseWeight = 1;
}
else if (card.cardLogic is NecromanticInfusion)
{
if (characterRecord.GetLastActionsRecords(3)
.Any(rec => rec.cardsPlayed.Any(recCard => recCard.cardLogic is NecromanticInfusion)))
{
card.cardLogic.weightSubmodule.baseWeight = 0;
}
else
{
card.cardLogic.weightSubmodule.baseWeight = 1;
}
}
else if (card.cardLogic is GreatswordSweep)
{
card.cardLogic.weightSubmodule.baseWeight = 1;
}
}
}
}
private class SummonFirst : Normal
{
public SummonFirst(IntentionSubmodule intentionSubmodule) : base(intentionSubmodule)
{
Priority = 20;
}
public override bool Condition()
{
List<CharacterBase> allies = CombatMainManager.Instance.characterController.GetAllAllies(character);
return allies.Count == 1; // Only self is present
}
public override void RefreshCardWeights()
{
base.RefreshCardWeights();
foreach (CardInstance card in characterDeck.PoolPile)
{
if (card.cardLogic is ArmyOfTheDead)
{
card.cardLogic.weightSubmodule.forceUse = true;
}
}
}
}
private class UltimateAttackFirst : Normal
{
public UltimateAttackFirst(IntentionSubmodule intentionSubmodule) : base(intentionSubmodule)
{
Priority = 10;
}
public override bool Condition()
{
List<CharacterBase> targets = CombatMainManager.Instance.characterController.GetAllEnemies(character);
foreach (CharacterBase target in targets)
{
if (target.combatBuffSubmodule.TryGetBuff(out Burn burn))
{
if (burn.unitedStackSubmodule.stackAmount >= 5)
{
return true;
}
}
}
return false;
}
public override void RefreshCardWeights()
{
base.RefreshCardWeights();
foreach (CardInstance card in characterDeck.PoolPile)
{
if (card.cardLogic is WrathOfUnderworld)
{
card.cardLogic.weightSubmodule.forceUse = true;
}
}
}
}
}
}

View File

@@ -1,16 +0,0 @@
using UnityEngine;
public class MarshallOfUnderworld : MonoBehaviour
{
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}

View File

@@ -9,6 +9,11 @@ namespace Continentis.Mods.Basic.Rules
{
public override void ApplyRules_ConvertCoreIntoGeneral(Dictionary<string, float> core, Dictionary<string, float> general)
{
if (core.TryGetValue("DisableConversion", out float value) && value > 0) //如果禁用属性转换,则直接返回
{
return;
}
float level = core["Level"];
general["MaximumHealth"] += Mathf.FloorToInt(level * 3);
general["MaximumMana"] += Mathf.FloorToInt(level / 2);