Skip to content

Commit 77f110a

Browse files
committed
2.5.30.1209
1 parent a4b9d23 commit 77f110a

12 files changed

Lines changed: 125 additions & 123 deletions

File tree

Mods/0-SCore/0-SCore.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@
229229
<Compile Include="Features\PlayerMetrics\KillTracking\Scripts\SCoreKillTracker.cs" />
230230
<Compile Include="Features\PlayerMetrics\SCoreMetrics.cs" />
231231
<Compile Include="Features\Quality\Harmony\ItemValueConstructor.cs" />
232+
<Compile Include="Features\Quality\Harmony\MinEventModifyCVar.cs" />
232233
<Compile Include="Features\Quality\Harmony\QualityInfoCleanUp.cs" />
233234
<Compile Include="Features\Quality\Harmony\QualityInfoGetQualityColor.cs" />
234235
<Compile Include="Features\Quality\Harmony\QualityInfoGetQualityColorHex.cs" />
@@ -238,6 +239,7 @@
238239
<Compile Include="Features\Quality\Harmony\XUiCCombineGridMergeSlotChangedEvent.cs" />
239240
<Compile Include="Features\Quality\Harmony\XUiCCraftingInfoAddQualityButton_OnPress.cs" />
240241
<Compile Include="Features\Quality\Harmony\XUiCCraftingInfoSubtractQualityButton_OnPress.cs" />
242+
<Compile Include="Features\Quality\Harmony\XUiCRecipeStackOutputStack.cs" />
241243
<Compile Include="Features\Quality\Harmony\XUiCRecipeStackSetRecipe.cs" />
242244
<Compile Include="Features\Quality\Harmony\XUiMTraderGetBuyPrice.cs" />
243245
<Compile Include="Features\Quality\Harmony\XUiMTraderGetSellPrice.cs" />

Mods/0-SCore/Features/Challenges/Harmony/ChallengesFromXmlPatches.cs

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,7 @@
55

