mirror of
https://github.com/All-Of-Us-Mods/MiraAPI.git
synced 2026-10-25 02:46:47 +00:00
fix modifiers logic
This commit is contained in:
1 parent
176d472cd7
commit
33d389e107
2 files changed
+12
-16
No files matched your search
@@ -84,7 +84,7 @@ public class ModifierComponent(IntPtr ptr) : MonoBehaviour(ptr)
|
||||
|
||||
var modifierComponent = target.GetModifierComponent();
|
||||
|
||||
var modifier = modifierComponent.ActiveModifiers.Find(x => x.GetType() == type);
|
||||
var modifier = modifierComponent?.ActiveModifiers.Find(x => x.GetType() == type);
|
||||
|
||||
if (modifier is null)
|
||||
{
|
||||
|
||||
@@ -52,16 +52,13 @@ public static class ModifierManager
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!plrs.Any(x=>mod.IsModifierValidOn(x.Data.Role)) ||
|
||||
!plrs.Any(x=>x.Data.Role is ICustomRole customRole && customRole.IsModifierApplicable(mod)))
|
||||
if (!plrs.Any(x=>IsGameModifierValid(x, mod, modifier.Key)))
|
||||
{
|
||||
Logger<MiraApiPlugin>.Warning("No players are valid for modifier: " + mod.ModifierName);
|
||||
continue;
|
||||
}
|
||||
|
||||
var maxCount = Math.Min(
|
||||
plrs.Count(x=>mod.IsModifierValidOn(x.Data.Role)),
|
||||
plrs.Count(x=>x.Data.Role is ICustomRole role && role.IsModifierApplicable(mod)));
|
||||
var maxCount = plrs.Count(x=>IsGameModifierValid(x, mod, modifier.Key));
|
||||
|
||||
var num = Math.Clamp(mod.GetAmountPerGame(), 0, maxCount);
|
||||
var chance = mod.GetAssignmentChance();
|
||||
@@ -95,10 +92,7 @@ public static class ModifierManager
|
||||
continue;
|
||||
}
|
||||
|
||||
if (plrs.Where(x=>
|
||||
(x.Data.Role is not ICustomRole role || role.IsModifierApplicable(mod) ) &&
|
||||
mod.IsModifierValidOn(x.Data.Role))
|
||||
.All(x=>x.HasModifier(id)))
|
||||
if (!plrs.Any(x=>IsGameModifierValid(x, mod, id)))
|
||||
{
|
||||
shuffledModifiers.RemoveAt(0);
|
||||
continue;
|
||||
@@ -106,12 +100,7 @@ public static class ModifierManager
|
||||
|
||||
var plr = plrs.Random();
|
||||
|
||||
if (plr.Data.Role is not ICustomRole modRole || !modRole.IsModifierApplicable(mod))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (plr.HasModifier(id) || !mod.IsModifierValidOn(plr.Data.Role))
|
||||
if (!IsGameModifierValid(plr, mod, id))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -121,6 +110,13 @@ public static class ModifierManager
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsGameModifierValid(PlayerControl player, GameModifier modifier, uint modifierId)
|
||||
{
|
||||
return (player.Data.Role is not ICustomRole role || role.IsModifierApplicable(modifier)) &&
|
||||
modifier.IsModifierValidOn(player.Data.Role) &&
|
||||
!player.HasModifier(modifierId);
|
||||
}
|
||||
|
||||
internal static void SyncAllModifiers(int targetId = -1)
|
||||
{
|
||||
var data = new List<NetData>();
|
||||
|
||||
Reference in new issue
Block a user