Async load mod, Assassin_WoundDeterioration(unfinished)

This commit is contained in:
FrazeRIP
2025-11-07 01:46:56 -06:00
parent e27ddb6a07
commit 3f1e04dee7
16 changed files with 966 additions and 16 deletions

View File

@@ -52,6 +52,7 @@ MonoBehaviour:
- CardData_Basic_Oblivion
- CardData_Basic_CompoundPosion
- CardData_Basic_Torture
- CardData_Basic_WoundDeterioration
- CardData_Basic_LessRestoration
- CardData_Basic_BattlefieldExperience
- CardData_Basic_BodyAsShield

View File

@@ -43,7 +43,7 @@ MonoBehaviour:
Value: 1
index: 3
isKeyDuplicated: 0
- Key: MagicNumber
- Key: BuffStack_Corrosion
Value: 1
index: 4
isKeyDuplicated: 0

View File

@@ -0,0 +1,74 @@
%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_WoundDeterioration
m_EditorClassIdentifier: Assembly-CSharp::Continentis.MainGame.Card.CardData
modName: Basic
className: WoundDeterioration
displayName: Card_Basic_WoundDeterioration_DisplayName
cardRarity: 20
cardType: 20
keywords:
- TargetSelf
cardSprite: {fileID: 21300000, guid: 38466aa09b7b3dc468a47c6ca7251524, type: 3}
cardLayoutTags: []
functionText: Card_Basic_WoundDeterioration_FunctionText
cardDescription:
baseWeight: 1
variableAttributes:
dictionaryList:
- Key: TargetCount
Value: 0
index: 0
isKeyDuplicated: 0
- Key: StaminaCost
Value: 0
index: 1
isKeyDuplicated: 0
- Key: ManaCost
Value: 0
index: 2
isKeyDuplicated: 0
- Key: DrawCardAmount
Value: 1
index: 3
isKeyDuplicated: 0
- Key: BuffStack_WD
Value: 1
index: 4
isKeyDuplicated: 0
- Key: DamageCount
Value: 20
index: 5
isKeyDuplicated: 0
- Key: BuffStack_Corrosion
Value: 4
index: 6
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:
- CardData_Basic_Strike
derivativeCharacterDataRefs: []

View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 53671f5089686bb4ea26feca7ad59b66
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 11400000
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -18,7 +18,7 @@ namespace Continentis.Mods.Basic.Cards
{
if (target != user)
{
CreateCharacterBuff<Corrosion>(GetAttribute("MagicNumber")).Apply(target, user, this);
CreateCharacterBuff<Corrosion>(GetAttribute("BuffStack_Corrosion")).Apply(target, user, this);
}
}));
return mainGroup;

View File