66
namespace SCore.Features.Challenges.Harmony
77
{
8-
[HarmonyPatch(typeof(ChallengeClass))]
9-
[HarmonyPatch(nameof(ChallengeClass.ParseElement))]
10-
public class ChallengesFromXmlPatches
11-
{
12-
public static void Postfix(ChallengeClass __instance, XElement e)
13-
{
14-
ChallengeRequirementManager.AddRequirements(__instance.Name.ToLower(), e);
15-
}
16-
}
8+
179

1810
[HarmonyPatch(typeof(BaseChallengeObjective))]
1911
[HarmonyPatch(nameof(BaseChallengeObjective.CheckBaseRequirements))]

Mods/0-SCore/Features/Challenges/Scripts/ChallengeRequirementManager.cs

Lines changed: 4 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -5,72 +5,11 @@
55

66
public static class ChallengeRequirementManager
77
{
8-
public static Dictionary<string, MinEffectGroup> ChallengeRequirements =
9-
new Dictionary<string, MinEffectGroup>();
10-
11-
public static void AddRequirements(string id, XElement _element)
12-
{
13-
if (_element == null) return;
14-
if (string.IsNullOrEmpty(id)) return;
15-
//
16-
// MinEffectGroup minEffectGroup = null;
17-
// List<IRequirement> list = null;
18-
//
19-
// foreach (var e in _element.Elements())
20-
// {
21-
// if (e.Name == "requirement")
22-
// {
23-
// if (minEffectGroup == null)
24-
// {
25-
// minEffectGroup = new MinEffectGroup();
26-
// }
27-
// IRequirement requirement = RequirementBase.ParseRequirement(e);
28-
// if (requirement != null)
29-
// {
30-
// if (list == null)
31-
// {
32-
// list = new List<IRequirement>();
33-
// }
34-
// list.Add(requirement);
35-
// }
36-
// }
37-
// }
38-
// if ( list?.Count == 0) return;
39-
// RequirementGroup.Op op = RequirementGroup.Op.And;
40-
//
41-
// minEffectGroup.Requirements = new RequirementGroup(op, list);
42-
// minEffectGroup.Requirements = RequirementBase.ParseRequirementGroup(_element);
43-
// if ( minEffectGroup.Requirements?.groups == null) return;
44-
// // foreach (XElement childElement in _element.Elements())
45-
// // {
46-
// // if (childElement.Name.LocalName.EqualsCaseInsensitive("requirements"))
47-
// // {
48-
// // if (childElement.HasAttribute("compare_type"))
49-
// // {
50-
// // minEffectGroup.OrCompareRequirements = childElement.GetAttribute("compare_type").EqualsCaseInsensitive("or");
51-
// // }
52-
// //
53-
// // minEffectGroup.Requirements.AddRange(RequirementBase.ParseRequirements(childElement));
54-
// // }
55-
// // else if (childElement.Name.LocalName.EqualsCaseInsensitive("requirement"))
56-
// // {
57-
// // minEffectGroup.Requirements.Add(RequirementBase.ParseRequirement(childElement));
58-
// // }
59-
// // }
60-
//
61-
// if (minEffectGroup.Requirements.groups.Count > 0)
62-
// {
63-
// ChallengeRequirements.TryAdd(id.ToLower(), minEffectGroup);
64-
// }
65-
}
8+
669

6710
public static bool IsValid(string id, ChallengeClass challengeClass = null, MinEventParams minEventContext = null)
6811
{
69-
// if (!ChallengeRequirements.TryGetValue(id.ToLower(), out var minEffectGroup))
70-
// {
71-
// return true;
72-
// }
73-
12+
7413
if (challengeClass == null)
7514
{
7615
challengeClass = ChallengeClass.GetChallenge(id);
@@ -89,45 +28,15 @@ public static bool IsValid(string id, ChallengeClass challengeClass = null, MinE
8928
if (challengeClass.Effects?.EffectGroups == null) return true;
9029
foreach (var group in challengeClass.Effects.EffectGroups)
9130
{
92-
Debug.Log($"Group: {group.ToString()}");
9331
if (!group.canRun(minEventContext))
9432
{
95-
Debug.Log("Cannot Run.");
9633
return false;
9734
}
9835

9936
}
100-
// if (canRun(minEffectGroup, minEventContext))
101-
// return true;
37+
10238
return true;
10339
}
10440

105-
private static bool canRun(MinEffectGroup minEffectGroup, MinEventParams pParams)
106-
{
107-
108-
if (minEffectGroup.Requirements == null) return true;
109-
return minEffectGroup.Requirements.IsValid(pParams);
110-
// if (minEffectGroup.OrCompareRequirements)
111-
// {
112-
// foreach (var t in minEffectGroup.Requirements)
113-
// {
114-
// if (t.IsValid(pParams))
115-
// {
116-
// return true;
117-
// }
118-
// }
119-
//
120-
// return false;
121-
// }
122-
//
123-
// for (var j = 0; j < minEffectGroup.Requirements.Count; j++)
124-
// {
125-
// if (!minEffectGroup.Requirements[j].IsValid(pParams))
126-
// {
127-
// return false;
128-
// }
129-
// }
130-
//
131-
// return true;
132-
}
41+
13342
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
using HarmonyLib;
2+
using SCore.Features.ItemDegradation.Utils;
3+
using UnityEngine;
4+
5+
namespace SCore.Features.ItemDegradation.Harmony.General
6+
{
7+
[HarmonyPatch(typeof(MinEventActionModifyCVar))]
8+
[HarmonyPatch(nameof(MinEventActionModifyCVar.Execute))]
9+
public class MinEventActionModifyCVarExecute
10+
{
11+
private static readonly string AdvFeatureClass = "AdvancedItemFeatures";
12+
private static readonly string Feature = "CustomQualityLevels";
13+
public static bool Prefix(MinEventActionModifyCVar __instance, MinEventParams _params)
14+
{
15+
if (!Configuration.CheckFeatureStatus(AdvFeatureClass, Feature)) return true;
16+
17+
// Handle tierList logic separately
18+
if (__instance.rollType == MinEventActionModifyCVar.RandomRollTypes.tierList)
19+
{
20+
if ((_params.ParentType == MinEffectController.SourceParentType.ItemClass ||
21+
_params.ParentType == MinEffectController.SourceParentType.ItemModifierClass) &&
22+
!_params.ItemValue.IsEmpty())
23+
{
24+
// Use SCore's QualityUtils to handle custom quality scaling
25+
int tierIndex = QualityUtils.CalculateTier(_params.ItemValue.Quality);
26+
27+
// Clamp to prevent Index Out of Bounds
28+
tierIndex = Mathf.Clamp(tierIndex, 0, __instance.valueList.Length - 1);
29+
__instance.value = __instance.valueList[tierIndex];
30+
}
31+
}
32+
33+
// Apply values to targets
34+
for (int i = 0; i < __instance.targets.Count; i++)
35+
{
36+
float finalValue = __instance.value;
37+
38+
if (__instance.cvarRef)
39+
{
40+
finalValue = __instance.targets[i].Buffs.GetCustomVar(__instance.refCvarName);
41+
}
42+
else if (__instance.rollType == MinEventActionModifyCVar.RandomRollTypes.randomInt)
43+
{
44+
finalValue = Mathf.Clamp((float)_params.Self.rand.RandomRange((int)__instance.minValue, (int)__instance.maxValue + 1), __instance.minValue, __instance.maxValue);
45+
}
46+
else if (__instance.rollType == MinEventActionModifyCVar.RandomRollTypes.randomFloat)
47+
{
48+
finalValue = Mathf.Clamp(_params.Self.rand.RandomRange(__instance.minValue, __instance.maxValue + 1f), __instance.minValue, __instance.maxValue);
49+
}
50+
51+
// Set the CVar on the target
52+
__instance.targets[i].Buffs.SetCustomVar(
53+
__instance.cvarName,
54+
finalValue,
55+
(__instance.targets[i].isEntityRemote && !_params.Self.isEntityRemote) || _params.IsLocal,
56+
__instance.operation
57+
);
58+
}
59+
60+
return false; // Skip the original method
61+
}
62+
}
63+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using HarmonyLib;
3+
using UnityEngine;
4+
5+
namespace SCore.Features.Quality.Harmony
6+
{
7+
[HarmonyPatch(typeof(XUiC_RecipeStack))]
8+
[HarmonyPatch(nameof(XUiC_RecipeStack.outputStack))]
9+
public class XUiCRecipeStackoutputStack
10+
{
11+
private static readonly string AdvFeatureClass = "AdvancedItemFeatures";
12+
private static readonly string Feature = "CustomQualityLevels";
13+
14+
public static bool Prefix( XUiC_RecipeStack __instance)
15+
{
16+
if (!Configuration.CheckFeatureStatus(AdvFeatureClass, Feature)) return true;
17+
if (__instance.recipe == null ) return true;
18+
19+
20+
// Log.Out($"Recipe: {__instance.recipe.ToString()} Quality: {__instance.recipe.craftingTier} OutputQuality: {__instance.outputQuality}");
21+
return true;
22+
}
23+
}
24+
}

Mods/0-SCore/Features/Quality/Harmony/XUiCRecipeStackSetRecipe.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,19 @@
55
namespace SCore.Features.Quality.Harmony
66
{
77
[HarmonyPatch(typeof(XUiC_RecipeStack))]
8-
[HarmonyPatch(nameof(XUiC_RecipeStack.outputStack))]
8+
[HarmonyPatch(nameof(XUiC_RecipeStack.SetRecipe))]
99
public class XUiCRecipeStackSetRecipe
1010
{
1111
private static readonly string AdvFeatureClass = "AdvancedItemFeatures";
1212
private static readonly string Feature = "CustomQualityLevels";
1313

14-
public static bool Prefix( XUiC_RecipeStack __instance)
14+
public static bool Prefix( XUiC_RecipeStack __instance, int _outputQuality = -1)
1515
{
1616
if (!Configuration.CheckFeatureStatus(AdvFeatureClass, Feature)) return true;
1717
if (__instance.recipe == null ) return true;
1818

19-
20-
Log.Out($"Recipe: {__instance.recipe.ToString()} Quality: {__instance.recipe.craftingTier} OutputQuality: {__instance.outputQuality}");
19+
if (Configuration.CheckFeatureStatus(AdvFeatureClass, "Logging"))
20+
Log.Out($"SetRecipe(): Recipe: {__instance.recipe.ToString()} Quality: {__instance.recipe.craftingTier} OutputQuality: {__instance.outputQuality} : Passed in Output: {_outputQuality}");
2121
return true;
2222
}
2323
}

Mods/0-SCore/ModInfo.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@
55
<Description value="SCore Mod" />
66
<DisplayName value="0-SCore" />
77
<Website value="https://github.com/SphereII/SphereII.Mods/releases" />
8-
<Version value="2.5.25.1105" />
8+
<Version value="2.5.30.1209" />
99
</xml>

Mods/0-SCore/Properties/AssemblyInfo.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,5 +38,5 @@
3838
// [assembly: AssemblyVersion("1.0.*")]
3939
//[assembly: AssemblyVersion("20.0.*")]
4040

41-
[assembly: AssemblyVersion("2.5.25.1105")]
42-
[assembly: AssemblyFileVersion("2.5.25.1105")]
41+
[assembly: AssemblyVersion("2.5.30.1209")]
42+
[assembly: AssemblyFileVersion("2.5.30.1209")]

Mods/0-SCore/ReadMe.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@ This release of 0-SCore introduces significant enhancements across several core
3232

3333

3434
[ Change Log ]
35+
Version: 2.5.30.1209
36+
[ Challenges ]
37+
- Removed debug lines
38+
39+
[ Quality ]
40+
- Fixed an issue with ModifyCVar script not correctly calculating the quality tier levels.
41+
- Added logging for crafting recipes where they lose their reference when crafting with the workstation closed.
42+
43+
[ EntityNPCBandit ]
44+
- Removed some inappropriate checks, such as playerstat changed.
45+
3546
Version: 2.5.25.1105
3647
[ NPCs ]
3748
- Fixed an issue where NPCs would duplicate on dedi, and respawn dupes when reloading the game.

Mods/0-SCore/SCore.dll

512 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)