Compare commits

...
12 Commits
Author SHA1 Message Date
Ape 7dafbcf479 Customize Sabotages, fixes, anticheat upgrades 2026-09-05 14:58:27 +02:00
Ape 2e9d32b50d I think this should work 2026-08-30 19:25:14 +02:00
Ape cde461c4a4 UI try not to be the dumbest thing ever (impossible challenge) 2026-08-26 14:33:04 +02:00
Ape 62d66e170b v2.0.3 II 2026-08-26 14:31:15 +02:00
Ape c201211afb v2.0.3 2026-08-26 14:26:42 +02:00
MV cc1950f543 Idiot can get GitHub working 2026-08-26 14:18:10 +02:00
MV 2764e073af Idiot can't get GitHub working 2026-08-26 14:14:59 +02:00
Ape 6f53cacb32 Fix hopefully 2026-08-26 14:09:54 +02:00
Ape f4d9d8101f Setting fallbacks, GitHub templates, GM fix 2026-08-26 14:02:31 +02:00
Ape f18dc3fa31 v2.0.2 2026-08-21 18:44:45 +02:00
Ape 0d55683088 v2.0.1 readme 2026-08-20 13:32:52 +02:00
Ape 9572c8ca53 v2.0.1 2026-08-20 13:32:10 +02:00
31 changed files with 815 additions and 118 deletions

No files matched your search

