Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion NewMod/Buttons/Overload/OverloadButton.cs
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ public class OverloadButton : CustomActionButton
/// <summary>
/// The icon displayed on the button.
/// </summary>
public override LoadableAsset<Sprite> Sprite => absorbedSprite;
public override LoadableAsset<Sprite> Sprite => MiraAssets.Empty;

/// <summary>
/// Copies functionality and appearance from another role's button.
Expand Down
1 change: 1 addition & 0 deletions NewMod/CustomRPC.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ public enum CustomRPC
WitnessTrap,
NotifyChampion,
SummonNPC,
RequestSummon,
BeaconPulse,
DeployZone
}
13 changes: 0 additions & 13 deletions NewMod/ModCompatibility.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,18 +52,5 @@ public static void DisableRole(string roleName, string pluginGuid)
}
}
}
public static bool IsRoleActive(string roleName)
{
foreach (var roles in RoleManager.Instance.AllRoles)
{
CustomRoleManager.GetCustomRoleBehaviour(roles.Role, out var customRole);

if (customRole != null && customRole.RoleName.Equals(roleName, StringComparison.OrdinalIgnoreCase))
{
return customRole.GetChance() > 0 && customRole.GetCount() > 0;
}
}
return false;
}
}
}
76 changes: 46 additions & 30 deletions NewMod/Modifiers/StickyModifier.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
using System.Collections;
using System.Collections.Generic;
using MiraAPI.Events;
using MiraAPI.Events.Vanilla.Gameplay;
using MiraAPI.GameOptions;
using MiraAPI.Modifiers;
using MiraAPI.Modifiers.Types;
using NewMod.Options;
using NewMod.Options.Modifiers;
Expand All @@ -15,6 +18,7 @@ public class StickyModifier : GameModifier
public override bool HideOnUi => false;
public override bool ShowInFreeplay => true;
public static List<PlayerControl> linkedPlayers = [];
public static bool _IsActive = false;
public override int GetAmountPerGame()
{
return (int)OptionGroupSingleton<ModifiersOptions>.Instance.StickyAmount;
Expand All @@ -29,62 +33,74 @@ public override int GetAssignmentChance()
}
public override string GetDescription()
{
float distance = OptionGroupSingleton<StickyModifierOptions>.Instance.StickyDistance.Value;
float duration = OptionGroupSingleton<StickyModifierOptions>.Instance.StickyDuration.Value;
float distance = (int)OptionGroupSingleton<StickyModifierOptions>.Instance.StickyDistance;
float duration = (int)OptionGroupSingleton<StickyModifierOptions>.Instance.StickyDuration;

return $"{ModifierName}: Pulls nearby players within {distance} units for {duration} seconds.";
}
public override void FixedUpdate()
{
base.FixedUpdate();

if (!Player.CanMove) return;
if (_IsActive) return;

if (!Player.CanMove || Player.Data.IsDead) return;

foreach (var player in PlayerControl.AllPlayerControls)
{
if (player == Player || linkedPlayers.Contains(player)) continue;
if (player == Player) continue;

float distance = OptionGroupSingleton<StickyModifierOptions>.Instance.StickyDistance.Value;
float distance = (int)OptionGroupSingleton<StickyModifierOptions>.Instance.StickyDistance;

if (Vector2.Distance(player.GetTruePosition(), Player.GetTruePosition()) < distance)
{
_IsActive = true;
linkedPlayers.Add(player);
Coroutines.Start(CoFollowStickyPlayer(player));
break;
}
}
}
public IEnumerator CoFollowStickyPlayer(PlayerControl player)
{
var info = new StickyState
float duration = (int)OptionGroupSingleton<StickyModifierOptions>.Instance.StickyDuration;
float timer = 0f;
float pullStrength = (int)OptionGroupSingleton<StickyModifierOptions>.Instance.PullStrength;
float stopDistance = 1f;

while (timer < duration)
{
StickyOwner = Player,
LinkedPlayer = player,
velocity = Vector3.zero,
};
if (player.Data.IsDead || player.Data.Disconnected) break;

yield return HudManager.Instance.StartCoroutine(
Effects.Overlerp(0.5f, new System.Action<float>((t) =>
{
Vector3 targetPos = info.LinkedPlayer.transform.position;
Vector3 currentPos = info.StickyOwner.transform.position;
timer += Time.deltaTime;

info.LinkedPlayer.transform.position = Vector3.SmoothDamp(
targetPos,
currentPos,
ref info.velocity,
t
);
})
));
var ownerPos = Player.transform.position;
var targetPos = player.transform.position;

float distance = Vector3.Distance(ownerPos, targetPos);

if (distance > stopDistance)
{
Vector3 direction = (ownerPos - targetPos).normalized;
Vector3 leashPoint = ownerPos - (direction * stopDistance);

player.transform.position = Vector3.Lerp(targetPos, leashPoint, Time.deltaTime * pullStrength);
}
yield return null;
}
linkedPlayers.Remove(player);
}
}