@@ -0,0 +1,22 @@
using Continentis.MainGame.Card;
using Continentis.MainGame.Character;
using Continentis.MainGame.Commands;
using Continentis.Mods.Basic.Buffs;
using SLSFramework.General;
using System.Collections.Generic;
namespace Continentis.Mods.Basic.Cards
{
public class WoundDeterioration : CardLogicBase
{
protected override CommandBase PlayEffect(List<CharacterBase> targetList)
{
CommandGroup mainGroup = TargetListCommandGroup(targetList,
new Cmd_ParamFunction<CharacterBase>(0.05f, target =>
{
CreateCharacterBuff<Buffs.WoundDeterioration>(GetAttribute("BuffStack_WD")).Apply(target, user, this);
}));
return mainGroup;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 53d11ba7f91e98c46b6ff482a1809f74

View File

@@ -0,0 +1,34 @@
using Continentis.MainGame;
using Continentis.MainGame.Character;
using UnityEngine;
namespace Continentis.Mods.Basic.Buffs
{
public class WoundDeterioration : CharacterCombatBuffBase
{
public WoundDeterioration(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);
//TODO: When character damage exceed 20, apply corrision
//this.attachedCharacter.eventSubmodule.onFinishAttack.Add;
}
public override bool OnBuffApply(out CharacterCombatBuffBase existingBuff)
{
MainGameManager.Instance.basePrefabs.GenerateInfoText(contentSubmodule.displayName, attachedCharacter.characterView);
if (FindExistingSameBuff(out existingBuff))
{
existingBuff.unitedStackSubmodule.PickHigherStack(this.unitedStackSubmodule);
existingBuff.actionCountSubmodule.PickHigherCount(this.actionCountSubmodule);
return false;
}
return true;
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 7e968713121889d49844bbeb0f96246c

View File

@@ -205,5 +205,6 @@ MonoBehaviour:
- CardData_Basic_Torture
- CardData_Basic_Torture
- CardData_Basic_CompoundPosion
- CardData_Basic_WoundDeterioration
hudDataRefs:
- HUDData_Basic_Default

View File

@@ -0,0 +1,3 @@
Key,English,Simplified Chinese,Traditional Chinese,Japanese,Korean,Vietnamese,Thai
Buff_Basic_WoundDeterioration_DisplayName,Wound Deterioration,恶化伤口,,,,,
Buff_Basic_WoundDeterioration_FunctionText,TODO,你单次造成至少$ParameterInt("Damage")点的伤害时,额外给予$ParameterInt("BuffStack_Corrosion")层腐蚀,,,,,
Can't render this file because it contains an unexpected character in line 3 and column 84.

View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: b07b620f4c7256843b55609e43977ced
TextScriptImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,5 +1,7 @@
Key,English,Simplified Chinese,Traditional Chinese,Japanese,Korean,Vietnamese,Thai
Card_Basic_Torture_DisplayName,Torture,折磨,,,,,
Card_Basic_Torture_FunctionText,Test Description,抽$Attribute("DrawCardAmount")张牌,\n给予所有敌人$Attribute("MagicNumber")层腐蚀。,,,,,
Card_Basic_Torture_FunctionText,Test Description,抽$Attribute("DrawCardAmount")张牌,\n给予所有敌人$Attribute("BuffStack_Corrosion")层腐蚀。,,,,,
Card_Basic_CompoundPoison_DisplayName,Compound Poison,混合毒药,,,,,
Card_Basic_CompoundPoison_FunctionText,Test Description,给予$Attribute("BuffStack_Weak")层虚弱。\n目标每有一种负面效果给予$Attribute("BuffStack_Corrosion")层腐蚀。,,,,,
Card_Basic_WoundDeterioration_DisplayName,Compound Poison,恶化伤口,,,,,
Card_Basic_WoundDeterioration_FunctionText,Test Description,单次造成至少$Attribute("DamageCount")点伤害时,额外给予$Attribute("BuffStack_Corrosion")层腐蚀。,,,,,
Can't render this file because it contains an unexpected character in line 3 and column 64.

View File

@@ -482,6 +482,36 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 222420d8b6807ad458d012a439512436, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::SoulliesFramework.UModAssistance.ModBrowser
OnModLoadBegin:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 777656620}
m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
m_MethodName: SetActive
m_Mode: 6
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 1
m_CallState: 2
OnModLoadEnd:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 777656620}
m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
m_MethodName: SetActive
m_Mode: 6
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
persistent: 1
loadButton: {fileID: 568302140}
modButtonContainer: {fileID: 244773003}
@@ -522,7 +552,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_AnchoredPosition: {x: 0, y: 0.000061035156}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 1}
--- !u!114 &244773004
@@ -730,6 +760,349 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: -10, y: -10}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!1 &439682736
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 439682737}
- component: {fileID: 439682739}
- component: {fileID: 439682742}
- component: {fileID: 439682741}
- component: {fileID: 439682740}
m_Layer: 5
m_Name: Alert
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &439682737
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 439682736}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 664832659}
m_Father: {fileID: 761676897}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &439682739
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 439682736}
m_CullTransparentMesh: 1
--- !u!225 &439682740
CanvasGroup:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 439682736}
m_Enabled: 1
m_Alpha: 1
m_Interactable: 0
m_BlocksRaycasts: 0
m_IgnoreParentGroups: 0
--- !u!114 &439682741
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 439682736}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 4d0390bd8b8ffd640b34fe25065ff1df, type: 3}
m_Name:
m_EditorClassIdentifier: DOTweenPro.Scripts::DG.Tweening.DOTweenAnimation
updateType: 0
isSpeedBased: 0
hasOnStart: 0
hasOnPlay: 0
hasOnUpdate: 0
hasOnStepComplete: 0
hasOnComplete: 1
hasOnTweenCreated: 1
hasOnRewind: 0
onStart:
m_PersistentCalls:
m_Calls: []
onPlay:
m_PersistentCalls:
m_Calls: []
onUpdate:
m_PersistentCalls:
m_Calls: []
onStepComplete:
m_PersistentCalls:
m_Calls: []
onComplete:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 439682736}
m_TargetAssemblyTypeName: UnityEngine.GameObject, UnityEngine
m_MethodName: SetActive
m_Mode: 6
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 0
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
onTweenCreated:
m_PersistentCalls:
m_Calls:
- m_Target: {fileID: 439682740}
m_TargetAssemblyTypeName: UnityEngine.CanvasGroup, UnityEngine
m_MethodName: set_alpha
m_Mode: 4
m_Arguments:
m_ObjectArgument: {fileID: 0}
m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine
m_IntArgument: 0
m_FloatArgument: 1
m_StringArgument:
m_BoolArgument: 0
m_CallState: 2
onRewind:
m_PersistentCalls:
m_Calls: []
targetIsSelf: 1
targetGO: {fileID: 0}
tweenTargetIsTargetGO: 1
delay: 0
duration: 1
easeType: 6
easeCurve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 0
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
- serializedVersion: 3
time: 1
value: 1
inSlope: 0
outSlope: 0
tangentMode: 0
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
loopType: 0
loops: 1
id:
isRelative: 0
isFrom: 0
isIndependentUpdate: 0
autoKill: 1
autoGenerate: 0
isActive: 1
isValid: 1
target: {fileID: 439682740}
animationType: 7
targetType: 2
forcedTargetType: 0
autoPlay: 0
useTargetAsV3: 0
endValueFloat: 0
endValueV3: {x: 0, y: 0, z: 0}
endValueV2: {x: 0, y: 0}
endValueColor: {r: 1, g: 1, b: 1, a: 1}
endValueString:
endValueRect:
serializedVersion: 2
x: 0
y: 0
width: 0
height: 0
endValueTransform: {fileID: 0}
optionalBool0: 0
optionalBool1: 0
optionalFloat0: 0
optionalInt0: 0
optionalRotationMode: 0
optionalScrambleMode: 0
optionalShakeRandomnessMode: 0
optionalString:
--- !u!114 &439682742
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 439682736}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 40306178, guid: aa0b1eebb5db27a419fa4564bbe5c9c5, type: 3}
m_Name:
m_EditorClassIdentifier: DOTweenPro.dll::DG.Tweening.DOTweenVisualManager
preset: 0
onEnableBehaviour: 1
onDisableBehaviour: 0
--- !u!1 &454543660
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 454543661}
- component: {fileID: 454543663}
- component: {fileID: 454543662}
m_Layer: 5
m_Name: Text (TMP)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &454543661
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 454543660}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 777656621}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &454543662
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 454543660}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Loading...
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 79.52
m_fontSizeBase: 79.52
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!222 &454543663
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 454543660}
m_CullTransparentMesh: 1
--- !u!1 &568302138
GameObject:
m_ObjectHideFlags: 0
@@ -851,6 +1224,124 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 568302138}
m_CullTransparentMesh: 1
--- !u!1 &664832658
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 664832659}
- component: {fileID: 664832663}
- component: {fileID: 664832662}
- component: {fileID: 664832661}
- component: {fileID: 664832660}
m_Layer: 5
m_Name: Alert
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &664832659
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664832658}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 1914150233}
m_Father: {fileID: 439682737}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 120.89}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &664832660
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664832658}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup
m_Padding:
m_Left: 0
m_Right: 0
m_Top: 20
m_Bottom: 20
m_ChildAlignment: 4
m_Spacing: 0
m_ChildForceExpandWidth: 1
m_ChildForceExpandHeight: 1
m_ChildControlWidth: 1
m_ChildControlHeight: 0
m_ChildScaleWidth: 0
m_ChildScaleHeight: 0
m_ReverseArrangement: 0
--- !u!114 &664832661
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664832658}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter
m_HorizontalFit: 0
m_VerticalFit: 2
--- !u!114 &664832662
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664832658}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.7882353}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &664832663
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 664832658}
m_CullTransparentMesh: 1
--- !u!1 &760556662
GameObject:
m_ObjectHideFlags: 0
@@ -1068,6 +1559,8 @@ RectTransform:
m_Children:
- {fileID: 760556663}
- {fileID: 106851544}
- {fileID: 777656621}
- {fileID: 439682737}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
@@ -1075,6 +1568,82 @@ RectTransform:
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0, y: 0}
--- !u!1 &777656620
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 777656621}
- component: {fileID: 777656623}
- component: {fileID: 777656622}
m_Layer: 5
m_Name: Pause
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 0
--- !u!224 &777656621
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 777656620}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 454543661}
m_Father: {fileID: 761676897}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 0, y: 0}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &777656622
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 777656620}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image
m_Material: {fileID: 0}
m_Color: {r: 0, g: 0, b: 0, a: 0.70980394}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!222 &777656623
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 777656620}
m_CullTransparentMesh: 1
--- !u!1 &1073687563
GameObject:
m_ObjectHideFlags: 0
@@ -1198,6 +1767,7 @@ GameObject:
- component: {fileID: 1469191072}
- component: {fileID: 1469191071}
- component: {fileID: 1469191070}
- component: {fileID: 1469191073}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
@@ -1279,6 +1849,50 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &1469191073
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1469191069}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData
m_RenderShadows: 1
m_RequiresDepthTextureOption: 2
m_RequiresOpaqueTextureOption: 2
m_CameraType: 0
m_Cameras: []
m_RendererIndex: -1
m_VolumeLayerMask:
serializedVersion: 2
m_Bits: 1
m_VolumeTrigger: {fileID: 0}
m_VolumeFrameworkUpdateModeOption: 2
m_RenderPostProcessing: 0
m_Antialiasing: 0
m_AntialiasingQuality: 2
m_StopNaN: 0
m_Dithering: 0
m_ClearDepth: 1
m_AllowXRRendering: 1
m_AllowHDROutput: 1
m_UseScreenCoordOverride: 0
m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
m_RequiresDepthTexture: 0
m_RequiresColorTexture: 0
m_TaaSettings:
m_Quality: 3
m_FrameInfluence: 0.1
m_JitterScale: 1
m_MipBias: 0
m_VarianceClampScale: 0.9
m_ContrastAdaptiveSharpening: 0
m_Version: 2
--- !u!1 &1504064933
GameObject:
m_ObjectHideFlags: 0
@@ -1981,6 +2595,157 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1809795625}
m_CullTransparentMesh: 0
--- !u!1 &1914150232
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1914150233}
- component: {fileID: 1914150235}
- component: {fileID: 1914150234}
- component: {fileID: 1914150236}
m_Layer: 5
m_Name: Text (TMP)
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &1914150233
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1914150232}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 664832659}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 960.00006, y: -60.445}
m_SizeDelta: {x: 500.07, y: 80.89}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &1914150234
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1914150232}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_text: Mod load done.
m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2}
m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0}
m_fontMaterials: []
m_fontColor32:
serializedVersion: 2
rgba: 4294967295
m_fontColor: {r: 1, g: 1, b: 1, a: 1}
m_enableVertexGradient: 0
m_colorMode: 3
m_fontColorGradient:
topLeft: {r: 1, g: 1, b: 1, a: 1}
topRight: {r: 1, g: 1, b: 1, a: 1}
bottomLeft: {r: 1, g: 1, b: 1, a: 1}
bottomRight: {r: 1, g: 1, b: 1, a: 1}
m_fontColorGradientPreset: {fileID: 0}
m_spriteAsset: {fileID: 0}
m_tintAllSprites: 0
m_StyleSheet: {fileID: 0}
m_TextStyleHashCode: -1183493901
m_overrideHtmlColors: 0
m_faceColor:
serializedVersion: 2
rgba: 4294967295
m_fontSize: 72.4
m_fontSizeBase: 72.4
m_fontWeight: 400
m_enableAutoSizing: 0
m_fontSizeMin: 18
m_fontSizeMax: 72
m_fontStyle: 0
m_HorizontalAlignment: 2
m_VerticalAlignment: 512
m_textAlignment: 65535
m_characterSpacing: 0
m_wordSpacing: 0
m_lineSpacing: 0
m_lineSpacingMax: 0
m_paragraphSpacing: 0
m_charWidthMaxAdj: 0
m_TextWrappingMode: 1
m_wordWrappingRatios: 0.4
m_overflowMode: 0
m_linkedTextComponent: {fileID: 0}
parentLinkedComponent: {fileID: 0}
m_enableKerning: 0
m_ActiveFontFeatures: 6e72656b
m_enableExtraPadding: 0
checkPaddingRequired: 0
m_isRichText: 1
m_EmojiFallbackSupport: 1
m_parseCtrlCharacters: 1
m_isOrthographic: 1
m_isCullingEnabled: 0
m_horizontalMapping: 0
m_verticalMapping: 0
m_uvLineOffset: 0
m_geometrySortingOrder: 0
m_IsTextObjectScaleStatic: 0
m_VertexBufferAutoSizeReduction: 0
m_useMaxVisibleDescender: 1
m_pageToDisplay: 1
m_margin: {x: 0, y: 0, z: 0, w: 0}
m_isUsingLegacyAnimationComponent: 0
m_isVolumetricText: 0
m_hasFontAssetChanged: 0
m_baseMaterial: {fileID: 0}
m_maskOffset: {x: 0, y: 0, z: 0, w: 0}
--- !u!222 &1914150235
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1914150232}
m_CullTransparentMesh: 1
--- !u!114 &1914150236
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1914150232}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3}
m_Name:
m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter
m_HorizontalFit: 2
m_VerticalFit: 2
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Continentis.MainGame;
using Continentis.MainGame.Card;
using Continentis.MainGame.Character;
@@ -10,12 +11,19 @@ using I2.Loc;
using SLSFramework.General;
using UMod;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UI;
namespace SLSFramework.UModAssistance
{
public partial class ModBrowser : MonoBehaviour
{
#region Inspector
public UnityEvent OnModLoadBegin;
public UnityEvent OnModLoadEnd;
#endregion
// Public
public bool persistent = true;
public Button loadButton;
@@ -23,7 +31,7 @@ namespace SLSFramework.UModAssistance
public GameObject modLoadTabPrefab;
public List<ModLoadTab> modTabs = new List<ModLoadTab>();
public List<IModInfo> selectedMods = new List<IModInfo>();
private void Awake()
{
#if UNITY_EDITOR
@@ -34,25 +42,26 @@ namespace SLSFramework.UModAssistance
loadButton.onClick.AddListener(OnLoadClicked);
GenerateUIList();
}
}
public partial class ModBrowser
{
private void OnLoadClicked()
private async void OnLoadClicked()
{
OnModLoadBegin?.Invoke();
GetAllSelectedMods();
foreach (IModInfo mod in selectedMods)
{
ModHost host = ModManager.LoadMod(mod);
ModHost host = await ModManager.LoadAsync(mod);
ModManager.RegisterTypesFromMod(host, typeof(RulesCollectionBase));
ModManager.RegisterTypesFromMod(host, typeof(CharacterBase));
ModManager.RegisterTypesFromMod(host, typeof(CardLogicBase));
ModManager.RegisterTypesFromMod(host, typeof(EquipmentBase));
ModManager.RegisterTypesFromMod(host,typeof(CardCombatBuffBase));
ModManager.RegisterTypesFromMod(host,typeof(CharacterCombatBuffBase));
ModManager.RegisterTypesFromMod(host, typeof(CardCombatBuffBase));
ModManager.RegisterTypesFromMod(host, typeof(CharacterCombatBuffBase));
string manifestName = host.CurrentMod.NameInfo.ModName + "_Manifest";
ModManifest manifest = host.Assets.Load<ModManifest>(manifestName);
manifest.SaveToDatabase(host);
@@ -65,10 +74,11 @@ namespace SLSFramework.UModAssistance
LocalizationManager.AddSource(sourceData);
}
}
LocalizationManager.LocalizeAll();
OnModLoadEnd?.Invoke();
}
private void GenerateUIList()
{
// Destroy all cells
@@ -80,14 +90,14 @@ namespace SLSFramework.UModAssistance
CreateUICell(info, modButtonContainer);
}
}
private void CreateUICell(IModInfo mod, RectTransform container)
{
ModLoadTab modTab = Instantiate(modLoadTabPrefab, container).GetComponent<ModLoadTab>();
modTab.Initialize(mod);
modTabs.Add(modTab);
}
private void GetAllSelectedMods()
{
selectedMods = modTabs.FindAll(t => t.isSelected).ConvertAll(t => t.modInfo);

View File

@@ -3,10 +3,12 @@ using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using SLSFramework.General;
using UMod;
using UMod.Scripting;
using UnityEngine;
using UnityEngine.ResourceManagement.Exceptions;
using Object = UnityEngine.Object;
namespace SLSFramework.UModAssistance
@@ -21,6 +23,23 @@ namespace SLSFramework.UModAssistance
Debug.Log($"Mod '{modName}' loaded successfully.");
return host;
}
public static async Task<ModHost> LoadAsync(IModInfo modInfo)
{
string modName = modInfo.NameInfo.ModName;
var host = Mod.LoadAsync(Mod.DefaultDirectory.GetModPath(modName));
while (!host.IsDone)
{
await Task.Yield();
}
if (!host.IsSuccessful)
{
throw new OperationException($"Failed to load mod '{modName}'");
}
LoadedMods.Add(modName, host.Result);
Debug.Log($"Mod '{modName}' async loaded successfully.");
return host.Result;
}
}
public static partial class ModManager