+78
View File
@@ -0,0 +1,78 @@
name: Bug Report
description: Report a bug/crash for Among Us Revamped.
labels: ["type: bug"]
body:
- type: markdown
attributes:
value: |
**Attachments**
- Please upload logs to help diagnose the issue (retrieved using /dump command).
- If applicable, include screenshots or videos to provide more context.
- type: textarea
id: description
attributes:
label: Description
description: Describe the bug in detail.
placeholder: |
A clear and concise description of what the bug is.
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected Behavior
description: Describe what you expected to happen.
placeholder: |
A clear and concise description of what you expected to happen.
validations:
required: true
- type: textarea
id: steps-to-reproduce
attributes:
label: Steps to Reproduce
description: Provide a minimal set of steps to reproduce the issue.
placeholder: |
1. Step one
2. Step two
3. Step three
validations:
required: true
- type: dropdown
id: game-platform
attributes:
label: Game Platform
description: Select the platform you are using Among Us on.
options:
- Steam
- Itch.io
- Epic Games Store
- Microsoft Store
- Xbox App
validations:
required: true
- type: input
id: other-mods
attributes:
label: Other Mods
description: List any other Among Us mods you are using (e.g., AUnlocker v1.3.1).
validations:
required: false
- type: checkboxes
id: verification
attributes:
label: Verification
description: Make sure that you have checked the following before submitting your bug report
options:
- label: I confirm that this issue does not occur in the vanilla game (without Among Us Revamped or BepInEx installed).
required: true
- label: I confirm that I have searched existing issues and this is not a duplicate.
required: true
- label: I confirm that I am using the latest version of Among Us Revamped and Among Us.
required: true
+1
View File
@@ -0,0 +1 @@
blank_issues_enabled: false
+29
View File
@@ -0,0 +1,29 @@
name: Other
description: For anything outside the main categories
labels: ["type: other"]
body:
- type: markdown
attributes:
value: |
**Attachments**
- Please don't use this issue category to bypass requirements.
- type: textarea
id: otherdescription
attributes:
label: Description
description: Describe your issue in detail.
placeholder: |
A clear and concise description of your issue.
validations:
required: true
- type: checkboxes
id: otherverification
attributes:
label: Verification
description: Make sure that you have checked the following before submitting your issue
options:
- label: I confirm that this issue does not fall under any other categories.
required: true
+42
View File
@@ -0,0 +1,42 @@
name: Suggestion
description: Create a suggestion for Among Us Revamped
labels: ["type: suggestion"]
body:
- type: markdown
attributes:
value: |
**Note**
- Please share as much detail as you can.
- Please consider that Among Us Revamped is a Host-Only mod.
- type: textarea
id: suggestiondescription
attributes:
label: Description
description: Describe the suggestion in detail.
placeholder: |
A clear and concise description of what the suggestion is.
validations:
required: true
- type: textarea
id: suggestionrelevancy
attributes:
label: Reason
description: Describe what makes the suggestion relevant.
placeholder: |
A clear and concise description of what makes the suggestion relevant.
validations:
required: true
- type: checkboxes
id: suggestionverification
attributes:
label: Verification
description: Make sure that you have checked the following before submitting your suggestion
options:
- label: I confirm that this suggestion is not a previously denied duplicate.
required: true
- label: I confirm that this feature does not exist yet.
required: true
+32
View File
@@ -0,0 +1,32 @@
name: Support
description: Ask support for Among Us Revamped
labels: ["type: support"]
body:
- type: markdown
attributes:
value: |
**Attachments**
- Please join our Discord for support if possible, as giving it is easier there.
- Please only ask support related to Among Us Revamped.
- type: textarea
id: supportdescription
attributes:
label: Description
description: Describe the question in detail.
placeholder: |
A clear and concise description of what the question is.
validations:
required: true
- type: checkboxes
id: supportverification
attributes:
label: Verification
description: Make sure that you have checked the following before submitting your question
options:
- label: I confirm that my question isn't answered on the GitHub main page.
required: true
- label: I confirm that I have searched for answers before asking here.
required: true
@@ -0,0 +1,21 @@
<!--- Please provide a general summary of your changes in the Title above -->
### Requirements
<!--- Do not post a pull request if any requirement is not met. -->
* [ ] I confirm this PR was not generated by AI
* [ ] I confirm this PR has been tested and functions as intended
### Classification
<!--- Put an `x` in all the boxes that apply -->
* [ ] Bug Fix
* [ ] New Feature
* [ ] Refactor/Optimization
* [ ] Other
## Description
<!--- Describe your changes in detail. You can also include screenshots here. -->
+1 -1
View File
@@ -44,7 +44,7 @@ public partial class Main : BasePlugin
public static bool HasArgumentException;
public static string CredentialsText;
public const string ModVersion = "v2.0.0";
public const string ModVersion = "v2.0.4";
public static float GameTimer;
public static float AfkTimer;
+1 -1
View File
@@ -19,7 +19,7 @@
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.735" ExcludeAssets="runtime;native" />
<PackageReference Include="AmongUs.GameLibs.Steam" Version="2026.8.18" PrivateAssets="all" Condition="'$(Configuration)' == 'Release'"/>
<PackageReference Include="AmongUs.GameLibs.Android" Version="2025.10.14" PrivateAssets="all" Condition="'$(Configuration)' == 'Android'"/>
<PackageReference Include="AmongUs.GameLibs.Android" Version="2026.8.18" PrivateAssets="all" Condition="'$(Configuration)' == 'Android'"/>
<PackageReference Include="BepInEx.AutoPlugin" Version="1.1.0" PrivateAssets="all" />
<PackageReference Include="BepInEx.IL2CPP.MSBuild" Version="2.1.0-rc.1" PrivateAssets="all" ExcludeAssets="runtime" />
+4 -1
View File
@@ -84,7 +84,10 @@ internal static class CommandHelper
new Cmd { Name = new[] { "/mapvote" }, Prompt = "/mapvote", Description = Translator.Get("mapVoteDesc"), HasVariable = false },
new Cmd { Name = new[] { "/allmapvote" }, Prompt = "/allmapvote", Description = Translator.Get("allMapVoteDesc"), HasVariable = false },
new Cmd { Name = new[] { "/gmvote" }, Prompt = "/gmvote", Description = Translator.Get("modeVoteDesc"), HasVariable = false }
new Cmd { Name = new[] { "/gmvote" }, Prompt = "/gmvote", Description = Translator.Get("modeVoteDesc"), HasVariable = false },
new Cmd { Name = new[] { "/private" }, Prompt = "/private", Description = Translator.Get("privateDesc"), HasVariable = false },
new Cmd { Name = new[] { "/public" }, Prompt = "/public", Description = Translator.Get("publicDesc"), HasVariable = false }
};
[HarmonyPostfix]
+51 -3
View File
@@ -151,6 +151,18 @@ namespace AmongUsRevamped
public static OptionItem DisableMushroomMixup;
public static OptionItem DisableCloseDoor;
public static OptionItem TabGroupCustomizeSabotages;
public static OptionItem CustomizeSabotages;
public static OptionItem SabotageCooldown;
public static OptionItem SkeldReactorDuration;
public static OptionItem SkeldO2Duration;
public static OptionItem MiraReactorDuration;
public static OptionItem MiraO2Duration;
public static OptionItem PolusReactorDuration;
public static OptionItem AirshipReactorDuration;
public static OptionItem FungleReactorDuration;
public static OptionItem FungleMushroomMixupDuration;
public static OptionItem TabGroupGameplayGeneral;
public static OptionItem ShieldFirstDeath;
public static OptionItem ShieldFirstDeathDuration;
@@ -301,7 +313,6 @@ namespace AmongUsRevamped
public static OptionItem SNSChatInGameExtend2;
public static OptionItem SNSChatInGameFast;
public static OptionItem CrewAutoWinsGameAfter;
public static OptionItem MisfiresToSuicide;
public static OptionItem SNSDisableSabotage;
public static OptionItem SNSDisableReactor;
public static OptionItem SNSDisableOxygen;
@@ -476,7 +487,6 @@ namespace AmongUsRevamped
.SetParent(SNSChatInGame);
SNSChatInGameFast = BooleanOptionItem.Create(70054, Translator.Get("snsChatInGameFast"), false, TabGroup.GamemodeSettings, false)
.SetParent(SNSChatInGame);
MisfiresToSuicide = IntegerOptionItem.Create(70055, Translator.Get("misfiresToSuicide"), new(1, 10, 1), 1, TabGroup.GamemodeSettings, false);
CrewAutoWinsGameAfter = IntegerOptionItem.Create(70056, Translator.Get("crewAutoWinsGameAfter"), new(60, 600, 10), 300, TabGroup.GamemodeSettings, false)
.SetValueFormat(OptionFormat.Seconds);
SNSDisableSabotage = BooleanOptionItem.Create(70057, Translator.Get("snsDisableSabotage"), true, TabGroup.GamemodeSettings, false)
@@ -569,9 +579,47 @@ namespace AmongUsRevamped
DisableMushroomMixup = BooleanOptionItem.Create(60462, Translator.Get("disableMushroomMixup"), false, TabGroup.ModSettings, false)
.SetParent(DisableSabotage)
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
DisableCloseDoor = BooleanOptionItem.Create(60566, Translator.Get("disableCloseDoor"), false, TabGroup.ModSettings, false)
DisableCloseDoor = BooleanOptionItem.Create(60463, Translator.Get("disableCloseDoor"), false, TabGroup.ModSettings, false)
.SetColor(Color.red);
TabGroupCustomizeSabotages = TextOptionItem.Create(60500, Translator.Get("tabGroupCustomizeSabotages"), TabGroup.ModSettings)
.SetColor(Color.blue);
CustomizeSabotages = BooleanOptionItem.Create(60501, Translator.Get("customizeSabotages"), false, TabGroup.ModSettings, false);
SabotageCooldown = IntegerOptionItem.Create(60502, Translator.Get("sabotageCooldown"), new(5, 60, 5), 30, TabGroup.ModSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(CustomizeSabotages);
SkeldReactorDuration = IntegerOptionItem.Create(60503, Translator.Get("skeldReactorDuration"), new(15, 60, 5), 30, TabGroup.ModSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(CustomizeSabotages);
SkeldO2Duration = IntegerOptionItem.Create(60504, Translator.Get("skeldO2Duration"), new(15, 60, 5), 30, TabGroup.ModSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(CustomizeSabotages);
MiraReactorDuration = IntegerOptionItem.Create(60505, Translator.Get("miraReactorDuration"), new(15, 90, 5), 45, TabGroup.ModSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(CustomizeSabotages);
MiraO2Duration = IntegerOptionItem.Create(60506, Translator.Get("miraO2Duration"), new(15, 90, 5), 45, TabGroup.ModSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(CustomizeSabotages);
PolusReactorDuration = IntegerOptionItem.Create(60507, Translator.Get("polusReactorDuration"), new(20, 90, 5), 60, TabGroup.ModSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(CustomizeSabotages);
AirshipReactorDuration = IntegerOptionItem.Create(60508, Translator.Get("airshipReactorDuration"), new(30, 90, 5), 90, TabGroup.ModSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(CustomizeSabotages);
FungleReactorDuration = IntegerOptionItem.Create(60509, Translator.Get("fungleReactorDuration"), new(15, 90, 5), 60, TabGroup.ModSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(CustomizeSabotages);
FungleMushroomMixupDuration = IntegerOptionItem.Create(60510, Translator.Get("fungleMushroomMixupDuration"), new(5, 30, 5), 10, TabGroup.ModSettings, false)
.SetValueFormat(OptionFormat.Seconds)
.SetParent(CustomizeSabotages);
TabGroupGameplayGeneral = TextOptionItem.Create(60564, Translator.Get("tabGroupGameplayGeneral"), TabGroup.ModSettings)
.SetColor(Color.blue);
ShieldFirstDeath = BooleanOptionItem.Create(60565, Translator.Get("shieldFirstDeath"), false, TabGroup.ModSettings, false);
+50 -1
View File
@@ -107,7 +107,42 @@ internal class EACR
return true;
}
break;
}
case 202: // SMC
try
{
AmongUsClient.Instance.KickPlayer(pc.Data.ClientId, true);
Logger.SendInGame($"{pc.Data.PlayerName} was banned for MMC CallId (cheating)");
Logger.Info($" {pc.Data.PlayerName} was banned for MMC CallId (cheating)", "EACR");
return true;
}
catch
{
}
break;
case 201:
try
{
var firstString = sr.ReadString();
var secondString = sr.ReadString();
sr.ReadInt32();
var flag = string.IsNullOrEmpty(firstString) && string.IsNullOrEmpty(secondString);
if (!flag)
{
AmongUsClient.Instance.KickPlayer(pc.Data.ClientId, true);
Logger.SendInGame($"{pc.Data.PlayerName} was banned for MMC chat CallId (cheating)");
Logger.Info($" {pc.Data.PlayerName} was banned for MMC chat CallId (cheating)", "EACR");
return true;
}
}
catch
{
}
break;
}
}
catch (Exception e)
{
@@ -222,4 +257,18 @@ internal class EACR
Logger.SendInGame($"{player.Data.PlayerName} was banned for invalidly completing a task (cheating)");
Logger.Info($" {player.Data.PlayerName} was banned for invalidly completing a task", "EACR");
}
public static void MurderCheat(PlayerControl player)
{
AmongUsClient.Instance.KickPlayer(player.Data.ClientId, true);
Logger.SendInGame($"{player.Data.PlayerName} was banned for invalidly murdering a player (cheating)");
Logger.Info($" {player.Data.PlayerName} was banned for invalidly murdering a player", "EACR");
}
public static void MeetingCheat(PlayerControl player)
{
AmongUsClient.Instance.KickPlayer(player.Data.ClientId, true);
Logger.SendInGame($"{player.Data.PlayerName} was banned for invalidly calling a meeting (cheating)");
Logger.Info($" {player.Data.PlayerName} was banned for invalidly calling a meeting", "EACR");
}
}
+19 -20
View File
@@ -129,6 +129,7 @@ public static class FixedUpdate
{
p.RpcProtectPlayer(p, p.cosmetics.ColorId);
}
p.Data.MarkDirty();
}
}
}
@@ -165,12 +166,6 @@ class FixedUpdateInGamePatch
private static float t;
private static GameObject settingsLabel;
public static bool CanUseKillButton(PlayerControl pc)
{
pc.Data.Role.CanUseKillButton = false;
return false;
}
public static void Postfix(PlayerControl __instance)
{
if (__instance == null || __instance.PlayerId == 255 || !AmongUsClient.Instance.AmHost) return;
@@ -208,13 +203,15 @@ class FixedUpdateInGamePatch
break;
case 1: // SnS
if (Utils.InGame) return;
if (Main.NormalOptions.KillCooldown != 2.5f)
if (!Utils.InGame)
{
Main.NormalOptions.KillCooldown = 2.5f;
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Shapeshifter, 3, 100);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Phantom, 0, 0);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Viper, 0, 0);
if (Main.NormalOptions.KillCooldown != 2.5f)
{
Main.NormalOptions.KillCooldown = 2.5f;
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Shapeshifter, 3, 100);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Phantom, 0, 0);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Viper, 0, 0);
}
}
break;
@@ -222,18 +219,20 @@ class FixedUpdateInGamePatch
break;
case 3: // PnS
if (Utils.InGame) return;
if (Main.NormalOptions.KillCooldown != 1f)
if (!Utils.InGame)
{
Main.NormalOptions.KillCooldown = 1f;
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Shapeshifter, 0, 0);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Phantom, 3, 100);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Viper, 0, 0);
if (Main.NormalOptions.KillCooldown != 1f)
{
Main.NormalOptions.KillCooldown = 1f;
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Shapeshifter, 0, 0);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Phantom, 3, 100);
Main.NormalOptions.roleOptions.SetRoleRate(RoleTypes.Viper, 0, 0);
}
}
break;
}
if (Utils.InGame && !Utils.IsMeeting && !ExileController.Instance)
if (Utils.InGame && !Utils.IsMeeting && !ExileController.Instance && Main.GameTimer > 6)
{
// 1 = Shift and Seek
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && Options.CrewAutoWinsGameAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool())
@@ -260,7 +259,7 @@ class FixedUpdateInGamePatch
}
}
// 3 = Poof and Seek
if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek)
if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek && !Options.NoGameEnd.GetBool())
{
if (Main.GameTimer > Options.PNSCrewAutoWinsGameAfter.GetInt())
{
+10 -7
View File
@@ -7,7 +7,8 @@ namespace AmongUsRevamped;
public static class OptionManager
{
private static OptionBackupData CachedOptions;
private static float OldKillCooldown;
public static void SyncGameOptions()
{
if (!AmongUsClient.Instance.AmHost) return;
@@ -29,17 +30,19 @@ public static class OptionManager
{
if (!AmongUsClient.Instance.AmHost) return;
CachedOptions = new OptionBackupData(GameOptionsManager.Instance.CurrentGameOptions);
OldKillCooldown = Main.NormalOptions.KillCooldown;
}
public static void RestoreOptions()
{
if (!AmongUsClient.Instance.AmHost || CachedOptions == null) return;
var restored = CachedOptions.Restore(GameOptionsManager.Instance.CurrentGameOptions);
GameOptionsManager.Instance.CurrentGameOptions = restored;
if (!AmongUsClient.Instance.AmHost) return;
if (Main.NormalOptions.KillCooldown != OldKillCooldown)
{
Main.NormalOptions.KillCooldown = OldKillCooldown;
Logger.Info("Force overrided Kill Cooldown back to original", "RestoreOptions");
}
SyncGameOptions();
}
}
+19 -2
View File
@@ -38,7 +38,6 @@ public static class Utils
public static bool IsFreePlay => AmongUsClient.Instance.NetworkMode == NetworkModes.FreePlay;
public static bool IsMeeting => InGame && (MeetingHud.Instance);
public static bool GamePastRoleSelection => Main.GameTimer > 10f;
public static bool HandlingGameEnd;
public static byte CustomGameOverReason;
public static bool CanCallMeetings;
@@ -201,6 +200,8 @@ public static class Utils
public static void ClearLeftoverData()
{
Logger.Info(" Cleared Leftover Data", "Utils");
RpcSetTasksPatch.GlobalTaskIds = null;
HandlingGameEnd = false;
OnGameJoinedPatch.AutoStartCheck = false;
@@ -217,7 +218,6 @@ public static class Utils
NormalGameEndChecker.ImpCheckComplete = false;
CreateOptionsPickerPatch.SetDleks2 = false;
CanCallMeetings = true;
PlayerControlSetRolePatch.FirstAssign = true;
PlayerControlCompleteTaskPatch.playerTasksCompleted.Clear();
PlayerControlCompleteTaskPatch.tasksPerPlayer.Clear();
@@ -227,6 +227,7 @@ public static class Utils
OnPlayerJoinedPatch.JoinNum = 0;
PlayerControlSetRolePatch.ProcessedPlayers.Clear();
PlayerControlSetRolePatch.Seekers.Clear();
PlayerControlSetRolePatch.FirstAssign = true;
PlayerControlSetRolePatch.manualSeekers.Clear();
@@ -760,4 +761,20 @@ public static class Utils
ModeVoteActive = false;
}, Options.ModeVoteDuration.GetInt(), "ModePoll");
}
// As of v2026.8.18, Innersloth bans the host for hacking if the start game button is pressed when any player is not Serialized (or something similar).
// CheckValidData serves as an emergency blockage to prevent this and stop host from being kicked.
public static bool CheckValidData()
{
if (!AmongUsClient.Instance.AmHost) return true;
foreach (var p in PlayerControl.AllPlayerControls)
{
if (p == null || !p.hasBeenSerialized)
{
return false;
}
}
return true;
}
}
+34 -4
View File
@@ -147,6 +147,24 @@ internal static class SendChatPatch
return false;
}
if (text == "/private")
{
__instance.freeChatField.textArea.Clear();
__instance.freeChatField.textArea.SetText(string.Empty);
if (Utils.InGame) return false;
AmongUsClient.Instance.ChangeGamePublic(false);
}
if (text == "/public")
{
__instance.freeChatField.textArea.Clear();
__instance.freeChatField.textArea.SetText(string.Empty);
if (Utils.InGame) return false;
AmongUsClient.Instance.ChangeGamePublic(true);
}
if (text.StartsWith("/vip "))
{
PlayerControl target = null;
@@ -525,7 +543,7 @@ internal static class SendChatPatch
if (text == "/0kc" || text == "/0killcooldown")
{
Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false);
Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, and can't kill after a game starts for 5 seconds", "", false);
return false;
}
@@ -559,7 +577,7 @@ internal static class SendChatPatch
case 0:
if (GameOptionsManager.Instance.CurrentGameOptions.GetFloat(FloatOptionNames.KillCooldown) == 0.01f)
{
Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false);
Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, and can't kill after a game starts for 5 seconds", "", false);
}
break;
@@ -831,6 +849,18 @@ public static class RPCHandlerPatch
}
}
if (text == "/private")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashStartAndEndGameCmd.GetValue() || Utils.InGame) return;
AmongUsClient.Instance.ChangeGamePublic(false);
}
if (text == "/public")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashStartAndEndGameCmd.GetValue() || Utils.InGame) return;
AmongUsClient.Instance.ChangeGamePublic(true);
}
if (text == "/s" || text == "/start")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashStartAndEndGameCmd.GetValue()) return;
@@ -957,7 +987,7 @@ public static class RPCHandlerPatch
if (text == "/0kc" || text == "/0killcooldown")
{
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
Utils.ModeratorChatCommand("0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false);
Utils.ModeratorChatCommand("0 Kill Cooldown:\n\nImpostors have no kill cooldown, and can't kill after a game starts for 5 seconds", "", false);
}
if (text == "/sns" || text == "/shiftandseek")
{
@@ -990,7 +1020,7 @@ public static class RPCHandlerPatch
case 0:
if (GameOptionsManager.Instance.CurrentGameOptions.GetFloat(FloatOptionNames.KillCooldown) == 0.01f)
{
Utils.ModeratorChatCommand("0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false);
Utils.ModeratorChatCommand("0 Kill Cooldown:\n\nImpostors have no kill cooldown, and can't kill after a game starts for 5 seconds", "", false);
}
break;
+1 -1
View File
@@ -49,7 +49,7 @@ internal static class DisableDevice
public static void FixedUpdate()
{
if (!AmongUsClient.Instance.AmHost || ShipStatus.Instance == null || !Utils.GamePastRoleSelection) return;
if (!AmongUsClient.Instance.AmHost || ShipStatus.Instance == null || !OnGameStartPatch.PastStartScreen) return;
frame = frame == 5 ? 0 : ++frame;
if (frame != 0) return;
+11 -10
View File
@@ -11,9 +11,9 @@ public static class EndGameManagerPatch
public static void Postfix(EndGameManager __instance)
{
Logger.Info(" -------- GAME ENDED --------", "EndGame");
Utils.ClearLeftoverData();
//OptionManager.RestoreOptions();
Utils.ClearLeftoverData();
OptionManager.RestoreOptions();
EndGameNavigation navigation = __instance.Navigation;
if (!AmongUsClient.Instance.AmHost || __instance == null || navigation == null || !Options.AutoRejoinLobby.GetBool()) return;
@@ -28,7 +28,7 @@ class NormalGameEndChecker
public static string LastWinReason = "";
public static List<PlayerControl> imps = new List<PlayerControl>();
public static string firstDeath;
public static string firstDeathString => firstDeath != null ? $"\n\nFirst death: {firstDeath}" : "";
public static string firstDeathString => firstDeath != "" ? $"\n\nFirst death: {firstDeath}" : "";
public static bool Prefix()
{
@@ -50,20 +50,21 @@ class NormalGameEndChecker
public static string customRoles { get; set; }
public static void CheckWinnerText(string Winner)
{
var impostorList = string.Join(", ", imps.Select(p => p.Data.PlayerName));
string impostorList = string.Join(", ", imps.Select(p => p.Data.PlayerName));
string impostorString = impostorList != "" ? $"\n\n Impostors: {impostorList}" : "";
if (!canUpdateWinnerText) return;
if (Winner == "SnSTimer")
{
LastWinReason = $"Crewmates Win! (Survived {Options.CrewAutoWinsGameAfter.GetInt()}s)\n\n Impostors: " + impostorList + firstDeathString;
LastWinReason = $"Crewmates Win! (Survived {Options.CrewAutoWinsGameAfter.GetInt()}s)" + impostorString + firstDeathString;
canUpdateWinnerText = false;
return;
}
if (Winner == "PnSTimer")
{
LastWinReason = $"Crewmates Win! (Survived {Options.CrewAutoWinsGameAfter.GetInt()}s)\n\n Impostors: " + impostorList + firstDeathString;
LastWinReason = $"Crewmates Win! (Survived {Options.CrewAutoWinsGameAfter.GetInt()}s)" + impostorString + firstDeathString;
canUpdateWinnerText = false;
return;
}
@@ -77,22 +78,22 @@ class NormalGameEndChecker
if ((Options.Gamemode.GetValue() != 2 && Utils.AliveImpostors == 0) || Winner == "Crewmate")
{
LastWinReason = "Crewmates Win!\n\nImpostors: " + impostorList + firstDeathString;
LastWinReason = "Crewmates Win!" + impostorString + firstDeathString;
canUpdateWinnerText = false;
}
else if ((Options.Gamemode.GetValue() != 2 && Utils.AliveImpostors >= Utils.AliveCrewmates) || Winner == "Impostor")
{
LastWinReason = "Impostors Win!\n\nImpostors: " + impostorList + firstDeathString;
LastWinReason = "Impostors Win!" + impostorString + firstDeathString;
canUpdateWinnerText = false;
}
else if (GameData.Instance != null && GameData.Instance.TotalTasks > 0 && GameData.Instance.CompletedTasks >= GameData.Instance.TotalTasks || Winner == "CrewmateTasks")
{
LastWinReason = $"Crewmates Win! ({Options.TaskPercentNeededToWin.GetInt()}% tasks completed)\n\nImpostors: " + impostorList + firstDeathString;
LastWinReason = $"Crewmates Win! ({Options.TaskPercentNeededToWin.GetInt()}% tasks completed)" + impostorString + firstDeathString;
canUpdateWinnerText = false;
}
else if (Options.Gamemode.GetValue() < 1 || Winner == "ImpostorSabotage")
{
LastWinReason = "Impostors Win! (Sabotage)\n\n Impostors: " + impostorList + firstDeathString;
LastWinReason = "Impostors Win! (Sabotage)" + impostorString + firstDeathString;
}
}
}
+21
View File
@@ -20,6 +20,27 @@ class ExileControllerWrapUpPatch
public static void AfterExile(NetworkedPlayerInfo ejectedPlayer)
{
if (!AmongUsClient.Instance.AmHost) return;
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3))
{
if (Main.GM.Value && !Utils.IsDead)
{
Logger.Info($" Game Master Successful", "StartGame");
PlayerControl.LocalPlayer.Exiled();
PlayerControl.LocalPlayer.RpcSetRole(RoleTypes.CrewmateGhost);
}
}
if (Options.Gamemode.GetValue() == 1)
{
foreach (var p in PlayerControl.AllPlayerControls)
{
if (p.Data == null || p.Data.IsDead || p.Data.RoleType == RoleTypes.Shapeshifter) continue;
p.RpcProtectPlayer(p, p.cosmetics.ColorId);
p.Data.MarkDirty();
}
}
if (ejectedPlayer == null) return;
PlayerControl pc = null;
+10
View File
@@ -20,12 +20,22 @@ public static class GameStartManagerUpdatePatch
__instance.MinPlayers = 1;
if (!Utils.CheckValidData())
{
__instance.StartButton.gameObject.SetActive(false);
}
else if (__instance.startState != GameStartManager.StartingStates.Countdown)
{
__instance.StartButton.gameObject.SetActive(true);
}
if (Main.AutoStart.Value && OnGameJoinedPatch.AutoStartCheck && GameStartManager.InstanceExists && __instance.startState != GameStartManager.StartingStates.Countdown && GameData.Instance?.PlayerCount >= Options.PlayerAutoStart.GetInt())
{
__instance.startState = GameStartManager.StartingStates.Countdown;
__instance.countDownTimer = Options.AutoStartTimer.GetFloat();
__instance.StartButton.gameObject.SetActive(false);
Autostarting = true;
return;
}
if (__instance.startState == GameStartManager.StartingStates.Countdown)
+12 -4
View File
@@ -15,7 +15,7 @@ internal static class CoShowIntroPatch
if (!AmongUsClient.Instance.AmHost) return;
//OptionManager.CacheOptions();
OptionManager.CacheOptions();
foreach (var p in PlayerControl.AllPlayerControls)
{
@@ -39,6 +39,7 @@ internal static class CoShowIntroPatch
OptionManager.SyncGameOptions();
p.RpcProtectPlayer(p, p.cosmetics.ColorId);
p.Data.MarkDirty();
Logger.Info($" {p.Data.PlayerName} has been granted a shield for {Options.ShieldFirstDeathDuration.GetInt()}s", "RoleInfo");
}
@@ -65,9 +66,16 @@ internal static class CoShowIntroPatch
{
if (Main.NormalOptions.roleOptions.TryGetRoleOptions<GuardianAngelRoleOptionsV11>(RoleTypes.GuardianAngel, out var GuardianAngelOptions))
{
GuardianAngelOptions.ProtectionDurationSeconds = 60f;
GuardianAngelOptions.ProtectionDurationSeconds = 254f;
}
OptionManager.SyncGameOptions();
foreach (var p in PlayerControl.AllPlayerControls)
{
if (p.Data == null || p.Data.IsDead || p.Data.RoleType == RoleTypes.Shapeshifter) continue;
p.RpcProtectPlayer(p, p.cosmetics.ColorId);
p.Data.MarkDirty();
}
if (Options.SNSChatInGameExtend.GetBool())
{
@@ -84,7 +92,7 @@ internal static class CoShowIntroPatch
if ((GameOptionsManager.Instance.CurrentGameOptions.GetFloat(FloatOptionNames.KillCooldown) == 0.01f))
{
Main.NormalOptions.KillCooldown = 8f;
Main.NormalOptions.KillCooldown = 5f;
OptionManager.SyncGameOptions();
_ = new LateTask(() =>
@@ -98,7 +106,7 @@ internal static class CoShowIntroPatch
{
if (Options.PNSChatInGame.GetBool())
{
Main.NormalOptions.KillCooldown = 8f;
Main.NormalOptions.KillCooldown = 5f;
OptionManager.SyncGameOptions();
_ = new LateTask(() =>
+3 -2
View File
@@ -14,7 +14,7 @@ internal static class OnGameJoinedPatch
public static bool AutoStartCheck;
public static void Postfix()
{
Logger.Info(" -------- JOINED GAME --------", "OnGameJoined");
Logger.Info(" -------- GAME JOINED --------", "OnGameJoined");
if (!AmongUsClient.Instance.AmHost) return;
@@ -100,7 +100,6 @@ class OnPlayerJoinedPatch
return false;
}
static void Postfix([HarmonyArgument(0)] ClientData Client)
{
Logger.Info($" {Client.PlayerName} / {Client.FriendCode} / {Client.PlatformData.Platform}", "Joined The Game");
@@ -232,12 +231,14 @@ public static class ShowNotificationPatch
case DisconnectReasons.Sanctions:
case DisconnectReasons.Hacking:
case DisconnectReasons.Banned:
Logger.Info($" {playerName} was banned from the game. ({reason})", "ShowNotificationPatch");
Logger.SendInGame($" {playerName} was banned from the game. ({reason})");
return false;
case DisconnectReasons.DuplicateConnectionDetected:
case DisconnectReasons.ClientTimeout:
case DisconnectReasons.Kicked:
Logger.Info($" {playerName} was kicked from the game. ({reason})", "ShowNotificationPatch");
Logger.SendInGame($" {playerName} was kicked from the game. ({reason})");
return false;
+18 -17
View File
@@ -33,7 +33,7 @@ internal class CoStartGamePatch
class PlayerControlSetRolePatch
{
public static bool FirstAssign;
private static readonly HashSet<byte> ProcessedPlayers = new();
public static readonly HashSet<byte> ProcessedPlayers = new();
public static HashSet<byte> Seekers = new();
public static HashSet<byte> manualSeekers = new();
private static readonly System.Random rand = new System.Random();
@@ -101,16 +101,10 @@ class PlayerControlSetRolePatch
else roleType = RoleTypes.Crewmate;
}
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek)
{
if (roleType == RoleTypes.Impostor || roleType == RoleTypes.Phantom || roleType == RoleTypes.Viper) roleType = RoleTypes.Shapeshifter;
}
if (ProcessedPlayers.Count >= PlayerControl.AllPlayerControls.Count)
{
Seekers.Clear();
ProcessedPlayers.Clear();
FirstAssign = false;
Logger.Info(" PCSRP successful", "RoleManaging");
}
@@ -136,19 +130,21 @@ internal static class OnGameStartPatch
if (MeetingHud.Instance != null) MeetingHud.Instance.RpcClose();
}
if (AmongUsClient.Instance.AmHost && Main.GM.Value)
{
Logger.Info($" Game Master Successful", "StartGame");
PlayerControl.LocalPlayer.Exiled();
PlayerControl.LocalPlayer.RpcSetRole(RoleTypes.CrewmateGhost);
}
foreach (var p in PlayerControl.AllPlayerControls)
{
Utils.StoredRoleText[p.PlayerId] = Utils.GetRoleText(p);
}
PastStartScreen = true;
if (AmongUsClient.Instance.AmHost && Main.GM.Value)
{
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3)) return;
Logger.Info($" Game Master Successful", "StartGame");
PlayerControl.LocalPlayer.Exiled();
PlayerControl.LocalPlayer.RpcSetRole(RoleTypes.CrewmateGhost);
}
}
// All Patches below are for the speeded up Chat In Game.
@@ -176,6 +172,7 @@ internal static class OnGameStartPatch
public static void Postfix(IntroCutscene __instance, ref Il2CppSystem.Collections.IEnumerator __result)
{
if (!AmongUsClient.Instance.AmHost) return;
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3))
{
__result = SkipIntro(__instance, __result).WrapToIl2Cpp();
@@ -203,6 +200,7 @@ internal static class OnGameStartPatch
public static bool Prefix(ref NamePlateViewData __result)
{
if (!AmongUsClient.Instance.AmHost) return true;
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3))
{
if (MeetingHud.Instance == null) return true;
@@ -227,8 +225,11 @@ internal static class OnGameStartPatch
{
if (!AmongUsClient.Instance.AmHost) return;
if (meetingNameplate != null) Object.Destroy(meetingNameplate);
meetingNameplate = null;
if ((Options.SNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 1) || (Options.PNSChatInGameFast.GetBool() && Options.Gamemode.GetValue() == 3))
{
if (meetingNameplate != null) Object.Destroy(meetingNameplate);
meetingNameplate = null;
}
}
}
+28 -10
View File
@@ -23,6 +23,12 @@ class ReportDeadBodyPatch
return false;
}
if (!OnGameStartPatch.PastStartScreen && __instance != PlayerControl.LocalPlayer)
{
EACR.MeetingCheat(__instance);
return false;
}
// target == null means meeting
if (Options.Gamemode.GetValue() == 1 || Options.Gamemode.GetValue() == 2 || Options.Gamemode.GetValue() == 3)
@@ -62,20 +68,32 @@ internal static class MurderPlayerPatch
if (resultFlags.HasFlag(MurderResultFlags.Succeeded))
{
killCount[playerId]++;
Logger.Info($" {__instance.Data.PlayerName} killed {target.Data.PlayerName}", "MurderPlayer");
if (string.IsNullOrEmpty(NormalGameEndChecker.firstDeath))
{
NormalGameEndChecker.firstDeath = target.Data.PlayerName;
Utils.HasMurdered = true;
}
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek)
{
if (target.Data.PlayerId == __instance.shapeshiftTargetPlayerId) return;
Logger.Info($" {__instance.Data.PlayerName} directly killed {target.Data.PlayerName} in SnS, forcing suicide. (Are they hacking?)", "MurderPlayer");
__instance.RpcSetRole(RoleTypes.ImpostorGhost);
}
else
{
killCount[playerId]++;
Logger.Info($" {__instance.Data.PlayerName} killed {target.Data.PlayerName}", "MurderPlayer");
if (string.IsNullOrEmpty(NormalGameEndChecker.firstDeath))
{
NormalGameEndChecker.firstDeath = target.Data.PlayerName;
Utils.HasMurdered = true;
}
}
if (target.Data.RoleType == RoleTypes.Impostor ||
target.Data.RoleType == RoleTypes.Shapeshifter ||
target.Data.RoleType == RoleTypes.Phantom ||
target.Data.RoleType == RoleTypes.Viper ||
target.Data.IsDead)
{
if (__instance != PlayerControl.LocalPlayer) return;
EACR.MurderCheat(__instance);
}
}
if ((target == PlayerControl.LocalPlayer || PlayerControl.LocalPlayer.Data.IsDead) && !Main.DisableInfoWhenDead.Value && resultFlags.HasFlag(MurderResultFlags.Succeeded))
@@ -94,7 +112,7 @@ internal static class MurderPlayerPatch
}
//1 = Shift and Seek
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek)
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && resultFlags.HasFlag(MurderResultFlags.FailedProtected))
{
if (target.Data.PlayerId == __instance.shapeshiftTargetPlayerId)
{
@@ -197,7 +215,7 @@ class PlayerControlCompleteTaskPatch
public static void CalculateTaskWin()
{
if (!Utils.GamePastRoleSelection || Utils.isHideNSeek || Options.NoGameEnd.GetBool() || !OnGameStartPatch.PastStartScreen) return;
if (!OnGameStartPatch.PastStartScreen || Utils.isHideNSeek || Options.NoGameEnd.GetBool() || !OnGameStartPatch.PastStartScreen) return;
//Logger.Info($" Checking if {GameData.Instance.CompletedTasks} - {ignoredCompletedTasks} >= ({GameData.Instance.TotalTasks} - {ignoredTasks}) * 0.01 * {Options.TaskPercentNeededToWin.GetInt()}", "TaskPatch");
+159
View File
@@ -70,6 +70,14 @@ public static class SabotageSystemTypeRepairDamagePatch
}
else return true;
}
public static void Postfix(SabotageSystemType __instance)
{
if (!Options.CustomizeSabotages.GetBool() || !AmongUsClient.Instance.AmHost) return;
__instance.Timer = Options.SabotageCooldown.GetInt();
__instance.IsDirty = true;
}
}
[HarmonyPatch(typeof(ShipStatus), nameof(ShipStatus.CloseDoorsOfType))]
@@ -113,4 +121,155 @@ public static class MessageReaderUpdateSystemPatch
}
else return true;
}
}
[HarmonyPatch(typeof(ReactorSystemType))]
public static class ReactorSystemTypePatch
{
private static bool SetDuration = true;
[HarmonyPatch(nameof(ReactorSystemType.Deteriorate))]
[HarmonyPrefix]
public static void Deteriorate_Prefix(ReactorSystemType __instance)
{
if (!AmongUsClient.Instance.AmHost || Main.NormalOptions.MapId == 4 || !Options.CustomizeSabotages.GetBool()) return;
if (!__instance.IsActive || !ShipStatus.Instance || !SetDuration)
{
if (!SetDuration && !__instance.IsActive) SetDuration = true;
return;
}
Logger.Info($" {ShipStatus.Instance.Type} - {SetDuration}", "ReactorSystemTypePatch");
SetDuration = false;
switch (ShipStatus.Instance.Type)
{
case ShipStatus.MapType.Ship:
__instance.Countdown = Options.SkeldReactorDuration.GetFloat();
return;
case ShipStatus.MapType.Hq:
__instance.Countdown = Options.MiraReactorDuration.GetFloat();
return;
case ShipStatus.MapType.Pb:
__instance.Countdown = Options.PolusReactorDuration.GetFloat();
return;
case ShipStatus.MapType.Fungle:
__instance.Countdown = Options.FungleReactorDuration.GetFloat();
return;
default:
return;
}
}
[HarmonyPatch(nameof(ReactorSystemType.Deteriorate))]
[HarmonyPostfix]
public static void Deteriorate_Postfix(ReactorSystemType __instance)
{
if (__instance.IsActive && __instance.Countdown <= 0 && !Utils.HandlingGameEnd)
{
Utils.ContinueEndGame((byte)GameOverReason.ImpostorsBySabotage);
NormalGameEndChecker.CheckWinnerText("ImpostorSabotage");
}
}
}
[HarmonyPatch(typeof(HeliSabotageSystem))]
public static class HeliSabotageSystemPatch
{
private static bool SetDuration = true;
[HarmonyPatch(nameof(HeliSabotageSystem.Deteriorate))]
[HarmonyPrefix]
public static void Deteriorate_Prefix(HeliSabotageSystem __instance)
{
if (!AmongUsClient.Instance.AmHost || Main.NormalOptions.MapId != 4 || !Options.CustomizeSabotages.GetBool()) return;
if (!__instance.IsActive || !ShipStatus.Instance || !SetDuration)
{
if (!SetDuration && !__instance.IsActive) SetDuration = true;
return;
}
Logger.Info($" {ShipStatus.Instance.Type} - {SetDuration}", "HeliSabotageSystemPatch");
SetDuration = false;
__instance.Countdown = Options.AirshipReactorDuration.GetFloat();
}
[HarmonyPatch(nameof(HeliSabotageSystem.Deteriorate))]
[HarmonyPostfix]
public static void Deteriorate_Postfix(HeliSabotageSystem __instance)
{
if (__instance.IsActive && __instance.Countdown <= 0 && !Utils.HandlingGameEnd)
{
Utils.ContinueEndGame((byte)GameOverReason.ImpostorsBySabotage);
NormalGameEndChecker.CheckWinnerText("ImpostorSabotage");
}
}
}
[HarmonyPatch(typeof(LifeSuppSystemType))]
public static class LifeSuppSystemTypePatch
{
private static bool SetDuration = true;
[HarmonyPatch(nameof(LifeSuppSystemType.Deteriorate))]
[HarmonyPrefix]
public static void Deteriorate_Prefix(LifeSuppSystemType __instance)
{
if (!AmongUsClient.Instance.AmHost || Main.NormalOptions.MapId == 2 || Main.NormalOptions.MapId == 4 || Main.NormalOptions.MapId == 5 || !Options.CustomizeSabotages.GetBool()) return;
if (!__instance.IsActive || !ShipStatus.Instance || !SetDuration)
{
if (!SetDuration && !__instance.IsActive) SetDuration = true;
return;
}
Logger.Info($" {ShipStatus.Instance.Type} - {SetDuration}", "LifeSuppSystemType");
SetDuration = false;
switch (ShipStatus.Instance.Type)
{
case ShipStatus.MapType.Ship:
__instance.Countdown = Options.SkeldO2Duration.GetFloat();
return;
case ShipStatus.MapType.Hq:
__instance.Countdown = Options.MiraO2Duration.GetFloat();
return;
default:
return;
}
}
[HarmonyPatch(nameof(LifeSuppSystemType.Deteriorate))]
[HarmonyPostfix]
public static void Deteriorate_Postfix(LifeSuppSystemType __instance)
{
if (__instance.IsActive && __instance.Countdown <= 0 && !Utils.HandlingGameEnd)
{
Utils.ContinueEndGame((byte)GameOverReason.ImpostorsBySabotage);
NormalGameEndChecker.CheckWinnerText("ImpostorSabotage");
}
}
}
[HarmonyPatch(typeof(MushroomMixupSabotageSystem), nameof(MushroomMixupSabotageSystem.Deteriorate))]
public static class MushroomMixupSabotageSystemPatch
{
private static bool SetDuration = true;
public static void Prefix(MushroomMixupSabotageSystem __instance, ref bool __state)
{
__state = __instance.IsActive;
if (!AmongUsClient.Instance.AmHost || Main.NormalOptions.MapId != 5 || !Options.CustomizeSabotages.GetBool()) return;
if (!__instance.IsActive || !ShipStatus.Instance || !SetDuration)
{
if (!SetDuration && !__instance.IsActive) SetDuration = true;
return;
}
Logger.Info($" {ShipStatus.Instance.Type} - {SetDuration}", "MushroomMixupSabotageSystem");
SetDuration = false;
__instance.currentSecondsUntilHeal = Options.FungleMushroomMixupDuration.GetFloat();
}
}
+22 -19
View File
@@ -1,24 +1,23 @@
# Welcome to Among Us Revamped!
<h1 align="center">Welcome to Among Us Revamped!</h1>
<br>
</p>
<p align="center">
<a href="https://discord.gg/83Zhzhyhya" target="_blank">
<img src="https://img.shields.io/badge/Discord%20-%231DA1F2.svg?&style=for-the-badge&logo=discord&logoColor=white&color=5662f6"/>
</a>
<a href="https://ko-fi.com/apemv">
<img src="https://img.shields.io/badge/Donate%20on-Ko--fi-ff5f5f?style=for-the-badge&logo=ko-fi&logoColor=white">
</a>
</p>
<center>
<a href="https://discord.gg/83Zhzhyhya" target="_blank"><img src="https://img.shields.io/badge/Discord%20-%231DA1F2.svg?&style=for-the-badge&logo=discord&logoColor=white&color=5662f6"/></a>
<a href="https://github.com/apemv/AmongUsRevamped/releases/latest" target="_blank"><img src="https://img.shields.io/badge/Latest Version%20-%231DA1F2.svg?&style=for-the-badge&logo=github&logoColor=white&color=181717"/></a>
</center>
<a href="../../releases">
<img src="https://img.shields.io/github/downloads/ApeMV/AmongUsRevamped/total?style=for-the-badge&color=red">
</a>
<a href="../../releases/latest">
<img src="https://img.shields.io/github/downloads/ApeMV/AmongUsRevamped/latest/total?style=for-the-badge">
</a>
<p align="center">
<a href="https://github.com/ApeMV/AmongUsRevamped/releases">
<img src="https://img.shields.io/github/downloads/ApeMV/AmongUsRevamped/total?style=for-the-badge&color=red"/>
</a>
<a href="https://github.com/ApeMV/AmongUsRevamped/releases/latest">
<img src="https://img.shields.io/github/downloads/ApeMV/AmongUsRevamped/latest/total?style=for-the-badge"/>
</a>
</p>
# 💡 How To Install:
@@ -37,7 +36,7 @@
<img src="https://github.com/astra1dev/AUnlocker/assets/90265231/14226f03-a003-4efc-b27b-6df53fb394d6" width=410 height=240>****
‎
# 🎮 Features (v2.0.0):
# 🎮 Features (v2.0.4):
## <b>♠️ Client Side settings:</b>
- Toggle Game Master (Spectator)
@@ -64,6 +63,7 @@
- Automatically Send Map Votes
- Enable (configurable) Welcome Messages from Templates.txt
## <b>🔧 Gameplay Settings:</b>
- Change sabotage cooldown and durations
- Dead impostors can sabotage
- Disable critical sabotages (invividual)
- Disable door sabotages
@@ -85,8 +85,9 @@
- Detect invalid sabotages
- Detect malformed RPC's
- Detect invalid venting
- Detect Invalid animations
- Detect Invalid task completions
- Detect invalid animations
- Detect invalid task completions
- Detect invalid kills
- Detect immortality cheats
- Block attempted votekicks
- These are all enabled by default
@@ -142,6 +143,8 @@
| /mapvote | Starts a vote for the map. Default maps only |
| /allmapvote | Starts a vote for the map. Includes Eht Dleks |
| /gmvote | Starts a vote for the gamemode |
| /private | Sets lobby to private |
| /public | Sets lobby to public |
‎
**Credit to these mods and their developers for their code:**
+17 -2
View File
@@ -69,7 +69,7 @@
"slashKickCmd": "Who Can Use /kick & /ckick",
"slashBanCmd": "Who Can Use /ban & /cban",
"slashEndMeetingCmd": "Who Can Use /endmeeting",
"slashStartAndEndGameCmd": "Who Can Use /startgame & /endgame",
"slashStartAndEndGameCmd": "Who Can Use /start & /endgame",
"tabGroupCrewmate": "Crewmate Roles",
"tabGroupNeutral": "Neutral Roles",
@@ -98,12 +98,25 @@
"snsDisableHeli": "Disable Crash Course Sabotage",
"snsDisableMushroomMixup": "Disable Mushroom Mixup Sabotage",
"snsDisableCloseDoor": "Disable SnS Door Sabotages",
"tabGroupCustomizeSabotages": "Customize Sabotages",
"customizeSabotages": "Enable Sabotage Customizations",
"sabotageCooldown": "Critical Sabotage Cooldown",
"skeldReactorDuration": "Skeld Reactor Duration",
"skeldO2Duration": "Skeld O2 Duration",
"miraReactorDuration": "Mira Reactor Duration",
"miraO2Duration": "Mira O2 Duration",
"polusReactorDuration": "Polus Reactor Duration",
"airshipReactorDuration": "Airship Reactor Duration",
"fungleReactorDuration": "Fungle Reactor Duration",
"fungleMushroomMixupDuration": "Fungle Mixup Duration",
"tabGroupSpeedrun": "Speedrun",
"speedrunSettingsOverride": "Auto Update Settings",
"gameAutoEndsAfter": "Game automatically ends after",
"engineerMode": "Everyone Is Engineer",
"tabGroupSabotages": "Sabotages",
"tabGroupSabotages": "Disable Sabotages",
"deadImpostorsCanSabotage": "Dead Impostors Can Sabotage",
"disableSabotage": "Disable Critical Sabotages",
"disableReactor": "Disable Reactor Sabotage",
@@ -298,6 +311,8 @@
"mapVoteDesc": "Starts a vote between the 5 core maps.",
"allMapVoteDesc": "Starts a vote between all 6 maps, including Eht Dleks.",
"modeVoteDesc": "Starts a vote between all gamemodes.",
"privateDesc": "Changes lobby visibility to private.",
"publicDesc": "Changes lobby visibility to public.",
"banWordKick": "{0} was kicked because they sent a word in DeniedWords.txt {1} time(s)",
"startWordKick": "{0} was kicked because they sent a word in StartWords.txt {1} time(s)",
+13
View File
@@ -73,6 +73,19 @@
"snsDisableHeli": "Disabilita Sabotaggio Collisione",
"snsDisableMushroomMixup": "Disabilita Sabotaggio Caos dei Funghi",
"snsDisableCloseDoor": "Disabilita Sabotaggio Porte in Modalità Clone",
"tabGroupCustomizeSabotages": "Customize Sabotages",
"customizeSabotages": "Enable Sabotage Customizations",
"sabotageCooldown": "Critical Sabotage Cooldown",
"skeldReactorDuration": "Skeld Reactor Duration",
"skeldO2Duration": "Skeld O2 Duration",
"miraReactorDuration": "Mira Reactor Duration",
"miraO2Duration": "Mira O2 Duration",
"polusReactorDuration": "Polus Reactor Duration",
"airshipReactorDuration": "Airship Reactor Duration",
"fungleReactorDuration": "Fungle Reactor Duration",
"fungleMushroomMixupDuration": "Fungle Mixup Duration",
"tabGroupSpeedrun": "Speedrun",
"speedrunSettingsOverride": "Aggiorna Automaticamente Impostazioni",
"gameAutoEndsAfter": "La partita finisce automaticamente dopo",
+25 -1
View File
@@ -76,6 +76,19 @@
"snsDisableHeli": "墜落危険サボタージュを無効化",
"snsDisableMushroomMixup": "キノコシャッフルサボタージュを無効化",
"snsDisableCloseDoor": "SnSドア閉鎖を無効化",
"tabGroupCustomizeSabotages": "Customize Sabotages",
"customizeSabotages": "Enable Sabotage Customizations",
"sabotageCooldown": "Critical Sabotage Cooldown",
"skeldReactorDuration": "Skeld Reactor Duration",
"skeldO2Duration": "Skeld O2 Duration",
"miraReactorDuration": "Mira Reactor Duration",
"miraO2Duration": "Mira O2 Duration",
"polusReactorDuration": "Polus Reactor Duration",
"airshipReactorDuration": "Airship Reactor Duration",
"fungleReactorDuration": "Fungle Reactor Duration",
"fungleMushroomMixupDuration": "Fungle Mixup Duration",
"tabGroupSpeedrun": "スピードラン",
"speedrunSettingsOverride": "設定を自動更新",
"gameAutoEndsAfter": "ゲームの自動終了時間",
@@ -341,5 +354,16 @@
"pnsDisableCloseDoor": "PnSのドア閉鎖サボタージュを無効にする",
"tabGroupPNS": "Poof and Seek",
"badMoveTimeToSuicide": "幻象師が明らかに移動した後、自殺するまでの時間",
"snsImpostorCanVent": "インポスターはベントを使用できる"
"snsImpostorCanVent": "インポスターはベントを使用できる",
"modeVoteDuration": "ゲームモード投票時間",
"snsChatInGameExtendTwo": "ゲーム開始後に拡張情報を送信",
"snsChatInGameFast": "高速会議(実験的+)",
"shieldFirstDeath": "最初に死亡したプレイヤーをシールドで保護",
"shieldFirstDeathDuration": "シールド持続時間",
"snsTwoDesc": "Shift and Seekの拡張説明を送信。",
"modeVoteDesc": "すべてのゲームモードから投票を開始します。",
"automaticModePoll": "再参加後に自動で /gmvote を実行",
"privateDesc": "Changes lobby visibility to private.",
"publicDesc": "Changes lobby visibility to public."
}
+26 -2
View File
@@ -73,6 +73,19 @@
"snsDisableHeli": "Выключить Сабботаж Столкновения",
"snsDisableMushroomMixup": "Выключить Сабботаж Грибного Переполоха",
"snsDisableCloseDoor": "Выключить Сабботаж Дверей в Режиме Клона",
"tabGroupCustomizeSabotages": "Customize Sabotages",
"customizeSabotages": "Enable Sabotage Customizations",
"sabotageCooldown": "Critical Sabotage Cooldown",
"skeldReactorDuration": "Skeld Reactor Duration",
"skeldO2Duration": "Skeld O2 Duration",
"miraReactorDuration": "Mira Reactor Duration",
"miraO2Duration": "Mira O2 Duration",
"polusReactorDuration": "Polus Reactor Duration",
"airshipReactorDuration": "Airship Reactor Duration",
"fungleReactorDuration": "Fungle Reactor Duration",
"fungleMushroomMixupDuration": "Fungle Mixup Duration",
"tabGroupSpeedrun": "Спидран",
"speedrunSettingsOverride": "Автоматически Обновлять Настройки",
"gameAutoEndsAfter": "Игра автоматически заканчивается после",
@@ -341,6 +354,17 @@
"pnsDisableCloseDoor": "Выключить Саботажи Дверей В Режиме Фантомные Прятки",
"tabGroupPNS": "Фантомные Прятки",
"badMoveTimeToSuicide": "Файнтомы Самоубиваются После Видимого Движения После",
"snsImpostorCanVent": "Предатели могут уходить в люк",
"pnsDesc": "Отправляет информацию о Режиме Фантомных Прятках."
"snsImpostorCanVent": "Предатели Могут Уходить в Люк",
"pnsDesc": "Отправляет Информацию о Режиме Фантомных Прятках.",
"modeVoteDuration": "Врямя Голосования За Режим",
"snsChatInGameExtendTwo": "Отправить увеличенную инфо после начала игры",
"snsChatInGameFast": "Быстрые Собрания (экспериментальное+)",
"shieldFirstDeath": "Защищать Игрока Который Умер Первым",
"shieldFirstDeathDuration": "Длительность Щита",
"snsTwoDesc": "Отправить Увеличенное Описание Клона.",
"modeVoteDesc": "Начать Голосование между всеми режимами.",
"automaticModePoll": "Автоматический /gmvote После Перезахода",
"privateDesc": "Changes lobby visibility to private.",
"publicDesc": "Changes lobby visibility to public."
}
+29 -5
View File
@@ -76,6 +76,19 @@
"snsDisableHeli": "禁用坠机危机破坏",
"snsDisableMushroomMixup": "禁用迷幻蘑菇破坏",
"snsDisableCloseDoor": "禁用 SnS 关门破坏",
"tabGroupCustomizeSabotages": "Customize Sabotages",
"customizeSabotages": "Enable Sabotage Customizations",
"sabotageCooldown": "Critical Sabotage Cooldown",
"skeldReactorDuration": "Skeld Reactor Duration",
"skeldO2Duration": "Skeld O2 Duration",
"miraReactorDuration": "Mira Reactor Duration",
"miraO2Duration": "Mira O2 Duration",
"polusReactorDuration": "Polus Reactor Duration",
"airshipReactorDuration": "Airship Reactor Duration",
"fungleReactorDuration": "Fungle Reactor Duration",
"fungleMushroomMixupDuration": "Fungle Mixup Duration",
"tabGroupSpeedrun": "速通模式 (Speedrun)",
"speedrunSettingsOverride": "自动更新设置",
"gameAutoEndsAfter": "游戏在此时间后自动结束",
@@ -323,10 +336,21 @@
"automaticMapPoll": "重新加入后自发起起 /mapvote",
"automaticAllMapPoll": "重新加入后自动发起 /allmapvote",
"timeBeforeMapPoll": "投票开始前等待時間",
"pnsDesc": "发送 Poof and Seek 幻象与躲藏 游戏模式说明。",
"pnsDisableSabotage": "禁用 PnS 紧急破坏。",
"pnsDisableCloseDoor": "禁用 PnS 关门破坏。",
"tabGroupPNS": "Poof and Seek",
"badMoveTimeToSuicide": "幻象师在明显移动后自杀的时间。",
"snsImpostorCanVent": "内鬼可以使用通风管。",
"modeVoteDuration": "游戏模式投票时长",
"snsChatInGameExtendTwo": "游戏开始后发送扩展信息",
"snsChatInGameFast": "快速会议(实验性+)",
"shieldFirstDeath": "护盾保护第一个死亡的玩家",
"shieldFirstDeathDuration": "护盾持续时间",
"snsTwoDesc": "发送 Shift and Seek 扩展说明。",
"modeVoteDesc": "在所有游戏模式之间发起投票。",
"automaticModePoll": "重新加入后自动执行 /gmvote",
"pnsDisableSabotage": "Disable PnS Critical Sabotages",
"pnsDisableCloseDoor": "Disable PnS Door Sabotages",
"tabGroupPNS": "Poof and Seek",
"badMoveTimeToSuicide": "Phantom Suicides After Visibly Moving For",
"snsImpostorCanVent": "Impostors can vent"
"privateDesc": "Changes lobby visibility to private.",
"publicDesc": "Changes lobby visibility to public."
}
+28 -5
View File
@@ -94,6 +94,19 @@
"snsDisableHeli": "Desactivar sabotaje de Crash Course",
"snsDisableMushroomMixup": "Desactivar sabotaje de mezcla de hongos",
"snsDisableCloseDoor": "Desactivar sabotajes de puertas de SnS",
"tabGroupCustomizeSabotages": "Customize Sabotages",
"customizeSabotages": "Enable Sabotage Customizations",
"sabotageCooldown": "Critical Sabotage Cooldown",
"skeldReactorDuration": "Skeld Reactor Duration",
"skeldO2Duration": "Skeld O2 Duration",
"miraReactorDuration": "Mira Reactor Duration",
"miraO2Duration": "Mira O2 Duration",
"polusReactorDuration": "Polus Reactor Duration",
"airshipReactorDuration": "Airship Reactor Duration",
"fungleReactorDuration": "Fungle Reactor Duration",
"fungleMushroomMixupDuration": "Fungle Mixup Duration",
"tabGroupSpeedrun": "Speedrun",
"speedrunSettingsOverride": "Actualizar configuración automáticamente",
"gameAutoEndsAfter": "La partida termina automáticamente después de",
@@ -294,10 +307,20 @@
"moderatorAndAbove": "<color=purple>Moderador</color> o superior",
"admin": "<color=red>Administrador</color>",
"onlyYou": "Solo tú",
"pnsDisableSabotage": "Disable PnS Critical Sabotages",
"pnsDisableCloseDoor": "Disable PnS Door Sabotages",
"pnsDisableSabotage": "Desactivar sabotajes críticos de PnS",
"pnsDisableCloseDoor": "Desactivar sabotajes de puertas de PnS",
"tabGroupPNS": "Poof and Seek",
"badMoveTimeToSuicide": "Phantom Suicides After Visibly Moving For",
"snsImpostorCanVent": "Impostors can vent"
"badMoveTimeToSuicide": "El Fantasma se suicida después de moverse visiblemente durante",
"snsImpostorCanVent": "Los impostores pueden usar conductos",
"modeVoteDuration": "Duración de la votación de modo de juego",
"snsChatInGameExtendTwo": "Enviar información ampliada al iniciar la partida",
"snsChatInGameFast": "Reunión más rápida (experimental+)",
"shieldFirstDeath": " Proteger al primer jugador que murió",
"shieldFirstDeathDuration": "Duración de la protección",
"snsTwoDesc": "Enviar la descripción ampliada de Shift and Seek.",
"modeVoteDesc": "Inicia una votación entre todos los modos de juego.",
"automaticModePoll": "/gmvote automático al volver a la sala",
"privateDesc": "Changes lobby visibility to private.",
"publicDesc": "Changes lobby visibility to public."
}