class StickyState
{
public PlayerControl StickyOwner;
public PlayerControl LinkedPlayer;
public Vector3 velocity;
_IsActive = true;

if (Player.AmOwner)
{
PlayerControl.LocalPlayer.RpcRemoveModifier<StickyModifier>();
}
}
[RegisterEvent]
public static void OnRoundStart(RoundStartEvent evt)
{
linkedPlayers.Clear();
}
}
}
2 changes: 1 addition & 1 deletion NewMod/NewMod.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ public override void Load()
{
Instance = this;
AddComponent<DebugWindow>();
ReactorCredits.Register<NewMod>(ReactorCredits.AlwaysShow);
ReactorCredits.Register("NewMod", "v1.2.9 Hotfix 1", true, ReactorCredits.AlwaysShow);
Harmony.PatchAll();
NewModEventHandler.RegisterEventsLogs();

Expand Down
9 changes: 9 additions & 0 deletions NewMod/Options/Modifiers/StickyModifierOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,14 @@ public class StickyModifierOptions : AbstractOptionGroup<StickyModifier>
increment: 0.5f,
suffixType: MiraNumberSuffixes.None
);
public ModdedNumberOption PullStrength { get; } =
new(
"Pull Strength",
1f,
min: 1f,
max: 5f,
increment: 1f,
suffixType: MiraNumberSuffixes.None
);
}
}
12 changes: 6 additions & 6 deletions NewMod/Options/ModifiersOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,24 +12,24 @@ public class ModifiersOptions : AbstractOptionGroup
public override Color GroupColor => Color.blue;
public override bool ShowInModifiersMenu => true;

[ModdedNumberOption("Sticky Amount", min:0f, max:6)]
public float StickyAmount { get; set; } = 10f;
[ModdedNumberOption("Sticky Amount", min:0f, max:2f)]
public float StickyAmount { get; set; } = 1f;

public ModdedNumberOption StickyChance { get; } = new("Sticky Chance", 50f, 0, 100f, 10f, MiraNumberSuffixes.Percent)
{
Visible = () => OptionGroupSingleton<ModifiersOptions>.Instance.StickyAmount > 0
};

[ModdedNumberOption("Drowsy Amount", min:0f, max:6f)]
public float DrowsyAmount { get; set; } = 10f;
[ModdedNumberOption("Drowsy Amount", min:0f, max:2f)]
public float DrowsyAmount { get; set; } = 1f;

public ModdedNumberOption DrowsyChance { get; } =new("Drowsy Chance", 50f, 0, 100f, 10f, MiraNumberSuffixes.Percent)
{
Visible = () => OptionGroupSingleton<ModifiersOptions>.Instance.DrowsyAmount > 0f
};

[ModdedNumberOption("Adrenaline Amount", min:0f, max:6f)]
public float AdrenalineAmount { get; set; } = 10f;
[ModdedNumberOption("Adrenaline Amount", min:0f, max:2f)]
public float AdrenalineAmount { get; set; } = 1f;

public ModdedNumberOption AdrenalineChance { get; } =new("Adrenaline Chance", 50f, 0, 100f, 10f, MiraNumberSuffixes.Percent)
{
Expand Down
43 changes: 43 additions & 0 deletions NewMod/Patches/ChatPatch.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
using AmongUs.Data;
using HarmonyLib;
using InnerNet;

namespace NewMod.Patches
{
[HarmonyPatch(typeof(ChatController), nameof(ChatController.SendChat))]
public static class ChatPatch
{
public static bool Prefix(ChatController __instance)
{
__instance.timeSinceLastMessage = 0f;

if (__instance.quickChatMenu.CanSend)
{
__instance.SendQuickChat();
}
else
{
if (__instance.quickChatMenu.IsOpen || string.IsNullOrWhiteSpace(__instance.freeChatField.Text) || DataManager.Settings.Multiplayer.ChatMode != QuickChatModes.FreeChatOrQuickChat)
{
return false;
}
__instance.SendFreeChat();
}

__instance.timeSinceLastMessage = 0f;
__instance.freeChatField.Clear();
__instance.quickChatMenu.Clear();
__instance.quickChatField.Clear();
__instance.UpdateChatMode();

return false;
}
[HarmonyPatch(typeof(TextBoxTMP), nameof(TextBoxTMP.Start))]
[HarmonyPostfix]
public static void StartPostfix(TextBoxTMP __instance)
{
__instance.AllowSymbols = true;
__instance.allowAllCharacters = true;
}
}
}
5 changes: 3 additions & 2 deletions NewMod/Patches/Compatibility/StartGamePatch.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using HarmonyLib;
using MiraAPI.GameOptions;
using NewMod.Options;
using NewMod.Utilities;

namespace NewMod.Patches.Compatibility
{
Expand All @@ -15,8 +16,8 @@ public static bool Prefix(AmongUsClient __instance)

if (!settings.AllowRevenantHitmanCombo)
{
var hitman = ModCompatibility.IsRoleActive("Hitman");
var revenant = ModCompatibility.IsRoleActive("Revenant");
var hitman = Utils.IsRoleActive("Hitman");
var revenant = Utils.IsRoleActive("Revenant");

if (hitman && revenant)
{
Expand Down
Loading