mirror of
https://github.com/ApeMV/AmongUsRevamped.git
synced 2026-10-22 07:36:05 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a74f7872e9 | ||
|
|
48228cfdb7 | ||
|
|
0866aba752 | ||
|
|
8ad59ca207 | ||
|
|
cbc66948c0 | ||
|
|
f456eb63d5 | ||
|
|
8e013830b6 | ||
|
|
5e74dd1f84 | ||
|
|
ca39da4d64 | ||
|
|
5558350749 | ||
|
|
9a0b38c276 | ||
|
|
0f2516fdf5 | ||
|
|
3ead1b0a69 | ||
|
|
4e912082db | ||
|
|
3c380c1b51 | ||
|
|
71461583b3 | ||
|
|
81c20d4706 | ||
|
|
94c0049939 | ||
|
|
1c3224396c | ||
|
|
de4f057899 | ||
|
|
3e4d833b66 | ||
|
|
6a5fbe7300 | ||
|
|
fbf9b2b6eb | ||
|
|
7da659af7b | ||
|
|
58df006f07 | ||
|
|
0f373b8328 | ||
|
|
16ed549de4 | ||
|
|
bc2aa74046 | ||
|
|
45859032bd | ||
|
|
66a5eb0b09 | ||
|
|
95306ba8a9 | ||
|
|
2ee17166f2 | ||
|
|
10bae07af1 | ||
|
|
df0a68ff19 | ||
|
|
69ecb3c7a0 | ||
|
|
b30fa9a1e7 | ||
|
|
aa56c78c70 | ||
|
|
cd1de51a1f | ||
|
|
6d0d80b736 | ||
|
|
9af84609d9 | ||
|
|
af67b4a0c4 | ||
|
|
c4b6e5709f | ||
|
|
e53acde70a | ||
|
|
f1d98c100d | ||
|
|
44f63d6042 | ||
|
|
5f7ddf35e7 | ||
|
|
95106ddeeb | ||
|
|
f4c157153a | ||
|
|
84978edc99 | ||
|
|
23715a848d | ||
|
|
a7cec7787f | ||
|
|
02f7ddc63a | ||
|
|
600234b5f2 | ||
|
|
15d6f54982 | ||
|
|
5570d6f4ea | ||
|
|
e9f1c1aaf1 | ||
|
|
a6c3220892 | ||
|
|
673386336a | ||
|
|
2ac4728f8a | ||
|
|
88599a0680 | ||
|
|
5ae6d648e3 | ||
|
|
21dec84e64 |
No files matched your search
+35
-19
@@ -1,6 +1,7 @@
|
||||
global using HarmonyLib;
|
||||
global using System.Collections.Generic;
|
||||
global using System.Linq;
|
||||
global using Object = UnityEngine.Object;
|
||||
|
||||
using AmongUs.GameOptions;
|
||||
using BepInEx;
|
||||
@@ -11,6 +12,9 @@ using UnityEngine;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
// dotnet build -c release
|
||||
// dotnet build -c android
|
||||
|
||||
[BepInAutoPlugin]
|
||||
[BepInProcess("Among Us.exe")]
|
||||
public partial class Main : BasePlugin
|
||||
@@ -26,19 +30,27 @@ public partial class Main : BasePlugin
|
||||
public static ConfigEntry<string> Preset5 { get; private set; }
|
||||
|
||||
public static ConfigEntry<bool> GM { get; private set; }
|
||||
public static ConfigEntry<bool> UnlockFps { get; private set; }
|
||||
public static ConfigEntry<bool> ShowFps { get; private set; }
|
||||
public static ConfigEntry<bool> AutoStart { get; private set; }
|
||||
public static ConfigEntry<bool> DarkTheme { get; private set; }
|
||||
public static ConfigEntry<bool> LobbyMusic { get; private set; }
|
||||
public static ConfigEntry<bool> DisableInfoWhenDead { get; private set; }
|
||||
public static ConfigEntry<bool> DisableCommandHelper { get; private set; }
|
||||
public static ConfigEntry<bool> DisableCompatibilityWarning { get; private set; }
|
||||
|
||||
public static NormalGameOptionsV10 NormalOptions => GameOptionsManager.Instance != null ? GameOptionsManager.Instance.currentNormalGameOptions : null;
|
||||
public static HideNSeekGameOptionsV10 HideNSeekOptions => GameOptionsManager.Instance != null ? GameOptionsManager.Instance.currentHideNSeekGameOptions : null;
|
||||
public static MapNames CurrentMap => (MapNames)NormalOptions.MapId;
|
||||
|
||||
public static bool HasArgumentException;
|
||||
public static string CredentialsText;
|
||||
public const string ModVersion = "v1.3.3";
|
||||
public const string ModVersion = "v1.9.0";
|
||||
|
||||
public static float GameTimer;
|
||||
|
||||
public static readonly Dictionary<int, int> SayStartTimes = [];
|
||||
public static readonly Dictionary<int, int> SayDeniedWordTimes = [];
|
||||
|
||||
public static PlayerControl[] AllPlayerControls
|
||||
{
|
||||
get
|
||||
@@ -76,15 +88,21 @@ public partial class Main : BasePlugin
|
||||
|
||||
AutoStart = Config.Bind("Client Options", "Auto Start", false);
|
||||
GM = Config.Bind("Client Options", "Game Master", false);
|
||||
UnlockFps = Config.Bind("Client Options", "Unlock FPS", false);
|
||||
ShowFps = Config.Bind("Client Options", "Show FPS", false);
|
||||
AutoStart = Config.Bind("Client Options", "Auto Start", false);
|
||||
DarkTheme = Config.Bind("Client Options", "Dark Theme", false);
|
||||
LobbyMusic = Config.Bind("Client Options", "Lobby Music", false);
|
||||
DisableInfoWhenDead = Config.Bind("Client Options", "Disable Task/Kill View", false);
|
||||
DisableCommandHelper = Config.Bind("Client Options", "Disable Command Helper", false);
|
||||
DisableCompatibilityWarning = Config.Bind("Client Options", "Disable Compatibility Warning", false);
|
||||
|
||||
Translator.Init();
|
||||
Translator.Reload();
|
||||
BanManager.Init();
|
||||
|
||||
|
||||
Harmony.PatchAll();
|
||||
|
||||
ConsoleManager.DetachConsole();
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(ModManager), nameof(ModManager.LateUpdate))]
|
||||
@@ -92,7 +110,6 @@ public partial class Main : BasePlugin
|
||||
{
|
||||
public static void Prefix(ModManager __instance)
|
||||
{
|
||||
__instance.ShowModStamp();
|
||||
LateTask.Update(Time.deltaTime);
|
||||
}
|
||||
}
|
||||
@@ -120,19 +137,18 @@ public partial class Main : BasePlugin
|
||||
Fortegreen = 18
|
||||
}
|
||||
|
||||
// Innersloth now censors messages with more than 5 numbers. This is the best bypass I can give
|
||||
public enum BasicNumberToLetter
|
||||
// Innersloth now censors messages with more than 5 numbers. Sucks to be them.
|
||||
public static readonly char[] CircledDigits =
|
||||
{
|
||||
Zero = 0,
|
||||
One = 1,
|
||||
Two = 2,
|
||||
Three = 3,
|
||||
Four = 4,
|
||||
Five = 5,
|
||||
Six = 6,
|
||||
Seven = 7,
|
||||
Eight = 8,
|
||||
Nine = 9,
|
||||
Ten = 10
|
||||
}
|
||||
'⓪', // 0
|
||||
'①', // 1
|
||||
'②', // 2
|
||||
'③', // 3
|
||||
'④', // 4
|
||||
'⑤', // 5
|
||||
'⑥', // 6
|
||||
'⑦', // 7
|
||||
'⑧', // 8
|
||||
'⑨' // 9
|
||||
};
|
||||
}
|
||||
+17
-8
@@ -1,24 +1,33 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0</TargetFramework>
|
||||
<TargetFramework Condition="'$(Configuration)' == 'Android'">net8.0</TargetFramework>
|
||||
<TargetFramework Condition="'$(Configuration)' != 'Android'">net6.0</TargetFramework>
|
||||
<LangVersion>latest</LangVersion>
|
||||
<DebugType>embedded</DebugType>
|
||||
|
||||
<VersionPrefix>1.0.0</VersionPrefix>
|
||||
<VersionSuffix>dev</VersionSuffix>
|
||||
<Description>The ultimate Host-Only mod without Modded Protocol</Description>
|
||||
<Authors>Most Various</Authors>
|
||||
<Authors>apemv</Authors>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<Configurations>Release;Android</Configurations>
|
||||
<Configuration Condition="'$(Configuration)' == ''">Release</Configuration>
|
||||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
|
||||
<Configuration>Release</Configuration>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.735" Private="false" ExcludeAssets="runtime;native" />
|
||||
<PackageReference Include="AmongUs.GameLibs.Steam" Version="2025.11.18" PrivateAssets="all" />
|
||||
<PackageReference Include="BepInEx.Unity.IL2CPP" Version="6.0.0-be.735" ExcludeAssets="runtime;native" />
|
||||
|
||||
<PackageReference Include="AmongUs.GameLibs.Steam" Version="2026.6.5" PrivateAssets="all" Condition="'$(Configuration)' == 'Release'"/>
|
||||
<PackageReference Include="AmongUs.GameLibs.Android" Version="2025.10.14" 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" />
|
||||
|
||||
<EmbeddedResource Include=".\Resources\**" />
|
||||
</ItemGroup>
|
||||
|
||||
<Target Name="Copy" AfterTargets="Build" Condition="'$(AmongUs)' != ''">
|
||||
<Target Name="Copy" AfterTargets="Build" Condition="'$(AmongUs)' != '' And '$(Configuration)' != 'Android'">
|
||||
<Copy SourceFiles="$(TargetPath)" DestinationFolder="$(AmongUs)/BepInEx/plugins/" UseSymboliclinksIfPossible="true" />
|
||||
</Target>
|
||||
</Project>
|
||||
+168
-31
@@ -5,38 +5,47 @@ using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Reflection;
|
||||
using UnityEngine;
|
||||
|
||||
// https://github.com/EnhancedNetwork/TownofHost-Enhanced/blob/main/Modules/BanManager.cs
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
public static class BanManager
|
||||
{
|
||||
public static readonly string DataPath =
|
||||
#if ANDROID
|
||||
Application.persistentDataPath;
|
||||
#else
|
||||
".";
|
||||
#endif
|
||||
|
||||
public static string RemoveHtmlTags(this string str) => Regex.Replace(str, "<[^>]*?>", "");
|
||||
private static readonly string DenyNameListPath = "./AUR-DATA/DenyNameList.txt";
|
||||
private static string BanListPath = "./AUR-DATA/BanList.txt";
|
||||
private static string ModeratorListPath = "./AUR-DATA/ModeratorList.txt";
|
||||
private static readonly string DenyNameListPath = $"{DataPath}/AUR-DATA/Deniednames.txt";
|
||||
private static string BanListPath = $"{DataPath}/AUR-DATA/Banlist.txt";
|
||||
private static string BanWordPath = $"{DataPath}/AUR-DATA/Deniedwords.txt";
|
||||
public static string VipListPath = $"{DataPath}/AUR-DATA/VIP.txt";
|
||||
public static string ModeratorListPath = $"{DataPath}/AUR-DATA/Moderator.txt";
|
||||
public static string AdminListPath = $"{DataPath}/AUR-DATA/Admin.txt";
|
||||
private static string TemplatePath = $"{DataPath}/AUR-DATA/Templates.txt";
|
||||
private static string StartWordsPath = $"{DataPath}/AUR-DATA/Startwords.txt";
|
||||
public static Dictionary<string, string> Templates = new();
|
||||
public static List<string> TempBanWhiteList = [];
|
||||
public static void Init()
|
||||
{
|
||||
try
|
||||
{
|
||||
Directory.CreateDirectory("AUR-DATA");
|
||||
if (!Directory.Exists($"{DataPath}/AUR-DATA")) Directory.CreateDirectory($"{DataPath}/AUR-DATA");
|
||||
|
||||
if (!File.Exists(DenyNameListPath))
|
||||
{
|
||||
Logger.Warn("Creating a new DenyNameList.txt file", "BanManager");
|
||||
File.Create(DenyNameListPath).Close();
|
||||
}
|
||||
if (!File.Exists(BanListPath))
|
||||
{
|
||||
Logger.Warn("Creating a new BanList.txt file", "BanManager");
|
||||
File.Create(BanListPath).Close();
|
||||
}
|
||||
if (!File.Exists(ModeratorListPath))
|
||||
{
|
||||
Logger.Warn("Creating a new ModeratorList.txt file", "BanManager");
|
||||
File.Create(ModeratorListPath).Close();
|
||||
}
|
||||
CheckFile(DenyNameListPath, Translator.Get("bannameWelcome"), "DeniedNames.txt");
|
||||
CheckFile(BanListPath, Translator.Get("banlistWelcome"), "Banlist.txt");
|
||||
CheckFile(BanWordPath, Translator.Get("banwordWelcome"), "DeniedWords.txt");
|
||||
CheckFile(VipListPath, Translator.Get("vipWelcome"), "VIP.txt");
|
||||
CheckFile(ModeratorListPath, Translator.Get("moderatorWelcome"), "Moderator.txt");
|
||||
CheckFile(AdminListPath, Translator.Get("adminWelcome"), "Admin.txt");
|
||||
CheckFile(TemplatePath, Translator.Get("templateWelcome"), "Templates.txt");
|
||||
CheckFile(StartWordsPath, Translator.Get("startWordsWelcome"), "StartWords.txt");
|
||||
|
||||
LoadTemplates();
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -91,7 +100,7 @@ public static class BanManager
|
||||
string friendcode = player?.FriendCode;
|
||||
|
||||
// Check file BanList.txt
|
||||
if (Options.ApplyBanList.GetBool() && CheckBanList(friendcode, player?.GetHashedPuid()))
|
||||
if (CheckBanList(friendcode, player?.GetHashedPuid()))
|
||||
{
|
||||
AmongUsClient.Instance.KickPlayer(player.Id, true);
|
||||
Logger.Info($"{player.PlayerName} was in the BanList and has been banned", "BanListBan");
|
||||
@@ -120,12 +129,14 @@ public static class BanManager
|
||||
|
||||
try
|
||||
{
|
||||
Directory.CreateDirectory("AUR-DATA");
|
||||
if (!Directory.Exists($"{DataPath}/AUR-DATA")) Directory.CreateDirectory($"{DataPath}/AUR-DATA");
|
||||
if (!File.Exists(BanListPath)) File.Create(BanListPath).Close();
|
||||
|
||||
using StreamReader sr = new(BanListPath);
|
||||
string line;
|
||||
while ((line = sr.ReadLine()) != null)
|
||||
{
|
||||
if (line.StartsWith("#")) continue;
|
||||
if (line == "") continue;
|
||||
if (!OnlyCheckPuid)
|
||||
{
|
||||
@@ -141,17 +152,143 @@ public static class BanManager
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
[HarmonyPatch(typeof(BanMenu), nameof(BanMenu.Select))]
|
||||
class BanMenuSelectPatch
|
||||
{
|
||||
public static void Postfix(BanMenu __instance, int clientId)
|
||||
public static bool IsPlayerInDenyName(ClientData client, string name)
|
||||
{
|
||||
ClientData recentClient = AmongUsClient.Instance.GetRecentClient(clientId);
|
||||
if (recentClient == null) return;
|
||||
if (name == "" || !AmongUsClient.Instance.AmHost) return false;
|
||||
|
||||
if (!BanManager.CheckBanList(recentClient?.FriendCode, recentClient?.GetHashedPuid()))
|
||||
__instance.BanButton.GetComponent<ButtonRolloverHandler>().SetEnabledColors();
|
||||
var deniedNames = File.ReadAllLines(DenyNameListPath).Where(x => !x.StartsWith("#"));
|
||||
|
||||
if (deniedNames.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => name.Contains(code, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
AmongUsClient.Instance.KickPlayer(client.Id, false);
|
||||
Logger.Info($" {name} was kicked because their name was in DenyNameList.txt", "Kick");
|
||||
Logger.SendInGame($"{name} was kicked because their name was in DenyNameList.txt");
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static bool IsWordBanned(PlayerControl player, string input)
|
||||
{
|
||||
if (input == "" || !AmongUsClient.Instance.AmHost || Utils.CheckAccessLevel(player.Data.FriendCode) > 0) return false;
|
||||
|
||||
int clientId = player.Data.ClientId;
|
||||
var bannedWords = File.ReadAllLines(BanWordPath).Where(x => !x.StartsWith("#"));
|
||||
|
||||
if (bannedWords.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => input.Contains(code, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
|
||||
if (!Main.SayDeniedWordTimes.ContainsKey(clientId))
|
||||
{
|
||||
Main.SayDeniedWordTimes.Add(clientId, 0);
|
||||
}
|
||||
|
||||
Main.SayDeniedWordTimes[clientId]++;
|
||||
|
||||
if (Main.SayDeniedWordTimes[clientId] >= Options.DeniedWordsToKick.GetInt())
|
||||
{
|
||||
AmongUsClient.Instance.KickPlayer(clientId, false);
|
||||
Logger.Info(Translator.Get("banWordKick", player.Data.PlayerName, Options.DeniedWordsToKick.GetInt()), "DeniedWordKick");
|
||||
Logger.SendInGame(Translator.Get("banWordKick", player.Data.PlayerName, Options.DeniedWordsToKick.GetInt()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static bool IsStartWord(PlayerControl player, string input)
|
||||
{
|
||||
if (input == "" || !AmongUsClient.Instance.AmHost || Utils.CheckAccessLevel(player.Data.FriendCode) > 0) return false;
|
||||
|
||||
int clientId = player.Data.ClientId;
|
||||
var startWords = File.ReadAllLines(BanWordPath).Where(x => !x.StartsWith("#"));
|
||||
|
||||
if ((Options.AutoKickStartStrength.GetBool() && startWords.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => input.Contains(code, StringComparison.OrdinalIgnoreCase))) || (!Options.AutoKickStartStrength.GetBool() && startWords.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => input.Equals(code, StringComparison.OrdinalIgnoreCase))))
|
||||
{
|
||||
if (!Main.SayStartTimes.ContainsKey(clientId))
|
||||
{
|
||||
Main.SayStartTimes.Add(clientId, 0);
|
||||
}
|
||||
|
||||
Main.SayStartTimes[clientId]++;
|
||||
|
||||
if (Main.SayStartTimes[clientId] >= Options.AutoKickStartTimes.GetInt())
|
||||
{
|
||||
AmongUsClient.Instance.KickPlayer(clientId, false);
|
||||
Logger.Info(Translator.Get("startWordKick", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt()), "StartWordKick");
|
||||
Logger.SendInGame(Translator.Get("startWordKick", player.Data.PlayerName, Options.AutoKickStartTimes.GetInt()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(BanMenu), nameof(BanMenu.Select))]
|
||||
class BanMenuSelectPatch
|
||||
{
|
||||
public static void Postfix(BanMenu __instance, int clientId)
|
||||
{
|
||||
ClientData recentClient = AmongUsClient.Instance.GetRecentClient(clientId);
|
||||
if (recentClient == null) return;
|
||||
|
||||
if (!BanManager.CheckBanList(recentClient?.FriendCode, recentClient?.GetHashedPuid()))
|
||||
__instance.BanButton.GetComponent<ButtonRolloverHandler>().SetEnabledColors();
|
||||
}
|
||||
}
|
||||
|
||||
public static void LoadTemplates()
|
||||
{
|
||||
Templates.Clear();
|
||||
|
||||
if (!File.Exists(TemplatePath)) return;
|
||||
|
||||
foreach (var line in File.ReadAllLines(TemplatePath))
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(line)) continue;
|
||||
if (line.StartsWith("#")) continue;
|
||||
|
||||
int splitIndex = line.IndexOf(':');
|
||||
|
||||
if (splitIndex == -1) continue;
|
||||
|
||||
string key = line[..splitIndex].Trim().ToLower();
|
||||
string value = line[(splitIndex + 1)..].Trim();
|
||||
|
||||
if (!Templates.ContainsKey(key)) Templates.Add(key, value);
|
||||
}
|
||||
}
|
||||
|
||||
private static void CheckFile(string path, string defaultContent, string name)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
Logger.Warn($"Creating a new {name} file", "BanManager");
|
||||
File.WriteAllText(path, defaultContent);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Exception(ex, "BanManager");
|
||||
}
|
||||
}
|
||||
|
||||
public static string CheckTemplate(string text)
|
||||
{
|
||||
Dictionary<string, string> variables = new()
|
||||
{
|
||||
{ "ModVersion", Main.ModVersion },
|
||||
{ "\\n", Environment.NewLine }
|
||||
};
|
||||
|
||||
foreach (var kvp in variables)
|
||||
{
|
||||
text = text.Replace($"{{{kvp.Key}}}", kvp.Value);
|
||||
}
|
||||
|
||||
text = text.Replace("\\n", Environment.NewLine);
|
||||
|
||||
return text;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,160 @@
|
||||
using InnerNet;
|
||||
using System;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
[HarmonyPatch(typeof(TextBoxTMP), nameof(TextBoxTMP.SetText))]
|
||||
internal static class CommandHelper
|
||||
{
|
||||
private static TextMeshPro HelperText;
|
||||
|
||||
public class Cmd
|
||||
{
|
||||
public string[] Name;
|
||||
public string Prompt;
|
||||
public string Description;
|
||||
public bool HasVariable;
|
||||
}
|
||||
|
||||
static readonly List<Cmd> Commands = new()
|
||||
{
|
||||
new Cmd { Name = new[] { "/help" }, Prompt = "/help", Description = Translator.Get("helpDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/sns" }, Prompt = "/sns", Description = Translator.Get("snsDesc"), HasVariable = false },
|
||||
new Cmd { Name = new[] { "/shiftandseek" }, Prompt = "/shiftandseek", Description = Translator.Get("snsDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/0kc" }, Prompt = "/0kc", Description = Translator.Get("0kcDesc"), HasVariable = false },
|
||||
new Cmd { Name = new[] { "/0killcooldown" }, Prompt = "/0killcooldown", Description = Translator.Get("0kcDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/sr" }, Prompt = "/sr", Description = Translator.Get("SrDesc"), HasVariable = false },
|
||||
new Cmd { Name = new[] { "/speedrun" }, Prompt = "/speedrun", Description = Translator.Get("SrDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/eg" }, Prompt = "/eg", Description = Translator.Get("egDesc"), HasVariable = false },
|
||||
new Cmd { Name = new[] { "/endgame" }, Prompt = "/endgame", Description = Translator.Get("egDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/em" }, Prompt = "/em", Description = Translator.Get("emDesc"), HasVariable = false },
|
||||
new Cmd { Name = new[] { "/endmeeting" }, Prompt = "/endmeeting", Description = Translator.Get("emDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/aur" }, Prompt = "/aur", Description = Translator.Get("aurDesc"), HasVariable = false },
|
||||
new Cmd { Name = new[] { "/socials" }, Prompt = "/socials", Description = Translator.Get("aurDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/s" }, Prompt = "/s", Description = Translator.Get("sDesc"), HasVariable = false },
|
||||
new Cmd { Name = new[] { "/start" }, Prompt = "/start", Description = Translator.Get("sDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/r" }, Prompt = "/r", Description = Translator.Get("rDesc"), HasVariable = false },
|
||||
new Cmd { Name = new[] { "/roles" }, Prompt = "/roles", Description = Translator.Get("rolesDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/kick" }, Prompt = "/kick {name}", Description = Translator.Get("kickDesc"), HasVariable = true },
|
||||
new Cmd { Name = new[] { "/ckick" }, Prompt = "/ckick {color}", Description = Translator.Get("ckickDesc"), HasVariable = true },
|
||||
|
||||
new Cmd { Name = new[] { "/ban" }, Prompt = "/ban {name}", Description = Translator.Get("banDesc"), HasVariable = true },
|
||||
new Cmd { Name = new[] { "/cban" }, Prompt = "/cban {color}", Description = Translator.Get("cbanDesc"), HasVariable = true },
|
||||
|
||||
new Cmd { Name = new[] { "/dump" }, Prompt = "/dump", Description = Translator.Get("dumpDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/col" }, Prompt = "/col {color}", Description = Translator.Get("colDesc"), HasVariable = true },
|
||||
new Cmd { Name = new[] { "/color" }, Prompt = "/color {color}", Description = Translator.Get("colDesc"), HasVariable = true },
|
||||
new Cmd { Name = new[] { "/colour" }, Prompt = "/colour {color}", Description = Translator.Get("colDesc"), HasVariable = true },
|
||||
|
||||
new Cmd { Name = new[] { "/reload" }, Prompt = "/reload", Description = Translator.Get("reloadDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/vip" }, Prompt = "/vip {name}", Description = Translator.Get("vipDesc"), HasVariable = true },
|
||||
new Cmd { Name = new[] { "/moderator" }, Prompt = "/moderator {name}", Description = Translator.Get("moderatorDesc"), HasVariable = true },
|
||||
new Cmd { Name = new[] { "/admin" }, Prompt = "/admin {name}", Description = Translator.Get("adminDesc"), HasVariable = true },
|
||||
|
||||
new Cmd { Name = new[] { "/removevip" }, Prompt = "/removevip {name}", Description = Translator.Get("cremoveVipDesc"), HasVariable = true },
|
||||
new Cmd { Name = new[] { "/removemoderator" }, Prompt = "/removemoderator {name}", Description = Translator.Get("removeModeratorDesc"), HasVariable = true },
|
||||
new Cmd { Name = new[] { "/removeadmin" }, Prompt = "/removeadmin {name}", Description = Translator.Get("removeAdminDesc"), HasVariable = true },
|
||||
|
||||
new Cmd { Name = new[] { "/lastgame" }, Prompt = "/lastgame", Description = Translator.Get("lastgameDesc"), HasVariable = false },
|
||||
|
||||
new Cmd { Name = new[] { "/t" }, Prompt = "/t {template}", Description = Translator.Get("templateDesc"), HasVariable = true },
|
||||
|
||||
new Cmd { Name = new[] { "/seeker" }, Prompt = "/seeker {name}", Description = Translator.Get("seekerDesc"), HasVariable = true },
|
||||
new Cmd { Name = new[] { "/seekers" }, Prompt = "/seekers", Description = Translator.Get("seekersDesc"), HasVariable = false },
|
||||
new Cmd { Name = new[] { "/clearseeker" }, Prompt = "/clearseeker", Description = Translator.Get("clearSeekerDesc"), HasVariable = false }
|
||||
};
|
||||
|
||||
[HarmonyPostfix]
|
||||
public static void Postfix(TextBoxTMP __instance)
|
||||
{
|
||||
if (!HudManager.InstanceExists || HudManager.Instance.Chat == null || HudManager.Instance.Chat.freeChatField == null || HudManager.Instance.Chat.freeChatField.textArea == null || __instance != HudManager.Instance.Chat.freeChatField.textArea) return;
|
||||
|
||||
if (Main.DisableCommandHelper.Value || !AmongUsClient.Instance.AmHost)
|
||||
{
|
||||
if (HelperText != null) HelperText.enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!HelperText)
|
||||
{
|
||||
HelperText = Object.Instantiate(__instance.outputText, __instance.outputText.transform.parent);
|
||||
HelperText.name = "HelperText";
|
||||
HelperText.color = new Color(0.7f, 0.7f, 0.7f, 0.7f);
|
||||
HelperText.transform.localPosition = __instance.outputText.transform.localPosition;
|
||||
HelperText.enabled = false;
|
||||
}
|
||||
|
||||
string t = __instance.text;
|
||||
|
||||
if (string.IsNullOrEmpty(t) || !t.StartsWith("/"))
|
||||
{
|
||||
HelperText.enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
string textCmd = t.Split(' ')[0];
|
||||
|
||||
Cmd u = null;
|
||||
Cmd v = null;
|
||||
|
||||
foreach (var cmd in Commands)
|
||||
{
|
||||
foreach (var a in cmd.Name)
|
||||
{
|
||||
string aliasCmd = a;
|
||||
|
||||
if (aliasCmd.Equals(textCmd))
|
||||
{
|
||||
v = cmd;
|
||||
u = cmd;
|
||||
break;
|
||||
}
|
||||
|
||||
if (aliasCmd.StartsWith(textCmd))
|
||||
{
|
||||
u ??= cmd;
|
||||
}
|
||||
}
|
||||
|
||||
if (v != null) break;
|
||||
}
|
||||
|
||||
if (v != null && !v.HasVariable && t.Length > textCmd.Length)
|
||||
{
|
||||
HelperText.enabled = false;
|
||||
return;
|
||||
}
|
||||
|
||||
__instance.outputText.enabled = true;
|
||||
|
||||
if (v != null && textCmd.Equals(v.Name[0]))
|
||||
{
|
||||
HelperText.text = $"\n\n<size=80%><color=#FF0000>{v.Description}</color></size>";
|
||||
}
|
||||
else if (u != null)
|
||||
{
|
||||
HelperText.text = u.Prompt;
|
||||
}
|
||||
else
|
||||
{
|
||||
HelperText.enabled = false;
|
||||
return;
|
||||
}
|
||||
HelperText.enabled = true;
|
||||
}
|
||||
}
|
||||
+368
-194
@@ -4,23 +4,6 @@ using UnityEngine;
|
||||
// https://github.com/tukasa0001/TownOfHost/blob/main/Modules/OptionHolder.cs
|
||||
namespace AmongUsRevamped
|
||||
{
|
||||
[HarmonyPatch]
|
||||
public static class Options
|
||||
{
|
||||
static Task taskOptionsLoad;
|
||||
|
||||
[HarmonyPatch(typeof(TranslationController), nameof(TranslationController.Initialize)), HarmonyPostfix]
|
||||
public static void OptionsLoadStart()
|
||||
{
|
||||
taskOptionsLoad = Task.Run(Load);
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(MainMenuManager), nameof(MainMenuManager.Start)), HarmonyPostfix]
|
||||
public static void WaitOptionsLoad()
|
||||
{
|
||||
taskOptionsLoad.Wait();
|
||||
}
|
||||
|
||||
public static class CL
|
||||
{
|
||||
public static Color32 Hex(string hex)
|
||||
@@ -41,8 +24,20 @@ namespace AmongUsRevamped
|
||||
byte b = byte.Parse(hex.Substring(4, 2), System.Globalization.NumberStyles.HexNumber);
|
||||
|
||||
return new Color32(r, g, b, 255);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch]
|
||||
public static class Options
|
||||
{
|
||||
static Task taskOptionsLoad;
|
||||
|
||||
[HarmonyPatch(typeof(TranslationController), nameof(TranslationController.Initialize)), HarmonyPostfix]
|
||||
public static void OptionsLoadStart()
|
||||
{
|
||||
taskOptionsLoad = Task.Run(Load);
|
||||
}
|
||||
|
||||
public const int PresetId = 0;
|
||||
|
||||
private static readonly string[] presets =
|
||||
@@ -53,29 +48,43 @@ namespace AmongUsRevamped
|
||||
|
||||
public static readonly string[] gameModes =
|
||||
{
|
||||
"None", "0 Kill Cooldown", "Shift And Seek", "Speedrun"
|
||||
"Standard", "Shift And Seek", "Speedrun"
|
||||
};
|
||||
|
||||
public static readonly string[] colorLevels =
|
||||
public static readonly string[] accessLevels =
|
||||
{
|
||||
"Moderators", "Everyone", "Nobody"
|
||||
Translator.Get("everyone"), Translator.Get("vipAndAbove"), Translator.Get("moderatorAndAbove"), Translator.Get("admin"), Translator.Get("onlyYou")
|
||||
};
|
||||
|
||||
public static readonly string[] crewmateAbilities =
|
||||
{
|
||||
"Mayor", "Workhorse", "Jester", "Tasker", "None"
|
||||
};
|
||||
public static readonly string[] impostorAbilities =
|
||||
{
|
||||
"Tyrant", "Stealer", "Juggernaut", "None"
|
||||
};
|
||||
|
||||
//System
|
||||
public static OptionItem Language;
|
||||
|
||||
public static OptionItem Gamemode;
|
||||
|
||||
public static OptionItem TabGroupMain;
|
||||
|
||||
public static OptionItem KickLowLevelPlayer;
|
||||
public static OptionItem DontKickLevelOnes;
|
||||
public static OptionItem TempBanLowLevelPlayer;
|
||||
|
||||
public static OptionItem KickInvalidFriendCodes;
|
||||
public static OptionItem TempBanInvalidFriendCodes;
|
||||
|
||||
public static OptionItem ApplyBanList;
|
||||
public static OptionItem ApplyDenyNameList;
|
||||
public static OptionItem ApplyModeratorList;
|
||||
public static OptionItem ModeratorCanUseCommand;
|
||||
public static OptionItem DeniedWordsToKick;
|
||||
|
||||
public static OptionItem AutoKickStart;
|
||||
public static OptionItem AutoKickStartAsBan;
|
||||
public static OptionItem AutoKickStartTimes;
|
||||
public static OptionItem AutoKickStartStrength;
|
||||
|
||||
public static OptionItem TabGroupAutomation;
|
||||
|
||||
@@ -84,6 +93,8 @@ namespace AmongUsRevamped
|
||||
public static OptionItem AutoStartTimer;
|
||||
public static OptionItem WaitAutoStart;
|
||||
public static OptionItem PlayerAutoStart;
|
||||
public static OptionItem EnableJoinMessages;
|
||||
public static OptionItem MessagePerPlayerNum;
|
||||
|
||||
public static OptionItem TabGroupMisc;
|
||||
|
||||
@@ -91,18 +102,63 @@ namespace AmongUsRevamped
|
||||
public static OptionItem ColorCommandLevel;
|
||||
public static OptionItem AllowFortegreen;
|
||||
public static OptionItem NoGameEnd;
|
||||
|
||||
public static OptionItem TabGroupAccess;
|
||||
public static OptionItem SlashColorCmd;
|
||||
public static OptionItem SlashRolesAndGamemodeCmd;
|
||||
public static OptionItem SlashLastGameCmd;
|
||||
public static OptionItem SlashKickCmd;
|
||||
public static OptionItem SlashBanCmd;
|
||||
public static OptionItem SlashEndMeetingCmd;
|
||||
public static OptionItem SlashStartAndEndGameCmd;
|
||||
|
||||
//Gameplay
|
||||
public static OptionItem TabGroupGameplayGeneral;
|
||||
public static OptionItem TabGroupSabotages;
|
||||
public static OptionItem DeadImpostorsCanSabotage;
|
||||
public static OptionItem DisableSabotage;
|
||||
public static OptionItem DisableReactor;
|
||||
public static OptionItem DisableOxygen;
|
||||
public static OptionItem DisableLights;
|
||||
public static OptionItem DisableComms;
|
||||
public static OptionItem DisableHeli;
|
||||
public static OptionItem DisableMushroomMixup;
|
||||
public static OptionItem DisableCloseDoor;
|
||||
|
||||
public static OptionItem DisableReport;
|
||||
public static OptionItem TabGroupGameplayGeneral;
|
||||
public static OptionItem DisableAnnoyingMeetingCalls;
|
||||
|
||||
public static OptionItem ChangeDecontaminationTime;
|
||||
public static OptionItem DecontaminationTimeOnMiraHQ;
|
||||
public static OptionItem DecontaminationDoorOpenTimeOnMiraHQ;
|
||||
public static OptionItem DecontaminationTimeOnPolus;
|
||||
public static OptionItem DecontaminationDoorOpenTimeOnPolus;
|
||||
public static OptionItem DisableSporeTrigger;
|
||||
|
||||
public static OptionItem DisableDevices;
|
||||
private static OptionItem DisableSkeldDevices;
|
||||
public static OptionItem DisableSkeldAdmin;
|
||||
public static OptionItem DisableSkeldCamera;
|
||||
private static OptionItem DisableMiraHQDevices;
|
||||
public static OptionItem DisableMiraHQAdmin;
|
||||
public static OptionItem DisableMiraHQDoorLog;
|
||||
private static OptionItem DisablePolusDevices;
|
||||
public static OptionItem DisablePolusAdmin;
|
||||
public static OptionItem DisablePolusCamera;
|
||||
public static OptionItem DisablePolusVital;
|
||||
private static OptionItem DisableAirshipDevices;
|
||||
public static OptionItem DisableAirshipCockpitAdmin;
|
||||
public static OptionItem DisableAirshipRecordsAdmin;
|
||||
public static OptionItem DisableAirshipCamera;
|
||||
public static OptionItem DisableAirshipVital;
|
||||
private static OptionItem DisableFungleDevices;
|
||||
public static OptionItem DisableFungleCamera;
|
||||
public static OptionItem DisableFungleVital;
|
||||
|
||||
|
||||
public static OptionItem TabGroupTasks;
|
||||
public static OptionItem OverrideTaskSettings;
|
||||
|
||||
public static OptionItem AllPlayersSameTasks;
|
||||
public static OptionItem TaskPercentNeededToWin;
|
||||
|
||||
public static OptionItem DisableMiraTasks;
|
||||
|
||||
@@ -208,30 +264,28 @@ namespace AmongUsRevamped
|
||||
public static OptionItem DisableSubmitScan;
|
||||
public static OptionItem DisableUploadData;
|
||||
|
||||
// Gamemode
|
||||
public static OptionItem TabGroupHNS;
|
||||
public static OptionItem NumSeekers;
|
||||
|
||||
public static OptionItem TabGroup0Kcd;
|
||||
public static OptionItem NoKcdSettingsOverride;
|
||||
|
||||
public static OptionItem TabGroupSNS;
|
||||
public static OptionItem SNSSettingsOverride;
|
||||
public static OptionItem SNSChatInGame;
|
||||
public static OptionItem CrewAutoWinsGameAfter;
|
||||
public static OptionItem CantKillTime;
|
||||
public static OptionItem MisfiresToSuicide;
|
||||
public static OptionItem SNSDisableSabotage;
|
||||
public static OptionItem SNSDisableReactor;
|
||||
public static OptionItem SNSDisableOxygen;
|
||||
public static OptionItem SNSDisableLights;
|
||||
public static OptionItem SNSDisableComms;
|
||||
public static OptionItem SNSDisableHeli;
|
||||
public static OptionItem SNSDisableMushroomMixup;
|
||||
public static OptionItem SNSDisableCloseDoor;
|
||||
|
||||
public static OptionItem TabGroupSpeedrun;
|
||||
public static OptionItem SpeedrunSettingsOverride;
|
||||
public static OptionItem GameAutoEndsAfter;
|
||||
|
||||
// Roles
|
||||
public static OptionItem TabGroupCrewmate;
|
||||
|
||||
public static OptionItem TabGroupNeutral;
|
||||
public static OptionItem JesterPerc;
|
||||
|
||||
public static OptionItem TabGroupImpostor;
|
||||
public static OptionItem EngineerMode;
|
||||
|
||||
public static bool IsLoaded = false;
|
||||
|
||||
@@ -243,308 +297,428 @@ namespace AmongUsRevamped
|
||||
.SetColor(new Color32(204, 204, 0, 255))
|
||||
.SetHeader(true);
|
||||
|
||||
Gamemode = StringOptionItem.Create(1, "Gamemode", gameModes, 0, TabGroup.SystemSettings, false)
|
||||
Gamemode = StringOptionItem.Create(1, Translator.Get("gamemode"), gameModes, 0, TabGroup.SystemSettings, false)
|
||||
.SetColor(Color.green)
|
||||
.SetHeader(true);
|
||||
|
||||
TabGroupMain = TextOptionItem.Create(60000, "Moderation", TabGroup.SystemSettings)
|
||||
TabGroupMain = TextOptionItem.Create(60000, Translator.Get("tabGroupMain"), TabGroup.SystemSettings)
|
||||
.SetColor(Color.blue);
|
||||
|
||||
KickLowLevelPlayer = IntegerOptionItem.Create(60050, "Kick Players Under Level", new(0, 100, 1), 0, TabGroup.SystemSettings, false)
|
||||
DeniedWordsToKick = IntegerOptionItem.Create(60049, Translator.Get("deniedWordsToKick"), new(1, 5, 1), 1, TabGroup.SystemSettings, false)
|
||||
.SetValueFormat(OptionFormat.Level);
|
||||
TempBanLowLevelPlayer = BooleanOptionItem.Create(60051, "Ban Instead Of Kick", false, TabGroup.SystemSettings, false)
|
||||
|
||||
KickLowLevelPlayer = IntegerOptionItem.Create(60050, Translator.Get("kickLowLevelPlayer"), new(0, 100, 1), 0, TabGroup.SystemSettings, false)
|
||||
.SetValueFormat(OptionFormat.Level);
|
||||
TempBanLowLevelPlayer = BooleanOptionItem.Create(60051, Translator.Get("tempBanLowLevelPlayer"), false, TabGroup.SystemSettings, false)
|
||||
.SetParent(KickLowLevelPlayer);
|
||||
DontKickLevelOnes = BooleanOptionItem.Create(60052, Translator.Get("dontKickLevelOnes"), false, TabGroup.SystemSettings, false)
|
||||
.SetParent(KickLowLevelPlayer);
|
||||
|
||||
KickInvalidFriendCodes = BooleanOptionItem.Create(60080, "Kick Invalid FriendCodes", true, TabGroup.SystemSettings, false);
|
||||
TempBanInvalidFriendCodes = BooleanOptionItem.Create(60081, "Ban Instead Of Kick", false, TabGroup.SystemSettings, false)
|
||||
KickInvalidFriendCodes = BooleanOptionItem.Create(60080, Translator.Get("kickInvalidFriendCodes"), true, TabGroup.SystemSettings, false);
|
||||
TempBanInvalidFriendCodes = BooleanOptionItem.Create(60081, Translator.Get("tempBanInvalidFriendCodes"), false, TabGroup.SystemSettings, false)
|
||||
.SetParent(KickInvalidFriendCodes);
|
||||
|
||||
ApplyBanList = BooleanOptionItem.Create(60110, "Apply BanList", true, TabGroup.SystemSettings, true);
|
||||
ApplyDenyNameList = BooleanOptionItem.Create(60120, "Apply DenyName List", true, TabGroup.SystemSettings, false);
|
||||
ApplyModeratorList = BooleanOptionItem.Create(60121, "Apply Moderator List", true, TabGroup.SystemSettings, false);
|
||||
ModeratorCanUseCommand = BooleanOptionItem.Create(60122, "Moderators can use commands", true, TabGroup.SystemSettings, false);
|
||||
AutoKickStart = BooleanOptionItem.Create(60123, Translator.Get("autoKickStart"), false, TabGroup.SystemSettings, false);
|
||||
AutoKickStartAsBan = BooleanOptionItem.Create(60124, Translator.Get("autoKickStartAsBan"), false, TabGroup.SystemSettings, false)
|
||||
.SetParent(AutoKickStart);
|
||||
AutoKickStartTimes = IntegerOptionItem.Create(60125, Translator.Get("autoKickStartTimes"), new(1, 10, 1), 1, TabGroup.SystemSettings, false)
|
||||
.SetParent(AutoKickStart)
|
||||
.SetValueFormat(OptionFormat.Times);
|
||||
AutoKickStartStrength = BooleanOptionItem.Create(60126, Translator.Get("autoKickStartStrength"), false, TabGroup.SystemSettings, false)
|
||||
.SetParent(AutoKickStart);
|
||||
|
||||
TabGroupAutomation = TextOptionItem.Create(60149, "Automation", TabGroup.SystemSettings)
|
||||
TabGroupAutomation = TextOptionItem.Create(60149, Translator.Get("tabGroupAutomation"), TabGroup.SystemSettings)
|
||||
.SetColor(Color.yellow);
|
||||
|
||||
AutoSendGameInfo = BooleanOptionItem.Create(60150, "Automatically send winner info", true, TabGroup.SystemSettings, false);
|
||||
AutoRejoinLobby = BooleanOptionItem.Create(60210, "Auto Rejoin Lobby", false, TabGroup.SystemSettings, false);
|
||||
AutoStartTimer = IntegerOptionItem.Create(64420, "Countdown For Auto Start", new(1, 600, 1), 5, TabGroup.SystemSettings, false)
|
||||
AutoSendGameInfo = BooleanOptionItem.Create(60150, Translator.Get("autoSendGameInfo"), true, TabGroup.SystemSettings, false);
|
||||
AutoRejoinLobby = BooleanOptionItem.Create(60210, Translator.Get("autoRejoinLobby"), false, TabGroup.SystemSettings, false);
|
||||
AutoStartTimer = IntegerOptionItem.Create(64420, Translator.Get("autoStartTimer"), new(1, 5, 1), 5, TabGroup.SystemSettings, false)
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
WaitAutoStart = IntegerOptionItem.Create(64421, "Auto Start After", new(10, 600, 10), 300, TabGroup.SystemSettings, false)
|
||||
WaitAutoStart = IntegerOptionItem.Create(64421, Translator.Get("waitAutoStart"), new(10, 600, 10), 300, TabGroup.SystemSettings, false)
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
PlayerAutoStart = IntegerOptionItem.Create(64422, "Players Needed To Auto Start", new(1, 15, 1), 1, TabGroup.SystemSettings, false);
|
||||
PlayerAutoStart = IntegerOptionItem.Create(64422, Translator.Get("playerAutoStart"), new(1, 15, 1), 1, TabGroup.SystemSettings, false);
|
||||
EnableJoinMessages = BooleanOptionItem.Create(64423, Translator.Get("enableJoinMessages"), true, TabGroup.SystemSettings, false);
|
||||
MessagePerPlayerNum = IntegerOptionItem.Create(64424, Translator.Get("messagePerPlayerNum"), new(1, 15, 1), 5, TabGroup.SystemSettings, false)
|
||||
.SetParent(EnableJoinMessages);
|
||||
|
||||
TabGroupMisc = TextOptionItem.Create(60379, "Miscelleneous", TabGroup.SystemSettings)
|
||||
TabGroupMisc = TextOptionItem.Create(60379, Translator.Get("tabGroupMisc"), TabGroup.SystemSettings)
|
||||
.SetColor(Color.green);
|
||||
|
||||
StartCountdown = IntegerOptionItem.Create(60380, "Default Starting Countdown", new(1, 600, 1), 5, TabGroup.SystemSettings, false)
|
||||
StartCountdown = IntegerOptionItem.Create(60380, Translator.Get("startCountdown"), new(1, 5, 1), 5, TabGroup.SystemSettings, false)
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
ColorCommandLevel = StringOptionItem.Create(60381, "Who Can use Color Commands", colorLevels, 0, TabGroup.SystemSettings, false);
|
||||
AllowFortegreen = BooleanOptionItem.Create(60382, "Allow Fortegreen Color", false, TabGroup.SystemSettings, false);
|
||||
NoGameEnd = BooleanOptionItem.Create(60383, "No Game End", false, TabGroup.SystemSettings, false)
|
||||
AllowFortegreen = BooleanOptionItem.Create(60382, Translator.Get("allowFortegreen"), false, TabGroup.SystemSettings, false);
|
||||
NoGameEnd = BooleanOptionItem.Create(60383, Translator.Get("noGameEnd"), false, TabGroup.SystemSettings, false)
|
||||
.SetColor(Color.red);
|
||||
|
||||
|
||||
|
||||
|
||||
// Custom role settings
|
||||
TabGroupCrewmate = TextOptionItem.Create(100000, "Crewmate Roles", TabGroup.CustomRoleSettings)
|
||||
.SetColor(CL.Hex("#8cffff"));
|
||||
|
||||
TabGroupNeutral = TextOptionItem.Create(101000, "Neutral Roles", TabGroup.CustomRoleSettings)
|
||||
.SetColor(CL.Hex("#FFFF99"));
|
||||
JesterPerc = IntegerOptionItem.Create(101001, "PLACEHOLDER", new(0, 100, 5), 0, TabGroup.CustomRoleSettings, false)
|
||||
.SetValueFormat(OptionFormat.Percent)
|
||||
.SetColor(CL.Hex("#ec62a5"));
|
||||
|
||||
TabGroupImpostor = TextOptionItem.Create(102000, "Impostor Roles", TabGroup.CustomRoleSettings)
|
||||
.SetColor(CL.Hex("#ff1919"));
|
||||
|
||||
|
||||
TabGroupAccess = TextOptionItem.Create(60400, Translator.Get("tabGroupAccess"), TabGroup.SystemSettings)
|
||||
.SetColor(Color.red);
|
||||
SlashColorCmd = StringOptionItem.Create(60401, Translator.Get("slashColorCmd"), accessLevels, 1, TabGroup.SystemSettings, false);
|
||||
SlashRolesAndGamemodeCmd = StringOptionItem.Create(60402, Translator.Get("slashRolesAndGamemodeCmd"), accessLevels, 1, TabGroup.SystemSettings, false);
|
||||
SlashLastGameCmd = StringOptionItem.Create(60403, Translator.Get("slashLastGameCmd"), accessLevels, 1, TabGroup.SystemSettings, false);
|
||||
SlashKickCmd = StringOptionItem.Create(60405, Translator.Get("slashKickCmd"), accessLevels, 2, TabGroup.SystemSettings, false);
|
||||
SlashBanCmd = StringOptionItem.Create(60406, Translator.Get("slashBanCmd"), accessLevels, 2, TabGroup.SystemSettings, false);
|
||||
SlashEndMeetingCmd = StringOptionItem.Create(60407, Translator.Get("slashEndMeetingCmd"), accessLevels, 3, TabGroup.SystemSettings, false);
|
||||
SlashStartAndEndGameCmd = StringOptionItem.Create(60408, Translator.Get("slashStartAndEndGameCmd"), accessLevels, 3, TabGroup.SystemSettings, false);
|
||||
|
||||
// Gamemode Settings
|
||||
TabGroupHNS = TextOptionItem.Create(70000, "Hide and Seek", TabGroup.GamemodeSettings)
|
||||
|
||||
TabGroupHNS = TextOptionItem.Create(70000, Translator.Get("tabGroupHNS"), TabGroup.GamemodeSettings)
|
||||
.SetColor(Color.green);
|
||||
NumSeekers = IntegerOptionItem.Create(70001, "# Seekers", new(0, 15, 1), 1, TabGroup.GamemodeSettings, false)
|
||||
NumSeekers = IntegerOptionItem.Create(70001, Translator.Get("numSeekers"), new(1, 15, 1), 1, TabGroup.GamemodeSettings, false)
|
||||
.SetValueFormat(OptionFormat.Level);
|
||||
|
||||
|
||||
TabGroup0Kcd = TextOptionItem.Create(70025, "0 Kill Cooldown", TabGroup.GamemodeSettings)
|
||||
.SetColor(Color.red);
|
||||
NoKcdSettingsOverride = BooleanOptionItem.Create(70026, "Auto Update Settings", true, TabGroup.GamemodeSettings, false);
|
||||
|
||||
TabGroupSNS = TextOptionItem.Create(70050, "Shift and Seek", TabGroup.GamemodeSettings)
|
||||
TabGroupSNS = TextOptionItem.Create(70050, Translator.Get("tabGroupSNS"), TabGroup.GamemodeSettings)
|
||||
.SetColor(Color.yellow);
|
||||
SNSSettingsOverride = BooleanOptionItem.Create(70051, "Auto Update Settings", true, TabGroup.GamemodeSettings, false);
|
||||
CantKillTime = IntegerOptionItem.Create(70053, "After Misfiring, Can't kill for", new(0, 60, 5), 20, TabGroup.GamemodeSettings, false)
|
||||
SNSSettingsOverride = BooleanOptionItem.Create(70051, Translator.Get("snsSettingsOverride"), true, TabGroup.GamemodeSettings, false);
|
||||
SNSChatInGame = BooleanOptionItem.Create(70063, Translator.Get("snsChatInGame"), false, TabGroup.GamemodeSettings, false);
|
||||
CantKillTime = IntegerOptionItem.Create(70053, Translator.Get("cantKillTime"), new(0, 60, 5), 20, TabGroup.GamemodeSettings, false)
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
MisfiresToSuicide = IntegerOptionItem.Create(70052, "Suicide After Amount Of Misfires", new(1, 10, 1), 2, TabGroup.GamemodeSettings, false);
|
||||
CrewAutoWinsGameAfter = IntegerOptionItem.Create(70054, "Crewmates Automatically Win After", new(0, 600, 10), 300, TabGroup.GamemodeSettings, false)
|
||||
MisfiresToSuicide = IntegerOptionItem.Create(70052, Translator.Get("misfiresToSuicide"), new(1, 10, 1), 2, TabGroup.GamemodeSettings, false);
|
||||
CrewAutoWinsGameAfter = IntegerOptionItem.Create(70054, Translator.Get("crewAutoWinsGameAfter"), new(0, 600, 10), 300, TabGroup.GamemodeSettings, false)
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
SNSDisableSabotage = BooleanOptionItem.Create(70055, Translator.Get("snsDisableSabotage"), true, TabGroup.GamemodeSettings, false)
|
||||
.SetColor(Color.red);
|
||||
SNSDisableReactor = BooleanOptionItem.Create(70056, Translator.Get("snsDisableReactor"), true, TabGroup.GamemodeSettings, false)
|
||||
.SetParent(SNSDisableSabotage)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
SNSDisableOxygen = BooleanOptionItem.Create(70057, Translator.Get("snsDisableOxygen"), true, TabGroup.GamemodeSettings, false)
|
||||
.SetParent(SNSDisableSabotage)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
SNSDisableLights = BooleanOptionItem.Create(70058, Translator.Get("snsDisableLights"), true, TabGroup.GamemodeSettings, false)
|
||||
.SetParent(SNSDisableSabotage)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
SNSDisableComms = BooleanOptionItem.Create(70059, Translator.Get("snsDisableComms"), true, TabGroup.GamemodeSettings, false)
|
||||
.SetParent(SNSDisableSabotage)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
SNSDisableHeli = BooleanOptionItem.Create(70060, Translator.Get("snsDisableHeli"), true, TabGroup.GamemodeSettings, false)
|
||||
.SetParent(SNSDisableSabotage)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
SNSDisableMushroomMixup = BooleanOptionItem.Create(70061, Translator.Get("snsDisableMushroomMixup"), true, TabGroup.GamemodeSettings, false)
|
||||
.SetParent(SNSDisableSabotage)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
SNSDisableCloseDoor = BooleanOptionItem.Create(70062, Translator.Get("snsDisableCloseDoor"), true, TabGroup.GamemodeSettings, false)
|
||||
.SetColor(Color.red);
|
||||
|
||||
TabGroupSpeedrun = TextOptionItem.Create(70075, "Speedrun", TabGroup.GamemodeSettings)
|
||||
TabGroupSpeedrun = TextOptionItem.Create(70075, Translator.Get("tabGroupSpeedrun"), TabGroup.GamemodeSettings)
|
||||
.SetColor(Color.blue);
|
||||
SpeedrunSettingsOverride = BooleanOptionItem.Create(70076, "Auto Update Settings", true, TabGroup.GamemodeSettings, false);
|
||||
GameAutoEndsAfter = IntegerOptionItem.Create(70077, "Game automatically ends after", new(0, 600, 10), 300, TabGroup.GamemodeSettings, false)
|
||||
SpeedrunSettingsOverride = BooleanOptionItem.Create(70076, Translator.Get("speedrunSettingsOverride"), true, TabGroup.GamemodeSettings, false);
|
||||
GameAutoEndsAfter = IntegerOptionItem.Create(70077, Translator.Get("gameAutoEndsAfter"), new(0, 600, 10), 300, TabGroup.GamemodeSettings, false)
|
||||
.SetValueFormat(OptionFormat.Seconds);
|
||||
|
||||
EngineerMode = BooleanOptionItem.Create(70078, Translator.Get("engineerMode"), false, TabGroup.GamemodeSettings, false);
|
||||
|
||||
// Gameplay Settings
|
||||
TabGroupGameplayGeneral = TextOptionItem.Create(60564, "General", TabGroup.ModSettings)
|
||||
TabGroupSabotages = TextOptionItem.Create(60450, Translator.Get("tabGroupSabotages"), TabGroup.ModSettings)
|
||||
.SetColor(Color.red);
|
||||
DeadImpostorsCanSabotage = BooleanOptionItem.Create(60455, Translator.Get("deadImpostorsCanSabotage"), true, TabGroup.ModSettings, false)
|
||||
.SetColor(Color.red);
|
||||
DisableSabotage = BooleanOptionItem.Create(60456, Translator.Get("disableSabotage"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(Color.red);
|
||||
DisableReactor = BooleanOptionItem.Create(60457, Translator.Get("disableReactor"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableSabotage)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableOxygen = BooleanOptionItem.Create(60458, Translator.Get("disableOxygen"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableSabotage)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableLights = BooleanOptionItem.Create(60459, Translator.Get("disableLights"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableSabotage)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableComms = BooleanOptionItem.Create(60460, Translator.Get("disableComms"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableSabotage)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableHeli = BooleanOptionItem.Create(60461, Translator.Get("disableHeli"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableSabotage)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
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)
|
||||
.SetColor(Color.red);
|
||||
|
||||
TabGroupGameplayGeneral = TextOptionItem.Create(60564, Translator.Get("tabGroupGameplayGeneral"), TabGroup.ModSettings)
|
||||
.SetColor(Color.blue);
|
||||
DisableSabotage = BooleanOptionItem.Create(60565, "Disable Critical Sabotages", false, TabGroup.ModSettings, false)
|
||||
DisableAnnoyingMeetingCalls = BooleanOptionItem.Create(60565, Translator.Get("disableAnnoyingMeetingCalls"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
|
||||
|
||||
ChangeDecontaminationTime = BooleanOptionItem.Create(60550, Translator.Get("changeDecontaminationTime"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
|
||||
DecontaminationTimeOnMiraHQ = FloatOptionItem.Create(60551, Translator.Get("decontaminationTimeOnMiraHQ"), new(0.5f, 10f, 0.25f), 3f, TabGroup.ModSettings, false)
|
||||
.SetParent(ChangeDecontaminationTime)
|
||||
.SetValueFormat(OptionFormat.Seconds)
|
||||
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
|
||||
DecontaminationDoorOpenTimeOnMiraHQ = FloatOptionItem.Create(60552, Translator.Get("decontaminationDoorOpenTimeOnMiraHQ"), new(0.5f, 10f, 0.25f), 3f, TabGroup.ModSettings, false)
|
||||
.SetParent(ChangeDecontaminationTime)
|
||||
.SetValueFormat(OptionFormat.Seconds)
|
||||
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
|
||||
DecontaminationTimeOnPolus = FloatOptionItem.Create(60553, Translator.Get("decontaminationTimeOnPolus"), new(0.5f, 10f, 0.25f), 3f, TabGroup.ModSettings, false)
|
||||
.SetParent(ChangeDecontaminationTime)
|
||||
.SetValueFormat(OptionFormat.Seconds)
|
||||
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
|
||||
DecontaminationDoorOpenTimeOnPolus = FloatOptionItem.Create(60554, Translator.Get("decontaminationDoorOpenTimeOnPolus"), new(0.5f, 10f, 0.25f), 3f, TabGroup.ModSettings, false)
|
||||
.SetParent(ChangeDecontaminationTime)
|
||||
.SetValueFormat(OptionFormat.Seconds)
|
||||
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
|
||||
|
||||
DisableSporeTrigger = BooleanOptionItem.Create(60558, Translator.Get("disableSporeTrigger"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(19, 188, 233, byte.MaxValue));
|
||||
|
||||
DisableDevices = BooleanOptionItem.Create(22900, Translator.Get("disableDevices"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(Color.red);
|
||||
|
||||
DisableSkeldDevices = BooleanOptionItem.Create(22905, Translator.Get("disableSkeldDevices"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableCloseDoor = BooleanOptionItem.Create(60566, "Disable Door Sabotages", false, TabGroup.ModSettings, false)
|
||||
DisableSkeldAdmin = BooleanOptionItem.Create(22906, Translator.Get("disableSkeldAdmin"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableSkeldDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableReport = BooleanOptionItem.Create(60520, "Disable Body Reports", false, TabGroup.ModSettings, false)
|
||||
DisableSkeldCamera = BooleanOptionItem.Create(22907, Translator.Get("disableSkeldCamera"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableSkeldDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
|
||||
DisableMiraHQDevices = BooleanOptionItem.Create(22908, Translator.Get("disableMiraHQDevices"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableMiraHQAdmin = BooleanOptionItem.Create(22909, Translator.Get("disableMiraHQAdmin"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiraHQDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableMiraHQDoorLog = BooleanOptionItem.Create(22910, Translator.Get("disableMiraHQDoorLog"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiraHQDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
|
||||
TabGroupTasks = TextOptionItem.Create(22997, "Tasks", TabGroup.ModSettings)
|
||||
DisablePolusDevices = BooleanOptionItem.Create(22911, Translator.Get("disablePolusDevices"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisablePolusAdmin = BooleanOptionItem.Create(22912, Translator.Get("disablePolusAdmin"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisablePolusDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisablePolusCamera = BooleanOptionItem.Create(22913, Translator.Get("disablePolusCamera"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisablePolusDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisablePolusVital = BooleanOptionItem.Create(22914, Translator.Get("disablePolusVital"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisablePolusDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
|
||||
DisableAirshipDevices = BooleanOptionItem.Create(22915, Translator.Get("disableAirshipDevices"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableAirshipCockpitAdmin = BooleanOptionItem.Create(22916, Translator.Get("disableAirshipCockpitAdmin"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableAirshipRecordsAdmin = BooleanOptionItem.Create(22917, Translator.Get("disableAirshipRecordsAdmin"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableAirshipCamera = BooleanOptionItem.Create(22918, Translator.Get("disableAirshipCamera"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
DisableAirshipVital = BooleanOptionItem.Create(22919, Translator.Get("disableAirshipVital"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
|
||||
DisableFungleDevices = BooleanOptionItem.Create(22925, Translator.Get("disableFungleDevices"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
|
||||
DisableFungleVital = BooleanOptionItem.Create(22927, Translator.Get("disableFungleVital"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleDevices)
|
||||
.SetColor(new Color32(255, 153, 153, byte.MaxValue));
|
||||
|
||||
TabGroupTasks = TextOptionItem.Create(22995, Translator.Get("tabGroupTasks"), TabGroup.ModSettings)
|
||||
.SetColor(Color.yellow);
|
||||
AllPlayersSameTasks = BooleanOptionItem.Create(22998, "Everyone has same tasks", false, TabGroup.ModSettings, false)
|
||||
TaskPercentNeededToWin = IntegerOptionItem.Create(22996, Translator.Get("taskPercentNeededToWin"), new(30, 100, 5), 100, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(255, 255, 153, byte.MaxValue))
|
||||
.SetValueFormat(OptionFormat.Percent);
|
||||
AllPlayersSameTasks = BooleanOptionItem.Create(22998, Translator.Get("allPlayersSameTasks"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(255, 255, 153, byte.MaxValue));
|
||||
OverrideTaskSettings = BooleanOptionItem.Create(22999, Translator.Get("overrideTaskSettings"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(255, 255, 153, byte.MaxValue));
|
||||
OverrideTaskSettings = BooleanOptionItem.Create(22999, "<#ffd>Di<#ffb>sa<#ff9>bl<#ffb>e T<#ffd>as<#ffb>ks", false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(239, 89, 175, byte.MaxValue));
|
||||
|
||||
DisableMiraTasks = BooleanOptionItem.Create(23000, "Disable Mira HQ Tasks", false, TabGroup.ModSettings, false)
|
||||
DisableMiraTasks = BooleanOptionItem.Create(23000, Translator.Get("disableMiraTasks"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(173, 216, 230, byte.MaxValue))
|
||||
.SetParent(OverrideTaskSettings);
|
||||
|
||||
DisableBuyBeverage = BooleanOptionItem.Create(23001, "Disable Buy Beverage", false, TabGroup.ModSettings, false)
|
||||
DisableBuyBeverage = BooleanOptionItem.Create(23001, Translator.Get("disableBuyBeverage"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiraTasks);
|
||||
DisableMeasureWeather = BooleanOptionItem.Create(23002, "Disable Measure Weather", false, TabGroup.ModSettings, false)
|
||||
DisableMeasureWeather = BooleanOptionItem.Create(23002, Translator.Get("disableMeasureWeather"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiraTasks);
|
||||
DisableProcessData = BooleanOptionItem.Create(23003, "Disable Process Data", false, TabGroup.ModSettings, false)
|
||||
DisableProcessData = BooleanOptionItem.Create(23003, Translator.Get("disableProcessData"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiraTasks);
|
||||
DisableRunDiagnostics = BooleanOptionItem.Create(23004, "Disable Run Diagnostics", false, TabGroup.ModSettings, false)
|
||||
DisableRunDiagnostics = BooleanOptionItem.Create(23004, Translator.Get("disableRunDiagnostics"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiraTasks);
|
||||
DisableSortSamples = BooleanOptionItem.Create(23005, "Disable Sort Samples", false, TabGroup.ModSettings, false)
|
||||
DisableSortSamples = BooleanOptionItem.Create(23005, Translator.Get("disableSortSamples"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiraTasks);
|
||||
|
||||
|
||||
|
||||
DisablePolusTasks = BooleanOptionItem.Create(23100, "Disable Polus Tasks", false, TabGroup.ModSettings, false)
|
||||
DisablePolusTasks = BooleanOptionItem.Create(23100, Translator.Get("disablePolusTasks"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(173, 216, 230, byte.MaxValue))
|
||||
.SetParent(OverrideTaskSettings);
|
||||
|
||||
DisableActivateWeatherNodes = BooleanOptionItem.Create(23101, "Disable Activate Weather Nodes", false, TabGroup.ModSettings, false)
|
||||
DisableActivateWeatherNodes = BooleanOptionItem.Create(23101, Translator.Get("disableActivateWeatherNodes"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisablePolusTasks);
|
||||
DisableAlignTelescope = BooleanOptionItem.Create(23102, "Disable Align Telescope", false, TabGroup.ModSettings, false)
|
||||
DisableAlignTelescope = BooleanOptionItem.Create(23102, Translator.Get("disableAlignTelescope"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisablePolusTasks);
|
||||
DisableFillCanisters = BooleanOptionItem.Create(23103, "Disable Fill Canisters", false, TabGroup.ModSettings, false)
|
||||
DisableFillCanisters = BooleanOptionItem.Create(23103, Translator.Get("disableFillCanisters"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisablePolusTasks);
|
||||
DisableInsertKeys = BooleanOptionItem.Create(23104, "Disable Insert Keys", false, TabGroup.ModSettings, false)
|
||||
DisableInsertKeys = BooleanOptionItem.Create(23104, Translator.Get("disableInsertKeys"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisablePolusTasks);
|
||||
DisableOpenWaterways = BooleanOptionItem.Create(23105, "Disable Open Waterways", false, TabGroup.ModSettings, false)
|
||||
DisableOpenWaterways = BooleanOptionItem.Create(23105, Translator.Get("disableOpenWaterways"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisablePolusTasks);
|
||||
DisableRebootWifi = BooleanOptionItem.Create(23106, "Disable Reboot Wifi", false, TabGroup.ModSettings, false)
|
||||
DisableRebootWifi = BooleanOptionItem.Create(23106, Translator.Get("disableRebootWifi"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisablePolusTasks);
|
||||
DisableRepairDrill = BooleanOptionItem.Create(23107, "Disable Repair Drill", false, TabGroup.ModSettings, false)
|
||||
DisableRepairDrill = BooleanOptionItem.Create(23107, Translator.Get("disableRepairDrill"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisablePolusTasks);
|
||||
DisableScanBoardingPass = BooleanOptionItem.Create(23108, "Disable Scan Boarding Pass", false, TabGroup.ModSettings, false)
|
||||
DisableScanBoardingPass = BooleanOptionItem.Create(23108, Translator.Get("disableScanBoardingPass"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisablePolusTasks);
|
||||
|
||||
|
||||
|
||||
DisableAirshipTasks = BooleanOptionItem.Create(23200, "Disable Airship Tasks", false, TabGroup.ModSettings, false)
|
||||
DisableAirshipTasks = BooleanOptionItem.Create(23200, Translator.Get("disableAirshipTasks"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(173, 216, 230, byte.MaxValue))
|
||||
.SetParent(OverrideTaskSettings);
|
||||
|
||||
DisableCleanToilet = BooleanOptionItem.Create(23201, "Disable Clean Toilet", false, TabGroup.ModSettings, false)
|
||||
DisableCleanToilet = BooleanOptionItem.Create(23201, Translator.Get("disableCleanToilet"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisableDecontaminate = BooleanOptionItem.Create(23202, "Disable Decontaminate", false, TabGroup.ModSettings, false)
|
||||
DisableDecontaminate = BooleanOptionItem.Create(23202, Translator.Get("disableDecontaminate"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisableDevelopPhotos = BooleanOptionItem.Create(23203, "Disable Develop Photos", false, TabGroup.ModSettings, false)
|
||||
DisableDevelopPhotos = BooleanOptionItem.Create(23203, Translator.Get("disableDevelopPhotos"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisableDressMannequin = BooleanOptionItem.Create(23204, "Disable Dress Mannequin", false, TabGroup.ModSettings, false)
|
||||
DisableDressMannequin = BooleanOptionItem.Create(23204, Translator.Get("disableDressMannequin"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisableFixShower = BooleanOptionItem.Create(23205, "Disable Fix Shower", false, TabGroup.ModSettings, false)
|
||||
DisableFixShower = BooleanOptionItem.Create(23205, Translator.Get("disableFixShower"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisableMakeBurger = BooleanOptionItem.Create(23206, "Disable Make Burger", false, TabGroup.ModSettings, false)
|
||||
DisableMakeBurger = BooleanOptionItem.Create(23206, Translator.Get("disableMakeBurger"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisablePickUpTowels = BooleanOptionItem.Create(23207, "Disable Pick Up Towels", false, TabGroup.ModSettings, false)
|
||||
DisablePickUpTowels = BooleanOptionItem.Create(23207, Translator.Get("disablePickUpTowels"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisablePolishRuby = BooleanOptionItem.Create(23208, "Disable Polish Ruby", false, TabGroup.ModSettings, false)
|
||||
DisablePolishRuby = BooleanOptionItem.Create(23208, Translator.Get("disablePolishRuby"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisablePutAwayPistols = BooleanOptionItem.Create(23209, "Disable Put Away Pistols", false, TabGroup.ModSettings, false)
|
||||
DisablePutAwayPistols = BooleanOptionItem.Create(23209, Translator.Get("disablePutAwayPistols"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisablePutAwayRifles = BooleanOptionItem.Create(23210, "Disable Put Away Rifles", false, TabGroup.ModSettings, false)
|
||||
DisablePutAwayRifles = BooleanOptionItem.Create(23210, Translator.Get("disablePutAwayRifles"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisableRewindTapes = BooleanOptionItem.Create(23211, "Disable Rewind Tapes", false, TabGroup.ModSettings, false)
|
||||
DisableRewindTapes = BooleanOptionItem.Create(23211, Translator.Get("disableRewindTapes"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisableResetBreaker = BooleanOptionItem.Create(23212, "Disable Reset Breaker Task", false, TabGroup.ModSettings, false)
|
||||
DisableResetBreaker = BooleanOptionItem.Create(23212, Translator.Get("disableResetBreaker"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisableSortRecords = BooleanOptionItem.Create(23213, "Disable Sort Records", false, TabGroup.ModSettings, false)
|
||||
DisableSortRecords = BooleanOptionItem.Create(23213, Translator.Get("disableSortRecords"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisableStartFans = BooleanOptionItem.Create(23214, "Disable Start Fans", false, TabGroup.ModSettings, false)
|
||||
DisableStartFans = BooleanOptionItem.Create(23214, Translator.Get("disableStartFans"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
DisableUnlockSafe = BooleanOptionItem.Create(23215, "Disable Unlock Safe Task", false, TabGroup.ModSettings, false)
|
||||
DisableUnlockSafe = BooleanOptionItem.Create(23215, Translator.Get("disableUnlockSafe"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableAirshipTasks);
|
||||
|
||||
|
||||
|
||||
DisableFungleTasks = BooleanOptionItem.Create(23300, "Disable Fungle Tasks", false, TabGroup.ModSettings, false)
|
||||
DisableFungleTasks = BooleanOptionItem.Create(23300, Translator.Get("disableFungleTasks"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(173, 216, 230, byte.MaxValue))
|
||||
.SetParent(OverrideTaskSettings);
|
||||
|
||||
DisableBuildSandcastle = BooleanOptionItem.Create(23301, "Disable Build Sandcastle", false, TabGroup.ModSettings, false)
|
||||
DisableBuildSandcastle = BooleanOptionItem.Create(23301, Translator.Get("disableBuildSandcastle"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableCatchFish = BooleanOptionItem.Create(23302, "Disable Catch Fish", false, TabGroup.ModSettings, false)
|
||||
DisableCatchFish = BooleanOptionItem.Create(23302, Translator.Get("disableCatchFish"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableCollectSamples = BooleanOptionItem.Create(23303, "Disable Collect Samples", false, TabGroup.ModSettings, false)
|
||||
DisableCollectSamples = BooleanOptionItem.Create(23303, Translator.Get("disableCollectSamples"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableCollectShells = BooleanOptionItem.Create(23304, "Disable Collect Shells", false, TabGroup.ModSettings, false)
|
||||
DisableCollectShells = BooleanOptionItem.Create(23304, Translator.Get("disableCollectShells"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableCollectVegetables = BooleanOptionItem.Create(23305, "Disable Collect Vegetables", false, TabGroup.ModSettings, false)
|
||||
DisableCollectVegetables = BooleanOptionItem.Create(23305, Translator.Get("disableCollectVegetables"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableCrankGenerator = BooleanOptionItem.Create(23306, "Disable Crank Generator", false, TabGroup.ModSettings, false)
|
||||
DisableCrankGenerator = BooleanOptionItem.Create(23306, Translator.Get("disableCrankGenerator"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableExtractFuel = BooleanOptionItem.Create(23307, "Disable Extract Fuel", false, TabGroup.ModSettings, false)
|
||||
DisableExtractFuel = BooleanOptionItem.Create(23307, Translator.Get("disableExtractFuel"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableFixAntenna = BooleanOptionItem.Create(23308, "Disable Fix Antenna", false, TabGroup.ModSettings, false)
|
||||
DisableFixAntenna = BooleanOptionItem.Create(23308, Translator.Get("disableFixAntenna"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableHelpCritter = BooleanOptionItem.Create(23309, "Disable Help Critter", false, TabGroup.ModSettings, false)
|
||||
DisableHelpCritter = BooleanOptionItem.Create(23309, Translator.Get("disableHelpCritter"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableHoistSupplies = BooleanOptionItem.Create(23310, "Disable Hoist Supplies", false, TabGroup.ModSettings, false)
|
||||
DisableHoistSupplies = BooleanOptionItem.Create(23310, Translator.Get("disableHoistSupplies"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableLiftWeights = BooleanOptionItem.Create(23311, "Disable Lift Weights", false, TabGroup.ModSettings, false)
|
||||
DisableLiftWeights = BooleanOptionItem.Create(23311, Translator.Get("disableLiftWeights"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableMineOres = BooleanOptionItem.Create(23312, "Disable Mine Ores", false, TabGroup.ModSettings, false)
|
||||
DisableMineOres = BooleanOptionItem.Create(23312, Translator.Get("disableMineOres"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisablePlayVideoGame = BooleanOptionItem.Create(23313, "Disable Play Video Game", false, TabGroup.ModSettings, false)
|
||||
DisablePlayVideoGame = BooleanOptionItem.Create(23313, Translator.Get("disablePlayVideoGame"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisablePolishGem = BooleanOptionItem.Create(23314, "Disable Polish Gem", false, TabGroup.ModSettings, false)
|
||||
DisablePolishGem = BooleanOptionItem.Create(23314, Translator.Get("disablePolishGem"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableReplaceParts = BooleanOptionItem.Create(23315, "Disable Replace Parts", false, TabGroup.ModSettings, false)
|
||||
DisableReplaceParts = BooleanOptionItem.Create(23315, Translator.Get("disableReplaceParts"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableRoastMarshmallow = BooleanOptionItem.Create(23316, "Disable Roast Marshmallow", false, TabGroup.ModSettings, false)
|
||||
DisableRoastMarshmallow = BooleanOptionItem.Create(23316, Translator.Get("disableRoastMarshmallow"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableThrowFisbee = BooleanOptionItem.Create(23317, "Disable Throw Fisbee", false, TabGroup.ModSettings, false)
|
||||
DisableThrowFisbee = BooleanOptionItem.Create(23317, Translator.Get("disableThrowFisbee"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
DisableFindSignal = BooleanOptionItem.Create(23318, "Disable Find Signal", false, TabGroup.ModSettings, false)
|
||||
DisableFindSignal = BooleanOptionItem.Create(23318, Translator.Get("disableFindSignal"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableFungleTasks);
|
||||
|
||||
|
||||
|
||||
DisableMiscCommonTasks = BooleanOptionItem.Create(23400, "Disable Global Common Tasks", false, TabGroup.ModSettings, false)
|
||||
DisableMiscCommonTasks = BooleanOptionItem.Create(23400, Translator.Get("disableMiscCommonTasks"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(173, 216, 230, byte.MaxValue))
|
||||
.SetParent(OverrideTaskSettings);
|
||||
|
||||
DisableEnterIdCode = BooleanOptionItem.Create(23401, "Disable Enter Id Code", false, TabGroup.ModSettings, false)
|
||||
DisableEnterIdCode = BooleanOptionItem.Create(23401, Translator.Get("disableEnterIdCode"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscCommonTasks);
|
||||
DisableFixWiring = BooleanOptionItem.Create(23402, "Disable Fix Wiring", false, TabGroup.ModSettings, false)
|
||||
DisableFixWiring = BooleanOptionItem.Create(23402, Translator.Get("disableFixWiring"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscCommonTasks);
|
||||
DisableSwipeCard = BooleanOptionItem.Create(23403, "Disable Swipe Card", false, TabGroup.ModSettings, false)
|
||||
DisableSwipeCard = BooleanOptionItem.Create(23403, Translator.Get("disableSwipeCard"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscCommonTasks);
|
||||
|
||||
|
||||
|
||||
DisableMiscShortTasks = BooleanOptionItem.Create(23500, "Disable Global Short Tasks", false, TabGroup.ModSettings, false)
|
||||
DisableMiscShortTasks = BooleanOptionItem.Create(23500, Translator.Get("disableMiscShortTasks"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(173, 216, 230, byte.MaxValue))
|
||||
.SetParent(OverrideTaskSettings);
|
||||
|
||||
DisableAssembleArtifact = BooleanOptionItem.Create(23501, "Disable Assemble Artifact", false, TabGroup.ModSettings, false)
|
||||
DisableAssembleArtifact = BooleanOptionItem.Create(23501, Translator.Get("disableAssembleArtifact"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
DisableChartCourse = BooleanOptionItem.Create(23502, "Disable Chart Course", false, TabGroup.ModSettings, false)
|
||||
DisableChartCourse = BooleanOptionItem.Create(23502, Translator.Get("disableChartCourse"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
DisableCleanO2Filter = BooleanOptionItem.Create(23503, "Disable Clean O2 Filter", false, TabGroup.ModSettings, false)
|
||||
DisableCleanO2Filter = BooleanOptionItem.Create(23503, Translator.Get("disableCleanO2Filter"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
DisableCleanVent = BooleanOptionItem.Create(23504, "Disable Clean Vent", false, TabGroup.ModSettings, false)
|
||||
DisableCleanVent = BooleanOptionItem.Create(23504, Translator.Get("disableCleanVent"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
DisableMonitorMushroom = BooleanOptionItem.Create(23506, "Disable Monitor Mushroom", false, TabGroup.ModSettings, false)
|
||||
DisableMonitorMushroom = BooleanOptionItem.Create(23506, Translator.Get("disableMonitorMushroom"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
DisableMonitorTree = BooleanOptionItem.Create(23507, "Disable Monitor Tree", false, TabGroup.ModSettings, false)
|
||||
DisableMonitorTree = BooleanOptionItem.Create(23507, Translator.Get("disableMonitorTree"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
DisablePrimeShields = BooleanOptionItem.Create(23508, "Disable Prime Shields", false, TabGroup.ModSettings, false)
|
||||
DisablePrimeShields = BooleanOptionItem.Create(23508, Translator.Get("disablePrimeShields"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
DisableRecordTemperature = BooleanOptionItem.Create(23509, "Disable Record Temperature", false, TabGroup.ModSettings, false)
|
||||
DisableRecordTemperature = BooleanOptionItem.Create(23509, Translator.Get("disableRecordTemperature"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
DisableStabilizeSteering = BooleanOptionItem.Create(23510, "Disable Stabilize Steering", false, TabGroup.ModSettings, false)
|
||||
DisableStabilizeSteering = BooleanOptionItem.Create(23510, Translator.Get("disableStabilizeSteering"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
DisableStoreArtifacts = BooleanOptionItem.Create(23511, "Disable Store Artifacts", false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
DisableUnlockManifolds = BooleanOptionItem.Create(23512, "Disable Unlock Manifolds", false, TabGroup.ModSettings, false)
|
||||
DisableStoreArtifacts = BooleanOptionItem.Create(23511, Translator.Get("disableStoreArtifacts"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
DisableUnlockManifolds = BooleanOptionItem.Create(23512, Translator.Get("disableUnlockManifolds"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscShortTasks);
|
||||
|
||||
|
||||
DisableMiscLongTasks = BooleanOptionItem.Create(23600, "Disable Global Long Tasks", false, TabGroup.ModSettings, false)
|
||||
DisableMiscLongTasks = BooleanOptionItem.Create(23600, Translator.Get("disableMiscLongTasks"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(173, 216, 230, byte.MaxValue))
|
||||
.SetParent(OverrideTaskSettings);
|
||||
|
||||
DisableAlignEngineOutput = BooleanOptionItem.Create(23601, "Disable Align Engine Output", false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscLongTasks);
|
||||
DisableClearAsteroids = BooleanOptionItem.Create(23602, "Disable Clear Asteroids", false, TabGroup.ModSettings, false)
|
||||
DisableAlignEngineOutput = BooleanOptionItem.Create(23601, Translator.Get("disableAlignEngineOutput"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscLongTasks);
|
||||
DisableEmptyChute = BooleanOptionItem.Create(23603, "Disable Empty Chute", false, TabGroup.ModSettings, false)
|
||||
DisableClearAsteroids = BooleanOptionItem.Create(23602, Translator.Get("disableClearAsteroids"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscLongTasks);
|
||||
DisableInspectSample = BooleanOptionItem.Create(23604, "Disable Inspect Sample", false, TabGroup.ModSettings, false)
|
||||
DisableEmptyChute = BooleanOptionItem.Create(23603, Translator.Get("disableEmptyChute"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscLongTasks);
|
||||
DisableReplaceWaterJug = BooleanOptionItem.Create(23605, "Disable Replace Water Jug", false, TabGroup.ModSettings, false)
|
||||
DisableInspectSample = BooleanOptionItem.Create(23604, Translator.Get("disableInspectSample"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscLongTasks);
|
||||
DisableStartReactor = BooleanOptionItem.Create(23606, "Disable Start Reactor", false, TabGroup.ModSettings, false)
|
||||
DisableReplaceWaterJug = BooleanOptionItem.Create(23605, Translator.Get("disableReplaceWaterJug"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscLongTasks);
|
||||
DisableWaterPlants = BooleanOptionItem.Create(23607, "Disable Water Plants", false, TabGroup.ModSettings, false)
|
||||
DisableStartReactor = BooleanOptionItem.Create(23606, Translator.Get("disableStartReactor"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscLongTasks);
|
||||
DisableWaterPlants = BooleanOptionItem.Create(23607, Translator.Get("disableWaterPlants"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscLongTasks);
|
||||
|
||||
|
||||
|
||||
DisableMiscMixedTasks = BooleanOptionItem.Create(23700, "Disable Global Mixed Tasks", false, TabGroup.ModSettings, false)
|
||||
DisableMiscMixedTasks = BooleanOptionItem.Create(23700, Translator.Get("disableMiscMixedTasks"), false, TabGroup.ModSettings, false)
|
||||
.SetColor(new Color32(173, 216, 230, byte.MaxValue))
|
||||
.SetParent(OverrideTaskSettings);
|
||||
|
||||
DisableCalibrateDistributor = BooleanOptionItem.Create(23701, "Disable Calibrate Distributor", false, TabGroup.ModSettings, false)
|
||||
DisableCalibrateDistributor = BooleanOptionItem.Create(23701, Translator.Get("disableCalibrateDistributor"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscMixedTasks);
|
||||
DisableDivertPower = BooleanOptionItem.Create(23702, "Disable Divert Power", false, TabGroup.ModSettings, false)
|
||||
DisableDivertPower = BooleanOptionItem.Create(23702, Translator.Get("disableDivertPower"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscMixedTasks);
|
||||
DisableEmptyGarbage = BooleanOptionItem.Create(23703, "Disable Empty Garbage", false, TabGroup.ModSettings, false)
|
||||
DisableEmptyGarbage = BooleanOptionItem.Create(23703, Translator.Get("disableEmptyGarbage"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscMixedTasks);
|
||||
DisableFuelEngines = BooleanOptionItem.Create(23704, "Disable Fuel Engines", false, TabGroup.ModSettings, false)
|
||||
DisableFuelEngines = BooleanOptionItem.Create(23704, Translator.Get("disableFuelEngines"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscMixedTasks);
|
||||
DisableSubmitScan = BooleanOptionItem.Create(23705, "Disable Submit Scan", false, TabGroup.ModSettings, false)
|
||||
DisableSubmitScan = BooleanOptionItem.Create(23705, Translator.Get("disableSubmitScan"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscMixedTasks);
|
||||
DisableUploadData = BooleanOptionItem.Create(23706, "Disable Upload Data", false, TabGroup.ModSettings, false)
|
||||
DisableUploadData = BooleanOptionItem.Create(23706, Translator.Get("disableUploadData"), false, TabGroup.ModSettings, false)
|
||||
.SetParent(DisableMiscMixedTasks);
|
||||
|
||||
IsLoaded = true;
|
||||
|
||||
@@ -0,0 +1,386 @@
|
||||
using AmongUs.GameOptions;
|
||||
using Hazel;
|
||||
using System;
|
||||
using InnerNet;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
// It was a fun ride, but this won't last.
|
||||
// Edit: WE ARE SO BACK
|
||||
// Edit 2: Hello old friend. It's time to go again.
|
||||
|
||||
public static class AbilityManagement
|
||||
{
|
||||
/*
|
||||
public static bool IsMayor(PlayerControl player)
|
||||
{
|
||||
if (player.Data.RoleType == RoleTypes.Crewmate && Options.CrewmateAbility.GetValue() == 0 ||
|
||||
player.Data.RoleType == RoleTypes.Scientist && Options.ScientistAbility.GetValue() == 0 ||
|
||||
player.Data.RoleType == RoleTypes.Engineer && Options.EngineerAbility.GetValue() == 0 ||
|
||||
player.Data.RoleType == RoleTypes.Noisemaker && Options.NoisemakerAbility.GetValue() == 0 ||
|
||||
player.Data.RoleType == RoleTypes.Tracker && Options.TrackerAbility.GetValue() == 0 ||
|
||||
player.Data.RoleType == RoleTypes.Detective && Options.DetectiveAbility.GetValue() == 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static bool IsWorkhorse(PlayerControl player)
|
||||
{
|
||||
if (player.Data.RoleType == RoleTypes.Crewmate && Options.CrewmateAbility.GetValue() == 1 ||
|
||||
player.Data.RoleType == RoleTypes.Scientist && Options.ScientistAbility.GetValue() == 1 ||
|
||||
player.Data.RoleType == RoleTypes.Engineer && Options.EngineerAbility.GetValue() == 1 ||
|
||||
player.Data.RoleType == RoleTypes.Noisemaker && Options.NoisemakerAbility.GetValue() == 1 ||
|
||||
player.Data.RoleType == RoleTypes.Tracker && Options.TrackerAbility.GetValue() == 1 ||
|
||||
player.Data.RoleType == RoleTypes.Detective && Options.DetectiveAbility.GetValue() == 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static bool IsJester(PlayerControl player)
|
||||
{
|
||||
if (player.Data.RoleType == RoleTypes.Crewmate && Options.CrewmateAbility.GetValue() == 2 ||
|
||||
player.Data.RoleType == RoleTypes.Scientist && Options.ScientistAbility.GetValue() == 2 ||
|
||||
player.Data.RoleType == RoleTypes.Engineer && Options.EngineerAbility.GetValue() == 2 ||
|
||||
player.Data.RoleType == RoleTypes.Noisemaker && Options.NoisemakerAbility.GetValue() == 2 ||
|
||||
player.Data.RoleType == RoleTypes.Tracker && Options.TrackerAbility.GetValue() == 2 ||
|
||||
player.Data.RoleType == RoleTypes.Detective && Options.DetectiveAbility.GetValue() == 2)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static bool IsSpeedrunner(PlayerControl player)
|
||||
{
|
||||
if (player.Data.RoleType == RoleTypes.Crewmate && Options.CrewmateAbility.GetValue() == 3 ||
|
||||
player.Data.RoleType == RoleTypes.Scientist && Options.ScientistAbility.GetValue() == 3 ||
|
||||
player.Data.RoleType == RoleTypes.Engineer && Options.EngineerAbility.GetValue() == 3 ||
|
||||
player.Data.RoleType == RoleTypes.Noisemaker && Options.NoisemakerAbility.GetValue() == 3 ||
|
||||
player.Data.RoleType == RoleTypes.Tracker && Options.TrackerAbility.GetValue() == 3 ||
|
||||
player.Data.RoleType == RoleTypes.Detective && Options.DetectiveAbility.GetValue() == 3)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static bool IsTyrant(PlayerControl player)
|
||||
{
|
||||
if (player.Data.RoleType == RoleTypes.Impostor && Options.ImpostorAbility.GetValue() == 0 ||
|
||||
player.Data.RoleType == RoleTypes.Shapeshifter && Options.ShapeshifterAbility.GetValue() == 0 ||
|
||||
player.Data.RoleType == RoleTypes.Phantom && Options.PhantomAbility.GetValue() == 0 ||
|
||||
player.Data.RoleType == RoleTypes.Viper && Options.ViperAbility.GetValue() == 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static bool IsStealer(PlayerControl player)
|
||||
{
|
||||
if (player.Data.RoleType == RoleTypes.Impostor && Options.ImpostorAbility.GetValue() == 1 ||
|
||||
player.Data.RoleType == RoleTypes.Shapeshifter && Options.ShapeshifterAbility.GetValue() == 1 ||
|
||||
player.Data.RoleType == RoleTypes.Phantom && Options.PhantomAbility.GetValue() == 1 ||
|
||||
player.Data.RoleType == RoleTypes.Viper && Options.ViperAbility.GetValue() == 1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static bool IsJuggernaut(PlayerControl player)
|
||||
{
|
||||
if (player.Data.RoleType == RoleTypes.Impostor && Options.ImpostorAbility.GetValue() == 2 ||
|
||||
player.Data.RoleType == RoleTypes.Shapeshifter && Options.ShapeshifterAbility.GetValue() == 2 ||
|
||||
player.Data.RoleType == RoleTypes.Phantom && Options.PhantomAbility.GetValue() == 2 ||
|
||||
player.Data.RoleType == RoleTypes.Viper && Options.ViperAbility.GetValue() == 2)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
}
|
||||
|
||||
public static string RoleList()
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return "";
|
||||
|
||||
var lines = new List<string>();
|
||||
|
||||
if (Options.CrewmateAbility.GetValue() != 4) lines.Add($"Crewmate: {Options.CrewmateAbility.GetString()}");
|
||||
if (Options.ScientistAbility.GetValue() != 4) lines.Add($"Scientist: {Options.ScientistAbility.GetString()}");
|
||||
if (Options.EngineerAbility.GetValue() != 4) lines.Add($"Engineer: {Options.EngineerAbility.GetString()}");
|
||||
if (Options.NoisemakerAbility.GetValue() != 4) lines.Add($"Noisemaker: {Options.NoisemakerAbility.GetString()}");
|
||||
if (Options.TrackerAbility.GetValue() != 4) lines.Add($"Tracker: {Options.TrackerAbility.GetString()}");
|
||||
if (Options.DetectiveAbility.GetValue() != 4) lines.Add($"Detective: {Options.DetectiveAbility.GetString()}");
|
||||
|
||||
if (Options.ImpostorAbility.GetValue() != 3) lines.Add($"Impostor: {Options.ImpostorAbility.GetString()}");
|
||||
if (Options.ShapeshifterAbility.GetValue() != 3) lines.Add($"Shapeshifter: {Options.ShapeshifterAbility.GetString()}");
|
||||
if (Options.PhantomAbility.GetValue() != 3) lines.Add($"Phantom: {Options.PhantomAbility.GetString()}");
|
||||
if (Options.ViperAbility.GetValue() != 3) lines.Add($"Viper: {Options.ViperAbility.GetString()}");
|
||||
|
||||
if (lines.Count == 0) return "";
|
||||
|
||||
return "ABILITIES:\n\n" + string.Join("\n", lines);
|
||||
}
|
||||
|
||||
public static void SendRoleList(ChatController c, string text, bool moderator)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
if (string.IsNullOrEmpty(RoleList()) || Utils.isHideNSeek) return;
|
||||
|
||||
if (text.Length <= 120)
|
||||
{
|
||||
if (moderator) Utils.ModeratorChatCommand(text, "", false);
|
||||
else Utils.ChatCommand(c, text, "", false);
|
||||
return;
|
||||
}
|
||||
|
||||
int splitIndex = text.LastIndexOf('\n', 120);
|
||||
|
||||
if (splitIndex <= 0) splitIndex = 120;
|
||||
|
||||
string first = text[..splitIndex];
|
||||
string second = text[(splitIndex + 1)..];
|
||||
|
||||
if (moderator) Utils.ModeratorChatCommand(first, second, true);
|
||||
else Utils.ChatCommand(c, first, second, true);
|
||||
}
|
||||
|
||||
public static bool HandlingRoleMessages = false;
|
||||
public static void SendRoleMessages()
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost || Options.Gamemode.GetValue() > 1 || Utils.isHideNSeek) return;
|
||||
|
||||
if (string.IsNullOrEmpty(RoleList()) || PlayerControl.LocalPlayer.Data.IsDead)
|
||||
{
|
||||
HandlingRoleMessages = false;
|
||||
return;
|
||||
}
|
||||
|
||||
HandlingRoleMessages = true;
|
||||
|
||||
SendRoleList(DestroyableSingleton<HudManager>.Instance.Chat, AbilityManagement.RoleList(), true);
|
||||
|
||||
new LateTask(() =>
|
||||
{
|
||||
if (Utils.InGame)
|
||||
{
|
||||
Utils.ChatCommand(DestroyableSingleton<HudManager>.Instance.Chat, "Custom Abilities are on!\n\nIf you have one of the roles above, you also have the Ability next to it.", "", false);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.Info("Role sending was forcefully canceled. This should not happen.", "SendRoleMessages");
|
||||
}
|
||||
|
||||
HandlingRoleMessages = false;
|
||||
|
||||
}, 6.6f, "SendRoleMessage");
|
||||
}
|
||||
}
|
||||
|
||||
public static class CustomRoleManagement
|
||||
{
|
||||
public static Dictionary<byte, string> PlayerRoles = new Dictionary<byte, string>();
|
||||
private static readonly System.Random random = new System.Random();
|
||||
|
||||
public static string GetRole(byte playerId)
|
||||
{
|
||||
PlayerRoles.TryGetValue(playerId, out string role);
|
||||
return role ?? "None";
|
||||
}
|
||||
|
||||
public static void AssignRoles()
|
||||
{
|
||||
if (Options.Gamemode.GetValue() > 1) return;
|
||||
|
||||
// crewmateRoles = assigned with crewmate role base
|
||||
// impostorRoles = assigned with impostor role base
|
||||
List<(string roleName, int percentage)> crewmateRoles = new()
|
||||
{
|
||||
("Jester", Options.JesterPerc.GetInt()),
|
||||
("Mayor", Options.MayorPerc.GetInt())
|
||||
};
|
||||
|
||||
List<(string roleName, int percentage)> impostorRoles = new()
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
List<PlayerControl> availablePlayers = new();
|
||||
foreach (var player in PlayerControl.AllPlayerControls) availablePlayers.Add(player);
|
||||
availablePlayers = availablePlayers.OrderBy(x => random.Next()).ToList();
|
||||
PlayerRoles.Clear();
|
||||
|
||||
HashSet<string> assignedRoles = new HashSet<string>();
|
||||
HashSet<string> attemptedRoles = new HashSet<string>();
|
||||
|
||||
foreach (var player in availablePlayers)
|
||||
{
|
||||
bool isCrewmate = !player.Data.Role.IsImpostor;
|
||||
var rolesToAssign = isCrewmate ? crewmateRoles : impostorRoles;
|
||||
|
||||
foreach (var (roleName, percentage) in rolesToAssign)
|
||||
{
|
||||
if (attemptedRoles.Contains(roleName) || percentage == 0) continue;
|
||||
|
||||
attemptedRoles.Add(roleName);
|
||||
|
||||
int randomValue = random.Next(0, 101);
|
||||
Logger.Info($"{roleName}, Value: {randomValue}, Percentage: {percentage}", "StartGameCustomRole1");
|
||||
|
||||
if (randomValue > percentage) continue;
|
||||
if (PlayerRoles.ContainsKey(player.PlayerId)) continue;
|
||||
|
||||
PlayerRoles[player.PlayerId] = roleName;
|
||||
assignedRoles.Add(roleName);
|
||||
|
||||
Logger.Info($"({player.PlayerId}) {player.Data.PlayerName} -> {roleName}", "StartGameCustomRole2");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static string TD(string input)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input)) return input;
|
||||
|
||||
var sb = new System.Text.StringBuilder(input.Length);
|
||||
|
||||
foreach (char c in input)
|
||||
{
|
||||
if (char.IsDigit(c))
|
||||
sb.Append(Main.CircledDigits[c - '0']);
|
||||
else
|
||||
sb.Append(c);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
public static string GetActiveRoles()
|
||||
{
|
||||
var crewmateRoles = new List<string>();
|
||||
var neutralRoles = new List<string>();
|
||||
var impostorRoles = new List<string>();
|
||||
var lines = new List<string>();
|
||||
|
||||
if (Options.MayorPerc.GetInt() > 1) crewmateRoles.Add(Translator.Get("Mayor") + TD(Options.MayorPerc.GetInt().ToString()) + "%");
|
||||
|
||||
if (Options.JesterPerc.GetInt() > 1) neutralRoles.Add(Translator.Get("Jester") + TD(Options.JesterPerc.GetInt().ToString()) + "%");
|
||||
|
||||
void AddCategory(string header, List<string> roles)
|
||||
{
|
||||
if (roles.Count == 0) return;
|
||||
|
||||
if (lines.Count > 0) lines.Add("");
|
||||
|
||||
lines.Add(header);
|
||||
lines.AddRange(roles);
|
||||
}
|
||||
|
||||
AddCategory("Crewmate:", crewmateRoles);
|
||||
AddCategory("Neutral:", neutralRoles);
|
||||
AddCategory("Impostor:", impostorRoles);
|
||||
|
||||
return lines.Count > 0 ? string.Join("\n", lines) : string.Empty;
|
||||
}
|
||||
|
||||
public static bool HandlingRoleMessages = false;
|
||||
private static int PendingRoleMessages = 0;
|
||||
public static void SendRoleMessages(Dictionary<string, string> roleMessages)
|
||||
{
|
||||
if (PlayerRoles.Count == 0 || PlayerControl.LocalPlayer.Data.IsDead)
|
||||
{
|
||||
HandlingRoleMessages = false;
|
||||
PendingRoleMessages = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
HashSet<string> sentRoles = new HashSet<string>();
|
||||
|
||||
var players = PlayerControl.AllPlayerControls.ToArray().ToList();
|
||||
float delay = 2.2f;
|
||||
|
||||
PendingRoleMessages = 0;
|
||||
HandlingRoleMessages = true;
|
||||
|
||||
PlayerControl.LocalPlayer.RpcSendChat($"{Translator.Get("customRoleAnnouncement")}");
|
||||
|
||||
foreach (var player in players)
|
||||
{
|
||||
PlayerRoles.TryGetValue(player.PlayerId, out string role);
|
||||
|
||||
if (string.IsNullOrEmpty(role)) continue;
|
||||
if (!roleMessages.ContainsKey(role)) continue;
|
||||
if (sentRoles.Contains(role)) continue;
|
||||
|
||||
PendingRoleMessages++;
|
||||
new LateTask(() =>
|
||||
{
|
||||
if (Utils.InGame)
|
||||
{
|
||||
Utils.SendPrivateMessage(player, roleMessages[role]);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.Info("Role sending was forcefully canceled. This should not happen.", "SendRoleMessages");
|
||||
}
|
||||
|
||||
PendingRoleMessages--;
|
||||
|
||||
if (PendingRoleMessages <= 0)
|
||||
{
|
||||
PendingRoleMessages = 0;
|
||||
HandlingRoleMessages = false;
|
||||
sentRoles.Clear();
|
||||
}
|
||||
}, delay, "SendRoleMessage");
|
||||
|
||||
sentRoles.Add(role);
|
||||
delay += 2.2f;
|
||||
}
|
||||
}
|
||||
|
||||
public static string PlayerToCustomRole()
|
||||
{
|
||||
if (CustomRoleManagement.PlayerRoles.Count == 0) return string.Empty;
|
||||
|
||||
Dictionary<string, List<string>> roleToPlayers = new Dictionary<string, List<string>>();
|
||||
|
||||
foreach (var kvp in CustomRoleManagement.PlayerRoles)
|
||||
{
|
||||
byte playerId = kvp.Key;
|
||||
string role = kvp.Value;
|
||||
|
||||
PlayerControl pc = null;
|
||||
foreach (var p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.PlayerId == playerId)
|
||||
{
|
||||
pc = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (pc == null) continue;
|
||||
|
||||
if (!roleToPlayers.ContainsKey(role)) roleToPlayers[role] = new List<string>();
|
||||
roleToPlayers[role].Add(pc.Data.PlayerName);
|
||||
}
|
||||
|
||||
if (roleToPlayers.Count == 0) return string.Empty;
|
||||
|
||||
var lines = new List<string>();
|
||||
|
||||
foreach (var entry in roleToPlayers)
|
||||
{
|
||||
string players = string.Join(", ", entry.Value);
|
||||
lines.Add($"{entry.Key}: {players}");
|
||||
}
|
||||
return string.Join("\n", lines);
|
||||
}
|
||||
*/
|
||||
}
|
||||
+43
-66
@@ -27,93 +27,70 @@ public static class FixedUpdate
|
||||
{
|
||||
nr.SetActive(false);
|
||||
}
|
||||
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
DisableDevice.FixedUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.FixedUpdate))]
|
||||
class FixedUpdateInGamePatch
|
||||
{
|
||||
public static readonly HashSet<byte> ProcessedModerators = new HashSet<byte>();
|
||||
private static Dictionary<byte, string> LastColors = new();
|
||||
private static float t;
|
||||
private static GameObject settingsLabel;
|
||||
|
||||
public static void Postfix(PlayerControl __instance)
|
||||
{
|
||||
if (__instance == null || __instance.PlayerId == 255 || !AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
if (Utils.IsPlayerModerator(__instance.Data.FriendCode) && !ProcessedModerators.Contains(__instance.PlayerId))
|
||||
t += Time.deltaTime;
|
||||
if (t < 0.2f) return;
|
||||
t = 0f;
|
||||
|
||||
if (Utils.IsLobby)
|
||||
{
|
||||
__instance.SetName($"★{__instance.Data.PlayerName}★");
|
||||
ProcessedModerators.Add(__instance.PlayerId);
|
||||
}
|
||||
|
||||
GameObject g = GameObject.Find("GameSettingsLabel");
|
||||
|
||||
// 0Kc
|
||||
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && Main.NormalOptions.KillCooldown != 0.01f)
|
||||
{
|
||||
Main.NormalOptions.KillCooldown = 0.01f;
|
||||
|
||||
if (Options.NoKcdSettingsOverride.GetBool() && g == null)
|
||||
int access = Utils.CheckAccessLevel(__instance.Data.FriendCode);
|
||||
string color = access switch
|
||||
{
|
||||
Main.NormalOptions.EmergencyCooldown = 0;
|
||||
1 => "yellow",
|
||||
2 => "purple",
|
||||
3 => "red",
|
||||
_ => "white"
|
||||
};
|
||||
|
||||
Main.NormalOptions.TaskBarMode = 0;
|
||||
if (!LastColors.TryGetValue(__instance.PlayerId, out var lastColor) || lastColor != color || !__instance.cosmetics.nameText.text.Contains($"<color={color}>"))
|
||||
{
|
||||
__instance.cosmetics.nameText.text = $"<color={color}>{__instance.Data.PlayerName}</color>";
|
||||
LastColors[__instance.PlayerId] = color;
|
||||
}
|
||||
}
|
||||
|
||||
// SnS
|
||||
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek && Main.NormalOptions.KillCooldown != 2.5f)
|
||||
if (settingsLabel == null) settingsLabel = GameObject.Find("GameSettingsLabel");
|
||||
|
||||
int gamemode = Options.Gamemode.GetValue();
|
||||
|
||||
switch (gamemode)
|
||||
{
|
||||
Main.NormalOptions.KillCooldown = 2.5f;
|
||||
case 0:
|
||||
break;
|
||||
|
||||
if (Options.SNSSettingsOverride.GetBool() && g == null)
|
||||
{
|
||||
Main.NormalOptions.TaskBarMode = 0;
|
||||
}
|
||||
}
|
||||
case 1: // SnS
|
||||
if (Main.NormalOptions.KillCooldown != 2.5f)
|
||||
Main.NormalOptions.KillCooldown = 2.5f;
|
||||
|
||||
// Speedrun
|
||||
if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek && g == null)
|
||||
{
|
||||
Main.NormalOptions.TaskBarMode = 0;
|
||||
if (Options.SNSSettingsOverride.GetBool() && settingsLabel == null)
|
||||
Main.NormalOptions.TaskBarMode = 0;
|
||||
break;
|
||||
|
||||
if (__instance.AllTasksCompleted() && Utils.InGame && Utils.GamePastRoleSelection && !Utils.HandlingGameEnd)
|
||||
{
|
||||
if (__instance == PlayerControl.LocalPlayer && Main.GM.Value) return;
|
||||
|
||||
Utils.CustomWinnerEndGame(__instance, 1);
|
||||
NormalGameEndChecker.LastWinReason = $"★ {__instance.Data.PlayerName} Wins! (Completed tasks first)";
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (Options.Gamemode.GetValue() == 0 && Main.NormalOptions.KillCooldown <= 0.01f)
|
||||
{
|
||||
Main.NormalOptions.KillCooldown = 25f;
|
||||
}
|
||||
|
||||
if (AmongUsClient.Instance.AmHost)
|
||||
{
|
||||
if (__instance.Data.PlayerLevel != 0 && __instance.Data.PlayerLevel < Options.KickLowLevelPlayer.GetInt() && __instance.Data.ClientId != AmongUsClient.Instance.HostId)
|
||||
{
|
||||
if (!Options.TempBanLowLevelPlayer.GetBool())
|
||||
{
|
||||
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, false);
|
||||
Logger.Info($" {__instance.Data.PlayerName} was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}", "KickLowLevelPlayer");
|
||||
Logger.SendInGame($" {__instance.Data.PlayerName} was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}");
|
||||
}
|
||||
else
|
||||
{
|
||||
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, true);
|
||||
Logger.Info($" {__instance.Data.PlayerName} was banned for being under level {Options.KickLowLevelPlayer.GetInt()} ", "BanLowLevelPlayer");
|
||||
Logger.SendInGame($" {__instance.Data.PlayerName} was banned for being under level {Options.KickLowLevelPlayer.GetInt()}");
|
||||
}
|
||||
}
|
||||
case 2: // Speedrun
|
||||
break;
|
||||
}
|
||||
|
||||
if (Utils.InGame && !Utils.IsMeeting && !ExileController.Instance)
|
||||
{
|
||||
// 2 = Shift and Seek
|
||||
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek && Options.CrewAutoWinsGameAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool())
|
||||
// 1 = Shift and Seek
|
||||
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && Options.CrewAutoWinsGameAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool())
|
||||
{
|
||||
if (Main.GameTimer > Options.CrewAutoWinsGameAfter.GetInt())
|
||||
{
|
||||
@@ -121,11 +98,11 @@ class FixedUpdateInGamePatch
|
||||
|
||||
Utils.ContinueEndGame((byte)GameOverReason.CrewmatesByVote);
|
||||
Logger.Info($" Crewmates won because the game took longer than {Options.CrewAutoWinsGameAfter.GetInt()}s", "SNSManager");
|
||||
NormalGameEndChecker.LastWinReason = $"★ Crewmates win! (Timer)\n\nImpostors:\n" + string.Join("\n", NormalGameEndChecker.imps.Select(p => p.Data.PlayerName));
|
||||
NormalGameEndChecker.CheckWinnerText("SnSTimer");
|
||||
}
|
||||
}
|
||||
// 3 = Speedrun
|
||||
if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek && Options.GameAutoEndsAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool())
|
||||
// 2 = Speedrun
|
||||
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek && Options.GameAutoEndsAfter.GetInt() != 0 && !Options.NoGameEnd.GetBool())
|
||||
{
|
||||
if (Main.GameTimer > Options.GameAutoEndsAfter.GetInt())
|
||||
{
|
||||
@@ -133,7 +110,7 @@ class FixedUpdateInGamePatch
|
||||
|
||||
Utils.CustomWinnerEndGame(PlayerControl.LocalPlayer, 0);
|
||||
Logger.Info($" No one won because the game took longer than {Options.GameAutoEndsAfter.GetInt()}s", "SpeedrunManager");
|
||||
NormalGameEndChecker.LastWinReason = $"★ No one wins! (Timer)";
|
||||
NormalGameEndChecker.CheckWinnerText("NoOneWin");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using System.Linq.Expressions;
|
||||
using System.Reflection;
|
||||
using Il2CppInterop.Runtime;
|
||||
using Il2CppInterop.Runtime.InteropTypes;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
|
||||
// Credit: TommyXL
|
||||
public static class Il2CppCastHelper
|
||||
{
|
||||
public static T CastFast<T>(this Il2CppObjectBase obj) where T : Il2CppObjectBase
|
||||
{
|
||||
if (obj is T casted) return casted;
|
||||
#if ANDROID
|
||||
return obj.Cast<T>();
|
||||
#else
|
||||
return obj.Pointer.CastFast<T>();
|
||||
#endif
|
||||
}
|
||||
|
||||
private static T CastFast<T>(this IntPtr ptr) where T : Il2CppObjectBase
|
||||
{
|
||||
return CastHelper<T>.Cast(ptr);
|
||||
}
|
||||
|
||||
private static class CastHelper<T> where T : Il2CppObjectBase
|
||||
{
|
||||
public static readonly Func<IntPtr, T> Cast;
|
||||
|
||||
static CastHelper()
|
||||
{
|
||||
ConstructorInfo constructor = typeof(T).GetConstructor([typeof(IntPtr)]);
|
||||
ParameterExpression ptr = Expression.Parameter(typeof(IntPtr));
|
||||
NewExpression create = Expression.New(constructor!, ptr);
|
||||
Expression<Func<IntPtr, T>> lambda = Expression.Lambda<Func<IntPtr, T>>(create, ptr);
|
||||
Cast = lambda.Compile();
|
||||
}
|
||||
}
|
||||
}
|
||||
+19
-13
@@ -5,16 +5,26 @@ using UnityEngine;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
#if !ANDROID
|
||||
[HarmonyPatch(typeof(ControllerManager), nameof(ControllerManager.Update))]
|
||||
internal class Hotkeys
|
||||
{
|
||||
public static int IncrementMultiplier;
|
||||
public static void Postfix()
|
||||
{
|
||||
// I don't know which psychopath would use right keys, but I know someday, someone will complain
|
||||
if (AmongUsClient.Instance == null || PlayerControl.LocalPlayer == null) return;
|
||||
|
||||
bool Shift = Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift);
|
||||
bool Ctrl = Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl);
|
||||
bool Enter = Input.GetKeyDown(KeyCode.Return);
|
||||
|
||||
if ((!AmongUsClient.Instance.IsGameStarted || !Utils.IsOnlineGame) && Utils.CanMove && PlayerControl.LocalPlayer.Collider != null)
|
||||
{
|
||||
PlayerControl.LocalPlayer.Collider.enabled = !Ctrl;
|
||||
}
|
||||
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
if (Input.GetKey(KeyCode.L) && Shift && Enter)
|
||||
{
|
||||
MessageWriter writer = AmongUsClient.Instance.StartEndGame();
|
||||
@@ -28,27 +38,23 @@ internal class Hotkeys
|
||||
{
|
||||
MeetingHud.Instance.RpcClose();
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayerControl.LocalPlayer.ReportDeadBody(PlayerControl.LocalPlayer.Data);
|
||||
}
|
||||
}
|
||||
|
||||
if (Shift && GameStartManager.InstanceExists && GameStartManager.Instance.startState == GameStartManager.StartingStates.Countdown && !HudManager.Instance.Chat.IsOpenOrOpening)
|
||||
if (Shift && GameStartManager.InstanceExists && GameStartManager.Instance != null && GameStartManager.Instance.startState == GameStartManager.StartingStates.Countdown && !HudManager.Instance.Chat.IsOpenOrOpening)
|
||||
{
|
||||
GameStartManager.Instance.countDownTimer = 0;
|
||||
}
|
||||
|
||||
if ((!AmongUsClient.Instance.IsGameStarted || !Utils.IsOnlineGame) && Utils.CanMove && PlayerControl.LocalPlayer.Collider != null)
|
||||
{
|
||||
PlayerControl.LocalPlayer.Collider.enabled = !Ctrl;
|
||||
}
|
||||
|
||||
if (Input.GetKeyDown(KeyCode.C) && GameStartManager.Instance.startState == GameStartManager.StartingStates.Countdown && !HudManager.Instance.Chat.IsOpenOrOpening && Utils.IsLobby)
|
||||
if (Input.GetKeyDown(KeyCode.C) && GameStartManager.InstanceExists && GameStartManager.Instance != null && GameStartManager.Instance.startState == GameStartManager.StartingStates.Countdown && !HudManager.Instance.Chat.IsOpenOrOpening && Utils.IsLobby)
|
||||
{
|
||||
Logger.Info("Resetted start countdown", "KeyCommand");
|
||||
GameStartManager.Instance.ResetStartState();
|
||||
Logger.SendInGame("Starting countdown canceled");
|
||||
}
|
||||
|
||||
if (Shift) IncrementMultiplier = 5;
|
||||
else if (Ctrl) IncrementMultiplier = 10;
|
||||
else IncrementMultiplier = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -214,7 +214,7 @@ namespace AmongUsRevamped
|
||||
public enum TabGroup
|
||||
{
|
||||
SystemSettings,
|
||||
CustomRoleSettings,
|
||||
//CustomRoleSettings,
|
||||
ModSettings,
|
||||
GamemodeSettings,
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@ using UnityEngine;
|
||||
using System;
|
||||
using AmongUs.GameOptions;
|
||||
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace AmongUsRevamped
|
||||
{
|
||||
public enum CustomRPC
|
||||
|
||||
@@ -0,0 +1,176 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Text.Json;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
public static class Translator
|
||||
{
|
||||
public enum SupportedLangs
|
||||
{
|
||||
English,
|
||||
Italian,
|
||||
SimplifiedChinese,
|
||||
Spanish,
|
||||
Japanese,
|
||||
Russian
|
||||
}
|
||||
|
||||
private static readonly Dictionary<SupportedLangs, Dictionary<string, string>> _languages = new();
|
||||
public static SupportedLangs _currentLang;
|
||||
private static string LanguageFolder => $"{BanManager.DataPath}/Language";
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
Logger.Info($" Among Us Revamped {Main.ModVersion}", "Init");
|
||||
|
||||
_currentLang = SupportedLangs.English;
|
||||
if (!Directory.Exists(LanguageFolder)) Directory.CreateDirectory(LanguageFolder);
|
||||
|
||||
try
|
||||
{
|
||||
string path = Path.Combine(LanguageFolder, "YourLanguage.txt");
|
||||
|
||||
if (!File.Exists(path))
|
||||
{
|
||||
Logger.Warn($" Creating a new language file", "Translator");
|
||||
File.WriteAllText(path, "# In this file you can set your Among Us Revamped language.\n# To set the language, replace the 'English' text below with the language you want to select.\n# Supported languages: English, Spanish, SimplifiedChinese, Italian, Japanese, Russian\n\nEnglish");
|
||||
}
|
||||
|
||||
string l = File.ReadAllLines(path).FirstOrDefault(x => !string.IsNullOrWhiteSpace(x) && !x.StartsWith("#"))?.Trim() ?? "English";
|
||||
|
||||
if (Enum.TryParse(l, true, out SupportedLangs lang)) _currentLang = lang;
|
||||
}
|
||||
catch (IOException ex)
|
||||
{
|
||||
Logger.Exception(ex, "BanManager");
|
||||
}
|
||||
catch (UnauthorizedAccessException ex)
|
||||
{
|
||||
Logger.Exception(ex, "BanManager");
|
||||
}
|
||||
|
||||
CheckLanguageFile(_currentLang);
|
||||
LoadLanguage(_currentLang);
|
||||
}
|
||||
|
||||
private static void CheckLanguageFile(SupportedLangs lang)
|
||||
{
|
||||
if (!Directory.Exists(LanguageFolder)) Directory.CreateDirectory(LanguageFolder);
|
||||
|
||||
string path = GetLanguagePath(lang);
|
||||
var assembly = Assembly.GetExecutingAssembly();
|
||||
string targetFile = $"{lang}.json";
|
||||
|
||||
Dictionary<string, string> embeddedDict = new();
|
||||
Dictionary<string, string> diskDict = new();
|
||||
|
||||
foreach (var name in assembly.GetManifestResourceNames())
|
||||
{
|
||||
if (name.EndsWith(targetFile, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
using var stream = assembly.GetManifestResourceStream(name);
|
||||
using var reader = new StreamReader(stream);
|
||||
string json = reader.ReadToEnd();
|
||||
|
||||
embeddedDict = JsonSerializer.Deserialize<Dictionary<string, string>>(json) ?? new Dictionary<string, string>();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (File.Exists(path))
|
||||
{
|
||||
try
|
||||
{
|
||||
string json = File.ReadAllText(path);
|
||||
diskDict = JsonSerializer.Deserialize<Dictionary<string, string>>(json) ?? new Dictionary<string, string>();
|
||||
}
|
||||
catch
|
||||
{
|
||||
diskDict = new Dictionary<string, string>();
|
||||
}
|
||||
}
|
||||
|
||||
bool updated = false;
|
||||
foreach (var kvp in embeddedDict)
|
||||
{
|
||||
if (!diskDict.ContainsKey(kvp.Key))
|
||||
{
|
||||
diskDict[kvp.Key] = kvp.Value;
|
||||
updated = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!File.Exists(path) || updated)
|
||||
{
|
||||
var options = new JsonSerializerOptions { WriteIndented = true };
|
||||
File.WriteAllText(path, JsonSerializer.Serialize(diskDict, options));
|
||||
}
|
||||
}
|
||||
|
||||
private static void LoadLanguage(SupportedLangs lang, bool reset = false)
|
||||
{
|
||||
string path = GetLanguagePath(lang);
|
||||
|
||||
if (!File.Exists(path)) return;
|
||||
|
||||
try
|
||||
{
|
||||
string json = File.ReadAllText(path);
|
||||
var dict = JsonSerializer.Deserialize<Dictionary<string, string>>(json);
|
||||
|
||||
if (dict != null) _languages[lang] = dict;
|
||||
}
|
||||
catch
|
||||
{
|
||||
_languages[lang] = new Dictionary<string, string>();
|
||||
}
|
||||
}
|
||||
|
||||
private static string GetLanguagePath(SupportedLangs lang)
|
||||
{
|
||||
return $"{LanguageFolder}/{lang}.json";
|
||||
}
|
||||
|
||||
public static string Get(string key)
|
||||
{
|
||||
if (_languages.TryGetValue(_currentLang, out var dict) && dict.TryGetValue(key, out var value))
|
||||
{
|
||||
return SendChatPatch.ConvertNum(value);
|
||||
}
|
||||
|
||||
return $"<MISSING:{key}>";
|
||||
}
|
||||
public static string Get(string key, params object[] args)
|
||||
{
|
||||
if (_languages.TryGetValue(_currentLang, out var dict) && dict.TryGetValue(key, out var value))
|
||||
{
|
||||
return SendChatPatch.ConvertNum(string.Format(value, args));
|
||||
}
|
||||
return $"<MISSING:{key}>";
|
||||
}
|
||||
|
||||
public static void Reload()
|
||||
{
|
||||
string path = GetLanguagePath(_currentLang);
|
||||
var assembly = Assembly.GetExecutingAssembly();
|
||||
string targetFile = $"{_currentLang}.json";
|
||||
|
||||
foreach (var name in assembly.GetManifestResourceNames())
|
||||
{
|
||||
if (name.EndsWith(targetFile, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
using var stream = assembly.GetManifestResourceStream(name);
|
||||
using var reader = new StreamReader(stream);
|
||||
string json = reader.ReadToEnd();
|
||||
|
||||
File.WriteAllText(path, json);
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
LoadLanguage(_currentLang);
|
||||
}
|
||||
}
|
||||
+224
-60
@@ -12,8 +12,6 @@ using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using AmongUs.InnerNet.GameDataMessages;
|
||||
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
public static class Utils
|
||||
@@ -43,35 +41,30 @@ public static class Utils
|
||||
public static bool GamePastRoleSelection => Main.GameTimer > 10f;
|
||||
public static bool HandlingGameEnd;
|
||||
public static byte CustomGameOverReason;
|
||||
public static bool CanCallMeetings;
|
||||
|
||||
public static string ColorString(Color32 color, string str) => $"<#{color.r:x2}{color.g:x2}{color.b:x2}{color.a:x2}>{str}</color>";
|
||||
public static string ColorToHex(Color32 color) => $"#{color.r:x2}{color.g:x2}{color.b:x2}{color.a:x2}";
|
||||
public static byte GetActiveMapId() => GameOptionsManager.Instance.CurrentGameOptions.MapId;
|
||||
|
||||
public static bool IsPlayerModerator(string friendCode)
|
||||
public static int CheckAccessLevel(string friendCode)
|
||||
{
|
||||
if (friendCode == "") return false;
|
||||
if (friendCode == "") return 0;
|
||||
|
||||
var friendCodesFilePath = @"./AUR-DATA/ModeratorList.txt";
|
||||
var friendCodes = File.ReadAllLines(friendCodesFilePath);
|
||||
return friendCodes.Any(code => code.Contains(friendCode));
|
||||
}
|
||||
var vipFilePath = @$"{BanManager.DataPath}/AUR-DATA/VIP.txt";
|
||||
var vipFriendCodes = File.ReadAllLines(vipFilePath);
|
||||
|
||||
public static bool IsPlayerInDenyName(ClientData client, string name)
|
||||
{
|
||||
if (name == "" || !AmongUsClient.Instance.AmHost || !Options.ApplyDenyNameList.GetBool()) return false;
|
||||
var moderatorFilePath = @$"{BanManager.DataPath}/AUR-DATA/Moderator.txt";
|
||||
var moderatorFriendCodes = File.ReadAllLines(moderatorFilePath);
|
||||
|
||||
var denyNameFilePath = @"./AUR-DATA/DenyNameList.txt";
|
||||
var deniedNames = File.ReadAllLines(denyNameFilePath);
|
||||
var adminFilePath = @$"{BanManager.DataPath}/AUR-DATA/Admin.txt";
|
||||
var adminFriendCodes = File.ReadAllLines(adminFilePath);
|
||||
|
||||
if (deniedNames.Where(code => !string.IsNullOrWhiteSpace(code)).Any(code => name.Contains(code, StringComparison.OrdinalIgnoreCase)))
|
||||
{
|
||||
AmongUsClient.Instance.KickPlayer(client.Id, false);
|
||||
Logger.Info($" {name} was kicked because their name was in DenyNameList.txt", "Kick");
|
||||
Logger.SendInGame($" {name} was kicked because their name was in DenyNameList.txt");
|
||||
return true;
|
||||
}
|
||||
else return false;
|
||||
if (adminFriendCodes.Any(code => code.Contains(friendCode))) return 3;
|
||||
if (moderatorFriendCodes.Any(code => code.Contains(friendCode))) return 2;
|
||||
if (vipFriendCodes.Any(code => code.Contains(friendCode))) return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
public static string GetTabName(TabGroup tab)
|
||||
@@ -79,13 +72,11 @@ public static class Utils
|
||||
switch (tab)
|
||||
{
|
||||
case TabGroup.SystemSettings:
|
||||
return "System Settings";
|
||||
case TabGroup.CustomRoleSettings:
|
||||
return "Custom Roles";
|
||||
return Translator.Get("systemSettings");
|
||||
case TabGroup.ModSettings:
|
||||
return "Gameplay Settings";
|
||||
return Translator.Get("gameplaySettings");
|
||||
case TabGroup.GamemodeSettings:
|
||||
return "Gamemode Settings";
|
||||
return Translator.Get("gamemodeSettings");
|
||||
default:
|
||||
return "";
|
||||
}
|
||||
@@ -151,9 +142,16 @@ public static class Utils
|
||||
|
||||
string name = region.Name;
|
||||
|
||||
// Joining games shows incorrect regions
|
||||
if (!AmongUsClient.Instance.AmHost)
|
||||
{
|
||||
name = "";
|
||||
return name;
|
||||
}
|
||||
|
||||
if (AmongUsClient.Instance.NetworkMode != NetworkModes.OnlineGame)
|
||||
{
|
||||
name = "Local Game";
|
||||
name = "Server: Local Game";
|
||||
return name;
|
||||
}
|
||||
|
||||
@@ -162,9 +160,9 @@ public static class Utils
|
||||
// Official servers
|
||||
name = name switch
|
||||
{
|
||||
"North America" => "NA",
|
||||
"Europe" => "EU",
|
||||
"Asia" => "AS",
|
||||
"North America" => "Server: NA",
|
||||
"Europe" => "Server: EU",
|
||||
"Asia" => "Server: AS",
|
||||
_ => name
|
||||
};
|
||||
|
||||
@@ -177,11 +175,11 @@ public static class Utils
|
||||
{
|
||||
// Modded Servers
|
||||
if (ip.Contains("au-eu"))
|
||||
name = "MEU";
|
||||
name = "Server: MEU";
|
||||
else if (ip.Contains("au-as"))
|
||||
name = "MAS";
|
||||
name = "Server: MAS";
|
||||
else
|
||||
name = "MNA";
|
||||
name = "Server: MNA";
|
||||
|
||||
return name;
|
||||
}
|
||||
@@ -204,10 +202,30 @@ public static class Utils
|
||||
HandlingGameEnd = false;
|
||||
OnGameJoinedPatch.AutoStartCheck = false;
|
||||
Main.GameTimer = 0f;
|
||||
NormalGameEndChecker.canUpdateWinnerText = true;
|
||||
MurderPlayerPatch.misfireCount.Clear();
|
||||
LateTask.Tasks.Clear();
|
||||
FixedUpdateInGamePatch.ProcessedModerators.Clear();
|
||||
MurderPlayerPatch.killCount.Clear();
|
||||
|
||||
LateTask.Tasks.Clear();
|
||||
NormalGameEndChecker.ImpCheckComplete = false;
|
||||
CreateOptionsPickerPatch.SetDleks2 = false;
|
||||
CanCallMeetings = true;
|
||||
PlayerControlSetRolePatch.FirstAssign = true;
|
||||
|
||||
PlayerControlCompleteTaskPatch.playerTasksCompleted.Clear();
|
||||
PlayerControlCompleteTaskPatch.tasksPerPlayer.Clear();
|
||||
PlayerControlCompleteTaskPatch.tasksInitiated = false;
|
||||
PlayerControlCompleteTaskPatch.ignoredCompletedTasks = 0;
|
||||
PlayerControlCompleteTaskPatch.ignoredTasks = 0;
|
||||
|
||||
OnPlayerJoinedPatch.JoinNum = 0;
|
||||
|
||||
PlayerControlSetRolePatch.Seekers.Clear();
|
||||
PlayerControlSetRolePatch.FirstAssign = true;
|
||||
PlayerControlSetRolePatch.manualSeekers.Clear();
|
||||
|
||||
OnGameStartPatch.ScheduleExile = false;
|
||||
CoShowIntroPatch.IntroInitiated = false;
|
||||
}
|
||||
|
||||
public static PlayerControl[] AllAlivePlayerControls
|
||||
@@ -232,6 +250,87 @@ public static class Utils
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsActive(SystemTypes type)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Utils.IsLobby || !ShipStatus.Instance || !ShipStatus.Instance.Systems.TryGetValue(type, out ISystemType systemType)) return false;
|
||||
|
||||
int mapId = Main.NormalOptions.MapId;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case SystemTypes.Electrical:
|
||||
{
|
||||
if (mapId == 5) return false;
|
||||
|
||||
var switchSystem = systemType.CastFast<SwitchSystem>();
|
||||
return switchSystem is { IsActive: true };
|
||||
}
|
||||
case SystemTypes.Reactor:
|
||||
{
|
||||
switch (mapId)
|
||||
{
|
||||
case 2:
|
||||
return false;
|
||||
case 4:
|
||||
var heliSabotageSystem = systemType.CastFast<HeliSabotageSystem>();
|
||||
return heliSabotageSystem != null && heliSabotageSystem.IsActive;
|
||||
default:
|
||||
var reactorSystemType = systemType.CastFast<ReactorSystemType>();
|
||||
return reactorSystemType is { IsActive: true };
|
||||
}
|
||||
}
|
||||
case SystemTypes.Laboratory:
|
||||
{
|
||||
if (mapId != 2) return false;
|
||||
|
||||
var reactorSystemType = systemType.CastFast<ReactorSystemType>();
|
||||
return reactorSystemType is { IsActive: true };
|
||||
}
|
||||
case SystemTypes.LifeSupp:
|
||||
{
|
||||
if (mapId is 2 or 4 or 5) return false;
|
||||
|
||||
var lifeSuppSystemType = systemType.CastFast<LifeSuppSystemType>();
|
||||
return lifeSuppSystemType is { IsActive: true };
|
||||
}
|
||||
case SystemTypes.Comms:
|
||||
{
|
||||
if (mapId is 1 or 5)
|
||||
{
|
||||
var hqHudSystemType = systemType.TryCast<HqHudSystemType>();
|
||||
return hqHudSystemType != null && hqHudSystemType.IsActive;
|
||||
}
|
||||
|
||||
var hudOverrideSystemType = systemType.CastFast<HudOverrideSystemType>();
|
||||
return hudOverrideSystemType is { IsActive: true };
|
||||
}
|
||||
case SystemTypes.HeliSabotage:
|
||||
{
|
||||
if (mapId != 4) return false;
|
||||
|
||||
var heliSabotageSystem = systemType.CastFast<HeliSabotageSystem>();
|
||||
return heliSabotageSystem != null && heliSabotageSystem.IsActive;
|
||||
}
|
||||
case SystemTypes.MushroomMixupSabotage:
|
||||
{
|
||||
if (mapId != 5) return false;
|
||||
|
||||
var mushroomMixupSabotageSystem = systemType.CastFast<MushroomMixupSabotageSystem>();
|
||||
return mushroomMixupSabotageSystem != null && mushroomMixupSabotageSystem.IsActive;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Logger.Exception(e, "IsActive");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static void ShowLastResult(byte playerId = byte.MaxValue)
|
||||
{
|
||||
if (InGame)
|
||||
@@ -262,21 +361,10 @@ public static class Utils
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void SendPrivateMessage(PlayerControl target, string message)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost || PlayerControl.LocalPlayer == null || target == null || target.Data.ClientId == 255) return;
|
||||
|
||||
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, 13, SendOption.Reliable, target.Data.ClientId);
|
||||
|
||||
writer.Write(message);
|
||||
writer.Write(PlayerControl.LocalPlayer.PlayerId);
|
||||
|
||||
AmongUsClient.Instance.FinishRpcImmediately(writer);
|
||||
|
||||
}
|
||||
|
||||
public static void ChatCommand(ChatController __instance, string msg, string msg2, bool multi)
|
||||
{
|
||||
if (OnGameJoinedPatch.WaitingForChat) return;
|
||||
|
||||
OnGameJoinedPatch.WaitingForChat = true;
|
||||
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
@@ -307,6 +395,8 @@ public static class Utils
|
||||
|
||||
public static void ModeratorChatCommand(string msg, string msg2, bool multi)
|
||||
{
|
||||
if (OnGameJoinedPatch.WaitingForChat) return;
|
||||
|
||||
OnGameJoinedPatch.WaitingForChat = true;
|
||||
|
||||
new LateTask(() =>
|
||||
@@ -335,16 +425,6 @@ public static class Utils
|
||||
}, 6.6f, "ModeratorChatCommand3");
|
||||
}
|
||||
|
||||
public static string BasicIntToWord(int value)
|
||||
{
|
||||
if (Enum.IsDefined(typeof(Main.BasicNumberToLetter), value))
|
||||
{
|
||||
return ((Main.BasicNumberToLetter)value).ToString();
|
||||
}
|
||||
|
||||
return value.ToString();
|
||||
}
|
||||
|
||||
// 0 = no winner. 1 = solo winner. 2 = add winner.
|
||||
public static void CustomWinnerEndGame(PlayerControl winner, int winnerType)
|
||||
{
|
||||
@@ -389,13 +469,17 @@ public static class Utils
|
||||
writer.Write(gameOverReason);
|
||||
AmongUsClient.Instance.FinishEndGame(writer);
|
||||
HandlingGameEnd = false;
|
||||
Logger.Info(" -------- GAME ENDED --------", "ManualEndGame");
|
||||
Logger.Info($"{gameOverReason}", "ContinueEndGame");
|
||||
}
|
||||
|
||||
public static void DumpLog()
|
||||
{
|
||||
string f = $"{Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)}/AUR-logs/";
|
||||
string t = DateTime.Now.ToString("yyyy-MM-dd_HH.mm.ss");
|
||||
#if ANDROID
|
||||
var f = $"{BanManager.DataPath}/AUR-Logs/{t}";
|
||||
#else
|
||||
string f = $"{Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)}/AUR-logs/";
|
||||
#endif
|
||||
string filename = $"{f}AUR-{Main.ModVersion}-{t}.log";
|
||||
if (!Directory.Exists(f)) Directory.CreateDirectory(f);
|
||||
FileInfo file = new(@$"{Environment.CurrentDirectory}/BepInEx/LogOutput.log");
|
||||
@@ -404,8 +488,88 @@ public static class Utils
|
||||
if (PlayerControl.LocalPlayer != null)
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"/Dump command activated\n\nFile: AUR-{Main.ModVersion}-{t}");
|
||||
#if !ANDROID
|
||||
ProcessStartInfo psi = new("Explorer.exe") { Arguments = "/e,/select," + @filename.Replace("/", "\\") };
|
||||
Process.Start(psi);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
private readonly static Dictionary<string, Sprite> CachedSprites = [];
|
||||
public static Sprite LoadSprite(string path, float pixelsPerUnit = 1f)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (CachedSprites.TryGetValue(path + pixelsPerUnit, out var sprite)) return sprite;
|
||||
Texture2D texture = LoadTextureFromResources(path);
|
||||
sprite = Sprite.Create(texture, new(0, 0, texture.width, texture.height), new Vector2(0.5f, 0.5f), pixelsPerUnit);
|
||||
sprite.hideFlags |= HideFlags.HideAndDontSave | HideFlags.DontSaveInEditor;
|
||||
return CachedSprites[path + pixelsPerUnit] = sprite;
|
||||
}
|
||||
catch
|
||||
{
|
||||
Logger.Error($"Failed to read Texture: {path}", "LoadSprite");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static unsafe Texture2D LoadTextureFromResources(string path)
|
||||
{
|
||||
try
|
||||
{
|
||||
Texture2D texture = new(2, 2, TextureFormat.ARGB32, true);
|
||||
Assembly assembly = Assembly.GetExecutingAssembly();
|
||||
Stream stream = assembly.GetManifestResourceStream(path);
|
||||
var length = stream.Length;
|
||||
var byteTexture = new Il2CppStructArray<byte>(length);
|
||||
stream.Read(new Span<byte>(IntPtr.Add(byteTexture.Pointer, IntPtr.Size * 4).ToPointer(), (int)length));
|
||||
ImageConversion.LoadImage(texture, byteTexture, false);
|
||||
return texture;
|
||||
}
|
||||
catch
|
||||
{
|
||||
Logger.Error($"Failed to read Texture: {path}", "LoadTextureFromResources");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void SetChatVisible()
|
||||
{
|
||||
PlayerControl.LocalPlayer.CmdReportDeadBody(null);
|
||||
MeetingHud.Instance.RpcClose();
|
||||
}
|
||||
|
||||
public static MethodBase GetStateMachineMoveNext<T>(string methodName)
|
||||
{
|
||||
var typeName = typeof(T).FullName;
|
||||
var stateMachine = typeof(T).GetNestedTypes().FirstOrDefault(x => x.Name.Contains(methodName));
|
||||
|
||||
if (stateMachine == null)
|
||||
{
|
||||
Logger.Error($"Failed to find {methodName} state machine for {typeName}", "GetStateMachineMoveNext");
|
||||
return null;
|
||||
}
|
||||
|
||||
var moveNext = AccessTools.Method(stateMachine, "MoveNext");
|
||||
if (moveNext == null)
|
||||
{
|
||||
Logger.Error($"Failed to find MoveNext method for {typeName}.{methodName}", "GetStateMachineMoveNext");
|
||||
return null;
|
||||
}
|
||||
|
||||
// Logger.Info($"Found {methodName}.MoveNext", "GetStateMachineMoveNext");
|
||||
return moveNext;
|
||||
}
|
||||
|
||||
public static readonly Dictionary<byte, string> StoredRoleText = new();
|
||||
public static string GetRoleText(PlayerControl p)
|
||||
{
|
||||
if (p == null) return "";
|
||||
|
||||
if (p.Data.RoleType == RoleTypes.Impostor || p.Data.RoleType == RoleTypes.Shapeshifter || p.Data.RoleType == RoleTypes.Phantom || p.Data.RoleType == RoleTypes.Viper || p.Data.RoleType == RoleTypes.ImpostorGhost)
|
||||
{
|
||||
return $"<color=#ff1919>{p.Data.RoleType}</color>";
|
||||
}
|
||||
else return $"<color=#8cffff>{p.Data.RoleType}</color>";
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -4,6 +4,7 @@ using UnityEngine;
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
// https://github.com/Yumenopai/TownOfHost_Y
|
||||
#if !ANDROID
|
||||
[HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))]
|
||||
public static class Zoom
|
||||
{
|
||||
@@ -16,9 +17,7 @@ public static class Zoom
|
||||
|
||||
public static void Postfix()
|
||||
{
|
||||
bool canZoom =
|
||||
(Utils.IsShip && !Utils.IsMeeting && Utils.CanMove && PlayerControl.LocalPlayer.Data.IsDead)
|
||||
|| (Utils.IsLobby && Utils.CanMove);
|
||||
bool canZoom = (Utils.IsShip && !Utils.IsMeeting && Utils.CanMove && PlayerControl.LocalPlayer.Data.IsDead) || (Utils.IsLobby && Utils.CanMove);
|
||||
|
||||
if (!canZoom)
|
||||
{
|
||||
@@ -100,4 +99,5 @@ public static class Flag
|
||||
{
|
||||
OneTimeList.Remove(type);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
+559
-124
@@ -1,11 +1,12 @@
|
||||
using Hazel;
|
||||
using AmongUs.GameOptions;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
using System;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
using TMPro;
|
||||
|
||||
// https://github.com/SuperNewRoles/SuperNewRoles/blob/master/SuperNewRoles/Patches/LobbyBehaviourPatch.cs
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
[HarmonyPatch(typeof(ChatController), nameof(ChatController.Update))]
|
||||
@@ -14,6 +15,9 @@ internal static class ChatControllerUpdatePatch
|
||||
|
||||
public static void Postfix(ChatController __instance)
|
||||
{
|
||||
if (!__instance||!__instance.freeChatField||!__instance.freeChatField.textArea||!__instance.freeChatField.background||__instance.freeChatField.textArea.compoText == null||!__instance.freeChatField.textArea.outputText) return;
|
||||
if (!__instance.quickChatField||!__instance.quickChatField.background||__instance.quickChatField.text==null) return;
|
||||
|
||||
if (Main.DarkTheme.Value)
|
||||
{
|
||||
__instance.freeChatField.background.color = new Color32(40, 40, 40, byte.MaxValue);
|
||||
@@ -40,13 +44,15 @@ internal static class ChatBubbleSetNamePatch
|
||||
{
|
||||
public static void Postfix(ChatBubble __instance, [HarmonyArgument(2)] bool voted)
|
||||
{
|
||||
PlayerControl seer = PlayerControl.LocalPlayer;
|
||||
if (!__instance||!__instance.playerInfo||!__instance.playerInfo.Object||!__instance.playerInfo.Object.Data||!__instance.TextArea||!__instance.Background) return;
|
||||
|
||||
PlayerControl target = __instance.playerInfo.Object;
|
||||
|
||||
if (Main.DarkTheme.Value)
|
||||
{
|
||||
__instance.Background.color = new(0.1f, 0.1f, 0.1f, 1f);
|
||||
__instance.TextArea.color = Color.white;
|
||||
|
||||
if (__instance.playerInfo.Object.Data.IsDead && Utils.InGame) __instance.Background.color = new(0.1f, 0.1f, 0.1f, 0.7f);
|
||||
}
|
||||
}
|
||||
@@ -55,21 +61,47 @@ internal static class ChatBubbleSetNamePatch
|
||||
[HarmonyPatch(typeof(ChatController), nameof(ChatController.SendChat))]
|
||||
internal static class SendChatPatch
|
||||
{
|
||||
public static string noKcdMode = "0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!";
|
||||
public static string SnSModeOne = "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nSabotages & Meetings = Off";
|
||||
public static string SnSModeTwo = $"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Utils.BasicIntToWord(Options.MisfiresToSuicide.GetInt())} wrong kills = suicide";
|
||||
public static string speedrunMode = $"Speedrun:\n\nEveryone is a crewmate The 1st player to finish tasks wins the game Game auto ends after {Options.GameAutoEndsAfter.GetInt()}s";
|
||||
public static string ConvertNum(string input)
|
||||
{
|
||||
if (string.IsNullOrEmpty(input)) return input;
|
||||
int digitCount = 0;
|
||||
|
||||
public static string allCommandsFull = "Commands:\n/r - Current mode description\n/0kc, /sns, /sp - Specific mode description\n/l - Shows last winner info\n/kick, /ban - Bans or kicks a player by name\n/ckick, /cban - Bans or kicks a player by color";
|
||||
public static string allCommandsOne = "Commands:\n/r - Current mode description\n/0kc, /sns, /sp - Specific mode description\n/l - Shows last winner info";
|
||||
public static string allCommandsTwo = "/kick, /ban - Bans or kicks a player by name\n/ckick, /cban - Bans or kicks a player by color";
|
||||
for (int i = 0; i < input.Length; i++)
|
||||
{
|
||||
if (char.IsDigit(input[i]) && ++digitCount > 5)
|
||||
{
|
||||
var sb = new System.Text.StringBuilder(input.Length);
|
||||
|
||||
foreach (char c in input)
|
||||
{
|
||||
if (char.IsDigit(c))
|
||||
sb.Append(Main.CircledDigits[c - '0']);
|
||||
else
|
||||
sb.Append(c);
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
public static bool Prefix(ChatController __instance)
|
||||
{
|
||||
string text = __instance.freeChatField.textArea.text.Trim();
|
||||
string msgtext = __instance.freeChatField.textArea.text.Trim();
|
||||
string text = msgtext.ToLower();
|
||||
string converted = ConvertNum(msgtext);
|
||||
|
||||
if (!AmongUsClient.Instance.AmHost) return true;
|
||||
|
||||
if (text == "/reload")
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"{Translator.Get("translationReloaded")}");
|
||||
Translator.Reload();
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/dump")
|
||||
{
|
||||
Utils.DumpLog();
|
||||
@@ -77,70 +109,390 @@ internal static class SendChatPatch
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/h" || text == "/help" || text == "/cmd" || text == "/commands")
|
||||
if (text == "/help")
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"{allCommandsFull}");
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"{Translator.Get("allCommandsFull")}");
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/s" || text == "/start")
|
||||
{
|
||||
GameStartManager.Instance.BeginGame();
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/eg" || text == "/endgame")
|
||||
{
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
|
||||
if (!Utils.InGame) return false;
|
||||
MessageWriter writer = AmongUsClient.Instance.StartEndGame();
|
||||
writer.Write((byte)GameOverReason.ImpostorDisconnect);
|
||||
AmongUsClient.Instance.FinishEndGame(writer);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/em" || text == "/endmeeting")
|
||||
{
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
|
||||
if ( !Utils.InGame || !Utils.IsMeeting) return false;
|
||||
MeetingHud.Instance.RpcClose();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text.StartsWith("/vip "))
|
||||
{
|
||||
PlayerControl target = null;
|
||||
string arg = text.Substring(5).Trim();
|
||||
|
||||
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||
|
||||
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
target = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target == null)
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||
}
|
||||
else
|
||||
{
|
||||
File.AppendAllText(BanManager.VipListPath, "\n" + target.Data.FriendCode);
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("vipAdd", target.Data.PlayerName));
|
||||
}
|
||||
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text.StartsWith("/moderator "))
|
||||
{
|
||||
PlayerControl target = null;
|
||||
string arg = text.Substring(11).Trim();
|
||||
|
||||
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||
|
||||
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
target = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target == null)
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||
}
|
||||
else
|
||||
{
|
||||
File.AppendAllText(BanManager.ModeratorListPath, "\n" + target.Data.FriendCode);
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("moderatorAdd", target.Data.PlayerName));
|
||||
}
|
||||
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text.StartsWith("/admin "))
|
||||
{
|
||||
PlayerControl target = null;
|
||||
string arg = text.Substring(7).Trim();
|
||||
|
||||
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||
|
||||
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
target = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target == null)
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||
}
|
||||
else
|
||||
{
|
||||
File.AppendAllText(BanManager.AdminListPath, "\n" + target.Data.FriendCode);
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("adminAdd", target.Data.PlayerName));
|
||||
}
|
||||
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text.StartsWith("/removevip "))
|
||||
{
|
||||
PlayerControl target = null;
|
||||
string arg = text.Substring(11).Trim();
|
||||
|
||||
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||
|
||||
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
target = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target == null)
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||
}
|
||||
else
|
||||
{
|
||||
File.WriteAllLines(BanManager.VipListPath, File.ReadAllLines(BanManager.VipListPath).Where(x => x.Trim() != target.Data.FriendCode));
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("vipRemove", target.Data.PlayerName));
|
||||
}
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text.StartsWith("/removemoderator "))
|
||||
{
|
||||
PlayerControl target = null;
|
||||
string arg = text.Substring(17).Trim();
|
||||
|
||||
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||
|
||||
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
target = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target == null)
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||
}
|
||||
else
|
||||
{
|
||||
File.WriteAllLines(BanManager.ModeratorListPath, File.ReadAllLines(BanManager.ModeratorListPath).Where(x => x.Trim() != target.Data.FriendCode));
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("moderatorRemove", target.Data.PlayerName));
|
||||
}
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text.StartsWith("/removeadmin "))
|
||||
{
|
||||
PlayerControl target = null;
|
||||
string arg = text.Substring(13).Trim();
|
||||
|
||||
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.Data == null || p == PlayerControl.LocalPlayer) continue;
|
||||
|
||||
if (p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
target = p;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (target == null)
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("permFail", arg));
|
||||
}
|
||||
else
|
||||
{
|
||||
File.WriteAllLines(BanManager.AdminListPath, File.ReadAllLines(BanManager.AdminListPath).Where(x => x.Trim() != target.Data.FriendCode));
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("adminRemove", target.Data.PlayerName));
|
||||
}
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text.StartsWith("/seeker "))
|
||||
{
|
||||
if (!Utils.IsLobby || !Utils.isHideNSeek)
|
||||
{
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
string argSeeker = text.Substring(8).Trim();
|
||||
bool found = false;
|
||||
|
||||
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.Data == null) continue;
|
||||
|
||||
if (p.Data.PlayerName.Equals(argSeeker, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
found = true;
|
||||
PlayerControlSetRolePatch.manualSeekers.Add(p.PlayerId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (found)
|
||||
{
|
||||
List<string> names = new();
|
||||
|
||||
foreach (PlayerControl pl in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (PlayerControlSetRolePatch.manualSeekers.Contains(pl.PlayerId)) names.Add(pl.Data.PlayerName);
|
||||
}
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("seekers") + string.Join(", ", names));
|
||||
}
|
||||
|
||||
if (!found)
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"Player '{argSeeker}' not found.");
|
||||
}
|
||||
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/clearseeker")
|
||||
{
|
||||
PlayerControlSetRolePatch.manualSeekers.Clear();
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("clearedSeekers"));
|
||||
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/seekers")
|
||||
{
|
||||
List<string> n = new();
|
||||
|
||||
foreach (PlayerControl pc in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (PlayerControlSetRolePatch.manualSeekers.Contains(pc.PlayerId)) n.Add(pc.Data.PlayerName);
|
||||
}
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("seekers") + string.Join(", ", n));
|
||||
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (__instance.timeSinceLastMessage < 3f || OnGameJoinedPatch.WaitingForChat) return false;
|
||||
|
||||
if (text == "/l" || text == "/lastgame" || text == "/win" || text == "/winner")
|
||||
if (text == "/l" || text == "/lastgame")
|
||||
{
|
||||
if (string.IsNullOrEmpty(NormalGameEndChecker.LastWinReason) || Utils.InGame) return false;
|
||||
Utils.ChatCommand(__instance, $"{NormalGameEndChecker.LastWinReason}", "", false);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/0kc" || text == "/0kcd" || text == "/0killcooldown")
|
||||
if (text == "/aur" || text == "/socials")
|
||||
{
|
||||
Utils.ChatCommand(__instance, $"{noKcdMode}", "", false);
|
||||
Utils.ChatCommand(__instance, "AUR socials:\n\ng i t h u b . c o m /\nApeMV/AmongUsRevamped\n\nd i s c о r d . g g /\n83Zhzhyhya", "", false);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/sns" || text == "/shiftandseek" || text == "/shift&seek")
|
||||
if (text == "/0kc" || text == "/0killcooldown")
|
||||
{
|
||||
Utils.ChatCommand(__instance, $"{SnSModeOne}", $"{SnSModeTwo}", true);
|
||||
Utils.ChatCommand(__instance, "0 Kill Cooldown:\n\nImpostors have no kill cooldown, Crewmates have low tasks\nThink fast and pay attention!", "", false);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/sp" || text == "/sr" || text == "/speedrun")
|
||||
if (text == "/sns" || text == "/shiftandseek")
|
||||
{
|
||||
Utils.ChatCommand(__instance, $"{speedrunMode}", "", false);
|
||||
if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0)
|
||||
{
|
||||
Utils.ChatCommand(__instance, "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", $"Crewmates win by doing tasks or surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing everyone\n{Options.MisfiresToSuicide.GetInt()} wrong kill(s) = suicide", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.ChatCommand(__instance, "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", ConvertNum($"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide"), true);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/r" || text == "/roles" || text == "/gamemode" || text == "/gm")
|
||||
if (text == "/sr" || text == "/speedrun")
|
||||
{
|
||||
Utils.ChatCommand(__instance, $"Speedrun:\n\nEveryone is a crewmate. The 1st player to finish tasks wins the game. Game auto ends after {Options.GameAutoEndsAfter.GetInt()}s", "", false);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text == "/r" || text == "/roles")
|
||||
{
|
||||
switch (Options.Gamemode.GetValue())
|
||||
{
|
||||
case 0:
|
||||
PlayerControl.LocalPlayer.RpcSendChat($"Custom roles:\nThere are no custom roles.");
|
||||
__instance.timeSinceLastMessage = 0.8f;
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
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);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
Utils.ChatCommand(__instance, $"{noKcdMode}", "", false);
|
||||
if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0)
|
||||
{
|
||||
Utils.ChatCommand(__instance, "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", $"Crewmates win by doing tasks or surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing everyone\n{Options.MisfiresToSuicide.GetInt()} wrong kill(s) = suicide", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.ChatCommand(__instance, "Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", ConvertNum($"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide"), true);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
Utils.ChatCommand(__instance, $"{SnSModeOne}", $"{SnSModeTwo}", true);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
Utils.ChatCommand(__instance, $"{speedrunMode}", "", false);
|
||||
Utils.ChatCommand(__instance, $"Speedrun:\n\nEveryone is a crewmate. The 1st player to finish tasks wins the game. Game auto ends after {Options.GameAutoEndsAfter.GetInt()}s", "", false);
|
||||
break;
|
||||
|
||||
}
|
||||
__instance.timeSinceLastMessage = 0.8f;
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (text.StartsWith("/t "))
|
||||
{
|
||||
string templateName = text[3..].Trim().ToLower();
|
||||
|
||||
if (BanManager.Templates.TryGetValue(templateName, out string templateMessage))
|
||||
{
|
||||
if (templateMessage.Length < 121)
|
||||
{
|
||||
Utils.ChatCommand(__instance, BanManager.CheckTemplate(templateMessage), "", false);
|
||||
}
|
||||
else
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("tooLongTemplate"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.Info($"Could not find template '{templateName}'", "TemplateManager");
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"Template '{templateName}' not found.");
|
||||
}
|
||||
__instance.freeChatField.textArea.Clear();
|
||||
__instance.freeChatField.textArea.SetText(string.Empty);
|
||||
return false;
|
||||
}
|
||||
|
||||
bool col1 = text.StartsWith("/col ") || text.StartsWith("/cor ");
|
||||
bool col1 = text.StartsWith("/col ");
|
||||
bool col2 = text.StartsWith("/color ");
|
||||
bool col3 = text.StartsWith("/colour ");
|
||||
|
||||
@@ -171,7 +523,10 @@ internal static class SendChatPatch
|
||||
|
||||
if (!isKick && !isBan && !isColorKick && !isColorBan)
|
||||
{
|
||||
Logger.Info($" {PlayerControl.LocalPlayer.Data.PlayerName}: {text}", "SendChat");
|
||||
|
||||
//__instance.freeChatField.textArea.SetText(converted);
|
||||
//Utils.ChatCommand(__instance, $"{converted}", "", false);
|
||||
Logger.Info($" {PlayerControl.LocalPlayer.Data.PlayerName}: {msgtext}", "SendChat");
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -214,7 +569,7 @@ internal static class SendChatPatch
|
||||
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.HandleRpc))]
|
||||
public static class RPCHandlerPatch
|
||||
{
|
||||
public static void Prefix(PlayerControl __instance, byte callId, MessageReader reader)
|
||||
public static void Prefix(PlayerControl __instance, [HarmonyArgument(0)] byte callId, [HarmonyArgument(1)] MessageReader reader)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
@@ -225,78 +580,60 @@ public static class RPCHandlerPatch
|
||||
{
|
||||
case RpcCalls.SendChat:
|
||||
{
|
||||
string text = subReader.ReadString();
|
||||
Logger.Info($" {__instance.Data.PlayerName}: {text}", "SendChat");
|
||||
string msgtext = subReader.ReadString();
|
||||
string text = msgtext.ToLower();
|
||||
|
||||
if (text == "/h" || text == "/help" || text == "/cmd" || text == "/commands")
|
||||
Logger.Info($" {__instance.Data.PlayerName}: {msgtext}", "SendChat");
|
||||
|
||||
BanManager.IsStartWord(__instance, text);
|
||||
BanManager.IsWordBanned(__instance, text);
|
||||
|
||||
if (text.StartsWith("/seeker ") && Utils.CheckAccessLevel(__instance.Data.FriendCode) >= Options.SlashEndMeetingCmd.GetValue())
|
||||
{
|
||||
if (!Utils.IsPlayerModerator(__instance.Data.FriendCode) || !Options.ModeratorCanUseCommand.GetBool()) return;
|
||||
OnGameJoinedPatch.WaitingForChat = true;
|
||||
|
||||
new LateTask(() =>
|
||||
if (!Utils.IsLobby || !Utils.isHideNSeek)
|
||||
{
|
||||
Utils.SendPrivateMessage(__instance, $"{SendChatPatch.allCommandsOne}");
|
||||
}, 2.2f, "MHP1");
|
||||
return;
|
||||
}
|
||||
|
||||
new LateTask(() =>
|
||||
string argSeeker = text.Substring(8).Trim();
|
||||
bool found = false;
|
||||
|
||||
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
Utils.SendPrivateMessage(__instance, $"{SendChatPatch.allCommandsTwo}");
|
||||
}, 4.4f, "MHP2");
|
||||
if (p.Data == null) continue;
|
||||
|
||||
new LateTask(() =>
|
||||
if (p.Data.PlayerName.Equals(argSeeker, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
found = true;
|
||||
PlayerControlSetRolePatch.manualSeekers.Add(p.PlayerId);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (found)
|
||||
{
|
||||
OnGameJoinedPatch.WaitingForChat = false;
|
||||
}, 6.6f, "MHP3");
|
||||
}
|
||||
List<string> names = new();
|
||||
|
||||
if (text == "/l" || text == "/lastgame" || text == "/win" || text == "/winner")
|
||||
{
|
||||
if (!Utils.IsPlayerModerator(__instance.Data.FriendCode) || !Options.ModeratorCanUseCommand.GetBool()) return;
|
||||
if (string.IsNullOrEmpty(NormalGameEndChecker.LastWinReason) || Utils.InGame) return;
|
||||
Utils.ModeratorChatCommand($"{NormalGameEndChecker.LastWinReason}", "", false);
|
||||
}
|
||||
foreach (PlayerControl pl in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (PlayerControlSetRolePatch.manualSeekers.Contains(pl.PlayerId)) names.Add(pl.Data.PlayerName);
|
||||
}
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("seekers") + string.Join(", ", names));
|
||||
}
|
||||
|
||||
if (text == "/0kc" || text == "/0kcd" || text == "/0killcooldown")
|
||||
{
|
||||
if (!Utils.IsPlayerModerator(__instance.Data.FriendCode) || !Options.ModeratorCanUseCommand.GetBool()) return;
|
||||
Utils.ModeratorChatCommand($"{SendChatPatch.noKcdMode}", "", false);
|
||||
}
|
||||
if (text == "/sns" || text == "/shiftandseek" || text == "/shift&seek")
|
||||
{
|
||||
if (!Utils.IsPlayerModerator(__instance.Data.FriendCode) || !Options.ModeratorCanUseCommand.GetBool()) return;
|
||||
Utils.ModeratorChatCommand($"{SendChatPatch.SnSModeOne}", $"{SendChatPatch.SnSModeTwo}", true);
|
||||
}
|
||||
|
||||
if (text == "/sp" || text == "/sr" || text == "/speedrun")
|
||||
{
|
||||
if (!Utils.IsPlayerModerator(__instance.Data.FriendCode) || !Options.ModeratorCanUseCommand.GetBool()) return;
|
||||
Utils.ModeratorChatCommand($"{SendChatPatch.speedrunMode}", "", false);
|
||||
}
|
||||
|
||||
if (text == "/r" || text == "/roles" || text == "/gamemode" || text == "/gm")
|
||||
{
|
||||
if (!Utils.IsPlayerModerator(__instance.Data.FriendCode) || !Options.ModeratorCanUseCommand.GetBool()) return;
|
||||
switch (Options.Gamemode.GetValue())
|
||||
if (!found)
|
||||
{
|
||||
case 0:
|
||||
break;
|
||||
|
||||
case 1:
|
||||
Utils.ModeratorChatCommand($"{SendChatPatch.noKcdMode}", "", false);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
Utils.ModeratorChatCommand($"{SendChatPatch.SnSModeOne}", $"{SendChatPatch.SnSModeTwo}", true);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
Utils.ModeratorChatCommand($"{SendChatPatch.speedrunMode}", "", false);
|
||||
break;
|
||||
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, $"Player '{argSeeker}' not found.");
|
||||
}
|
||||
}
|
||||
|
||||
bool col1 = text.StartsWith("/col ") || text.StartsWith("/cor ");
|
||||
if (text == "/clearseeker" && Utils.CheckAccessLevel(__instance.Data.FriendCode) >= Options.SlashEndMeetingCmd.GetValue())
|
||||
{
|
||||
PlayerControlSetRolePatch.manualSeekers.Clear();
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("clearedSeekers"));
|
||||
}
|
||||
|
||||
bool col1 = text.StartsWith("/col ");
|
||||
bool col2 = text.StartsWith("/color ");
|
||||
bool col3 = text.StartsWith("/colour ");
|
||||
|
||||
@@ -306,29 +643,26 @@ public static class RPCHandlerPatch
|
||||
|
||||
if (Utils.TryGetColorId(argCol, out byte colId))
|
||||
{
|
||||
if (Options.ColorCommandLevel.GetValue() == 0 && Utils.IsPlayerModerator(__instance.Data.FriendCode) || Options.ColorCommandLevel.GetValue() == 1)
|
||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) >= Options.SlashColorCmd.GetValue())
|
||||
{
|
||||
if (colId > 17 && !Options.AllowFortegreen.GetBool()) return;
|
||||
__instance.RpcSetColor(colId);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
// Banning works by name and color. Commands are separated incase someone has a color as their name
|
||||
bool isKick = text.StartsWith("/kick ");
|
||||
bool isBan = text.StartsWith("/ban ");
|
||||
|
||||
bool isColorKick = text.StartsWith("/ckick ");
|
||||
bool isColorBan = text.StartsWith("/cban ");
|
||||
|
||||
bool banLog = isBan || isColorBan;
|
||||
|
||||
if (isKick || isBan || isColorKick || isColorBan)
|
||||
{
|
||||
|
||||
if (!Utils.IsPlayerModerator(__instance.Data.FriendCode)) return;
|
||||
// Banning works by name and color. Commands are seperated incase someone has a color as their name
|
||||
bool isKick = text.StartsWith("/kick ");
|
||||
bool isBan = text.StartsWith("/ban ");
|
||||
|
||||
bool isColorKick = text.StartsWith("/ckick ");
|
||||
bool isColorBan = text.StartsWith("/cban ");
|
||||
|
||||
bool banLog = isBan || isColorBan;
|
||||
|
||||
if (!isKick && !isBan && !isColorKick && !isColorBan) return;
|
||||
|
||||
if (Utils.IsPlayerModerator(__instance.Data.FriendCode))
|
||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) >= Options.SlashKickCmd.GetValue())
|
||||
{
|
||||
string arg = text.Substring(isKick ? 6 : isBan ? 5 : isColorKick ? 7 : isColorBan ? 6 : 0).Trim();
|
||||
|
||||
@@ -336,7 +670,7 @@ public static class RPCHandlerPatch
|
||||
|
||||
foreach (PlayerControl p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.Data == null || p == PlayerControl.LocalPlayer || Utils.IsPlayerModerator(p.Data.FriendCode)) continue;
|
||||
if (p.Data == null || p == PlayerControl.LocalPlayer || Utils.CheckAccessLevel(p.Data.FriendCode) >= 1) continue;
|
||||
|
||||
if ((isKick || isBan) && p.Data.PlayerName.Equals(arg, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
@@ -353,6 +687,7 @@ public static class RPCHandlerPatch
|
||||
}
|
||||
}
|
||||
}
|
||||
if (banLog && Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashBanCmd.GetValue()) return;
|
||||
|
||||
if (target != null)
|
||||
{
|
||||
@@ -361,21 +696,121 @@ public static class RPCHandlerPatch
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (OnGameJoinedPatch.WaitingForChat || GameStartManagerUpdatePatch.CountingDown) return;
|
||||
|
||||
if (text == "/eg" || text == "/endgame")
|
||||
{
|
||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashStartAndEndGameCmd.GetValue()) return;
|
||||
MessageWriter writer = AmongUsClient.Instance.StartEndGame();
|
||||
writer.Write((byte)GameOverReason.ImpostorDisconnect);
|
||||
AmongUsClient.Instance.FinishEndGame(writer);
|
||||
}
|
||||
|
||||
if (text == "/em" || text == "/endmeeting")
|
||||
{
|
||||
if (Utils.IsMeeting)
|
||||
{
|
||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashEndMeetingCmd.GetValue()) return;
|
||||
MeetingHud.Instance.RpcClose();
|
||||
}
|
||||
}
|
||||
|
||||
if (text == "/s" || text == "/start")
|
||||
{
|
||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashStartAndEndGameCmd.GetValue()) return;
|
||||
GameStartManager.Instance.BeginGame();
|
||||
}
|
||||
|
||||
if (text == "/l" || text == "/lastgame")
|
||||
{
|
||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashLastGameCmd.GetValue()) return;
|
||||
if (string.IsNullOrEmpty(NormalGameEndChecker.LastWinReason) || Utils.InGame) return;
|
||||
Utils.ModeratorChatCommand($"{NormalGameEndChecker.LastWinReason}", "", false);
|
||||
}
|
||||
|
||||
if (text == "/aur" || text == "/socials")
|
||||
{
|
||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashLastGameCmd.GetValue()) return;
|
||||
Utils.ModeratorChatCommand("AUR socials:\n\ng i t h u b . c o m /\nApeMV/AmongUsRevamped\n\nd i s c o r d . g g /\n83Zhzhyhya", "", false);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
if (text == "/sns" || text == "/shiftandseek")
|
||||
{
|
||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
|
||||
|
||||
if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0)
|
||||
{
|
||||
Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", $"Crewmates win by doing tasks or surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing everyone\n{Options.MisfiresToSuicide.GetInt()} wrong kill(s) = suicide", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", SendChatPatch.ConvertNum($"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide"), true);
|
||||
}
|
||||
}
|
||||
|
||||
if (text == "/sr" || text == "/speedrun")
|
||||
{
|
||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
|
||||
Utils.ModeratorChatCommand($"Speedrun:\n\nEveryone is a crewmate. The 1st player to finish tasks wins the game. Game auto ends after {Options.GameAutoEndsAfter.GetInt()}s", "", false);
|
||||
}
|
||||
|
||||
if (text == "/r" || text == "/roles")
|
||||
{
|
||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
|
||||
switch (Options.Gamemode.GetValue())
|
||||
{
|
||||
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);
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
if (Options.MisfiresToSuicide.GetInt() == 1 || Options.CantKillTime.GetInt() == 0)
|
||||
{
|
||||
Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", $"Crewmates win by doing tasks or surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImpostors win by killing everyone\n{Options.MisfiresToSuicide.GetInt()} wrong kill(s) = suicide", true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Utils.ModeratorChatCommand("Shift and Seek:\n\nImpostors can only kill someone while shapeshifted as them\nEmergency Meetings = Off", SendChatPatch.ConvertNum($"Crew wins by tasks/surviving {Options.CrewAutoWinsGameAfter.GetInt()}s\nImp wins by killing\nOne wrong kill = Can't kill for {Options.CantKillTime.GetInt()}s\n{Options.MisfiresToSuicide.GetInt()} wrong kills = suicide"), true);
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
Utils.ModeratorChatCommand($"Speedrun:\n\nEveryone is a crewmate. The 1st player to finish tasks wins the game. Game auto ends after {Options.GameAutoEndsAfter.GetInt()}s", "", false);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < Options.SlashRolesAndGamemodeCmd.GetValue()) return;
|
||||
|
||||
if (text.StartsWith("/t "))
|
||||
{
|
||||
string templateName = text[3..].Trim().ToLower();
|
||||
|
||||
if (BanManager.Templates.TryGetValue(templateName, out string templateMessage))
|
||||
{
|
||||
if (templateMessage.Length < 121)
|
||||
{
|
||||
Utils.ModeratorChatCommand(BanManager.CheckTemplate(templateMessage), "", false);
|
||||
}
|
||||
else
|
||||
{
|
||||
HudManager.Instance.Chat.AddChat(PlayerControl.LocalPlayer, Translator.Get("tooLongTemplate"));
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))]
|
||||
public static class HudManager_Update
|
||||
{
|
||||
public static void Postfix(HudManager __instance)
|
||||
{
|
||||
if (Main.GM.Value)
|
||||
{
|
||||
__instance.Chat.gameObject.SetActive(true);
|
||||
__instance.MapButton.gameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -10,11 +10,13 @@ namespace AmongUsRevamped
|
||||
public static class OptionsMenuBehaviourStartPatch
|
||||
{
|
||||
private static ClientOptionItem GM;
|
||||
private static ClientOptionItem UnlockFPS;
|
||||
private static ClientOptionItem ShowFPS;
|
||||
private static ClientOptionItem AutoStart;
|
||||
private static ClientOptionItem DarkTheme;
|
||||
private static ClientOptionItem LobbyMusic;
|
||||
private static ClientOptionItem DisableInfoWhenDead;
|
||||
private static ClientOptionItem DisableCommandHelper;
|
||||
private static ClientOptionItem DisableCompatibilityWarning;
|
||||
|
||||
public static void Postfix(OptionsMenuBehaviour __instance)
|
||||
{
|
||||
@@ -22,32 +24,24 @@ namespace AmongUsRevamped
|
||||
|
||||
if (GM == null || GM.ToggleButton == null)
|
||||
{
|
||||
GM = ClientOptionItem.Create("Game Master", Main.GM, __instance, GMButtonToggle);
|
||||
GM = ClientOptionItem.Create(Translator.Get("gameMaster"), Main.GM, __instance, GMButtonToggle);
|
||||
|
||||
static void GMButtonToggle()
|
||||
{
|
||||
if (Main.GM.Value)
|
||||
HudManager.Instance.ShowPopUp("You will now spectate games until GM is turned off.");
|
||||
}
|
||||
}
|
||||
|
||||
if (UnlockFPS == null || UnlockFPS.ToggleButton == null)
|
||||
{
|
||||
UnlockFPS = ClientOptionItem.Create("Unlock FPS", Main.UnlockFps, __instance, UnlockFPSButtonToggle);
|
||||
|
||||
static void UnlockFPSButtonToggle()
|
||||
{
|
||||
Application.targetFrameRate = Main.UnlockFps.Value ? 120 : 60;
|
||||
Logger.SendInGame($"FPS Set To {Application.targetFrameRate}");
|
||||
HudManager.Instance.ShowPopUp(Translator.Get("gameMasterWarning"));
|
||||
}
|
||||
}
|
||||
|
||||
if (ShowFPS == null || ShowFPS.ToggleButton == null)
|
||||
ShowFPS = ClientOptionItem.Create("Show FPS", Main.ShowFps, __instance);
|
||||
ShowFPS = ClientOptionItem.Create(Translator.Get("showFPS"), Main.ShowFps, __instance);
|
||||
|
||||
if (DisableInfoWhenDead == null || DisableInfoWhenDead.ToggleButton == null)
|
||||
DisableInfoWhenDead = ClientOptionItem.Create(Translator.Get("disableInfoWhenDead"), Main.DisableInfoWhenDead, __instance);
|
||||
|
||||
if (AutoStart == null || AutoStart.ToggleButton == null)
|
||||
{
|
||||
AutoStart = ClientOptionItem.Create("Auto Start", Main.AutoStart, __instance, AutoStartButtonToggle);
|
||||
AutoStart = ClientOptionItem.Create(Translator.Get("autoStart"), Main.AutoStart, __instance, AutoStartButtonToggle);
|
||||
|
||||
static void AutoStartButtonToggle()
|
||||
{
|
||||
@@ -55,16 +49,22 @@ namespace AmongUsRevamped
|
||||
GameStartManager.Instance.startState == GameStartManager.StartingStates.Countdown)
|
||||
{
|
||||
GameStartManager.Instance.ResetStartState();
|
||||
Logger.SendInGame("CancelStartCountDown");
|
||||
Logger.SendInGame(Translator.Get("CancelStartCountDown"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (DarkTheme == null || DarkTheme.ToggleButton == null)
|
||||
DarkTheme = ClientOptionItem.Create("Enable Dark Theme", Main.DarkTheme, __instance);
|
||||
DarkTheme = ClientOptionItem.Create(Translator.Get("enableDarkTheme"), Main.DarkTheme, __instance);
|
||||
|
||||
if (LobbyMusic == null || LobbyMusic.ToggleButton == null)
|
||||
LobbyMusic = ClientOptionItem.Create("Lobby Music", Main.LobbyMusic, __instance);
|
||||
LobbyMusic = ClientOptionItem.Create(Translator.Get("enableLobbyMusic"), Main.LobbyMusic, __instance);
|
||||
|
||||
if (DisableCommandHelper == null || DisableCommandHelper.ToggleButton == null)
|
||||
DisableCommandHelper = ClientOptionItem.Create(Translator.Get("disableCommandHelper"), Main.DisableCommandHelper, __instance);
|
||||
|
||||
if (DisableCompatibilityWarning == null || DisableCompatibilityWarning.ToggleButton == null)
|
||||
DisableCompatibilityWarning = ClientOptionItem.Create(Translator.Get("disableCompatibilityWarning"), Main.DisableCompatibilityWarning, __instance);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -76,4 +76,29 @@ namespace AmongUsRevamped
|
||||
ClientOptionItem.CustomBackground?.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
// MY MODSTAMP IS FASTER THAN YOURS!!11!!!1
|
||||
[HarmonyPatch(typeof(SplashManager), nameof(SplashManager.Update))]
|
||||
internal class SplashLogoAnimatorPatch
|
||||
{
|
||||
public static void Prefix(SplashManager __instance)
|
||||
{
|
||||
ModManager.Instance.ShowModStamp();
|
||||
__instance.sceneChanger.AllowFinishLoadingScene();
|
||||
__instance.startedSceneLoad = true;
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(HudManager), nameof(HudManager.Update))]
|
||||
public static class HudManager_Update
|
||||
{
|
||||
public static void Postfix(HudManager __instance)
|
||||
{
|
||||
if (Main.GM.Value && AmongUsClient.Instance.AmHost)
|
||||
{
|
||||
__instance.Chat.gameObject.SetActive(true);
|
||||
__instance.MapButton.gameObject.SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+228
-64
@@ -1,7 +1,10 @@
|
||||
using System;
|
||||
using BepInEx.Unity.IL2CPP;
|
||||
using System;
|
||||
using System.Text;
|
||||
using Il2CppInterop.Runtime.InteropTypes.Arrays;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
//https://github.com/Gurge44/EndlessHostRoles/blob/main/Patches/CredentialsPatch.cs
|
||||
namespace AmongUsRevamped
|
||||
@@ -123,8 +126,12 @@ namespace AmongUsRevamped
|
||||
|
||||
Sb.Append(Utils.InGame ? " - " : "\r\n");
|
||||
Sb.Append($"<color={color}>Ping: {ping}</color>");
|
||||
AppendSeparator();
|
||||
Sb.Append($"Server: {Utils.GetRegionName()}");
|
||||
|
||||
if (Utils.GetRegionName() != "")
|
||||
{
|
||||
AppendSeparator();
|
||||
Sb.Append(Utils.GetRegionName());
|
||||
}
|
||||
|
||||
if (Main.ShowFps.Value && LastFPS.Count > 0)
|
||||
{
|
||||
@@ -166,82 +173,239 @@ namespace AmongUsRevamped
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// https://github.com/3X3CODE/MainMenuEnhanced/blob/main/MainMenuEnhanced/VisualPatch.cs
|
||||
[HarmonyPatch(typeof(MainMenuManager), nameof(MainMenuManager.Start))]
|
||||
public static class MainMenuManagerStartPatch
|
||||
{
|
||||
public static void Postfix(MainMenuManager __instance)
|
||||
// https://github.com/3X3CODE/MainMenuEnhanced/blob/main/MainMenuEnhanced/VisualPatch.cs
|
||||
[HarmonyPatch(typeof(MainMenuManager), nameof(MainMenuManager.Start))]
|
||||
public static class MainMenuManagerStartPatch
|
||||
{
|
||||
if (__instance == null) return;
|
||||
|
||||
var bg = GameObject.Find("BackgroundTexture");
|
||||
if (bg != null)
|
||||
private static PassiveButton template;
|
||||
private static PassiveButton discordButton;
|
||||
private static PassiveButton gitHubButton;
|
||||
private static PassiveButton animationSceneButton;
|
||||
private static Transform buttonParent;
|
||||
public static void Postfix(MainMenuManager __instance)
|
||||
{
|
||||
bg.SetActive(false);
|
||||
}
|
||||
if (__instance == null) return;
|
||||
if (template == null) template = __instance.quitButton;
|
||||
if (template == null) return;
|
||||
|
||||
var leftPanel = GameObject.Find("LeftPanel");
|
||||
if (leftPanel != null)
|
||||
{
|
||||
leftPanel.gameObject.GetComponent<SpriteRenderer>().enabled = false;
|
||||
}
|
||||
|
||||
var div = GameObject.Find("MainUI/AspectScaler/LeftPanel/Main Buttons/Divider");
|
||||
if (div != null)
|
||||
{
|
||||
div.SetActive(false);
|
||||
}
|
||||
|
||||
|
||||
Transform tintTrans = __instance.transform.Find("MainUI/Tint");
|
||||
var tint = tintTrans.gameObject;
|
||||
if (tint != null)
|
||||
{
|
||||
tint.SetActive(false);
|
||||
}
|
||||
|
||||
DisableObject("WindowShine");
|
||||
DisableComponent("RightPanel");
|
||||
DisableComponent("MaskedBlackScreen");
|
||||
|
||||
Transform playTransform = __instance.transform.Find("MainUI/AspectScaler/LeftPanel/Main Buttons/PlayButton/FontPlacer/Text_TMP");
|
||||
if (playTransform != null)
|
||||
{
|
||||
var playbutton = playTransform.gameObject;
|
||||
if (playbutton != null)
|
||||
if (buttonParent == null) buttonParent = template.transform.parent;
|
||||
if (discordButton == null)
|
||||
{
|
||||
if (playbutton.TryGetComponent<TextTranslatorTMP>(out var tmp))
|
||||
discordButton = CreateButton(
|
||||
__instance,
|
||||
"DiscordButton",
|
||||
new(2.1f, 4.05f, 1f),
|
||||
new(88, 101, 242, byte.MaxValue),
|
||||
new(148, 161, byte.MaxValue, byte.MaxValue),
|
||||
() => Application.OpenURL("https://discord.gg/83Zhzhyhya"),
|
||||
"Discord");
|
||||
}
|
||||
|
||||
if (gitHubButton == null)
|
||||
{
|
||||
gitHubButton = CreateButton(
|
||||
__instance,
|
||||
"GitHubButton",
|
||||
new(3.8f, 4.05f, 1f),
|
||||
new(153, 153, 153, byte.MaxValue),
|
||||
new(209, 209, 209, byte.MaxValue),
|
||||
() => Application.OpenURL("https://github.com/ApeMV/AmongUsRevamped"),
|
||||
"GitHub");
|
||||
}
|
||||
|
||||
if (animationSceneButton == null)
|
||||
{
|
||||
animationSceneButton = CreateButton(
|
||||
__instance,
|
||||
"AnimationTestSceneButton",
|
||||
new(0f, 2.65f, 1f),
|
||||
new(139, 0, 0, byte.MaxValue),
|
||||
new(255, 127, 127, byte.MaxValue),
|
||||
() => SceneChanger.ChangeScene("AnimationTestScene"),
|
||||
"Animation Tester");
|
||||
}
|
||||
|
||||
var bg = GameObject.Find("BackgroundTexture");
|
||||
if (bg != null)
|
||||
{
|
||||
bg.SetActive(false);
|
||||
}
|
||||
|
||||
var leftPanel = GameObject.Find("LeftPanel");
|
||||
if (leftPanel != null)
|
||||
{
|
||||
leftPanel.gameObject.GetComponent<SpriteRenderer>().enabled = false;
|
||||
}
|
||||
|
||||
var div = GameObject.Find("MainUI/AspectScaler/LeftPanel/Main Buttons/Divider");
|
||||
if (div != null)
|
||||
{
|
||||
div.SetActive(false);
|
||||
}
|
||||
|
||||
var logo = GameObject.Find("MainUI/AspectScaler/LeftPanel/Sizer/LOGO-AU");
|
||||
if (logo != null)
|
||||
{
|
||||
logo.SetActive(false);
|
||||
}
|
||||
|
||||
var h1 = GameObject.Find("AccountManager/AccountTab/GameHeader/BarSprite/FriendsButton/Highlight/NewRequestActive/Text_TMP");
|
||||
if (h1 != null)
|
||||
{
|
||||
Object.Destroy(h1);
|
||||
}
|
||||
|
||||
var h2 = GameObject.Find("AccountManager/AccountTab/GameHeader/BarSprite/FriendsButton/Highlight/NewRequestActive/Background");
|
||||
if (h2 != null)
|
||||
{
|
||||
Object.Destroy(h2);
|
||||
}
|
||||
|
||||
|
||||
Transform tintTrans = __instance.transform.Find("MainUI/Tint");
|
||||
var tint = tintTrans.gameObject;
|
||||
if (tint != null)
|
||||
{
|
||||
tint.SetActive(false);
|
||||
}
|
||||
|
||||
DisableObject("WindowShine");
|
||||
DisableComponent("RightPanel");
|
||||
DisableComponent("MaskedBlackScreen");
|
||||
|
||||
Transform playTransform = __instance.transform.Find("MainUI/AspectScaler/LeftPanel/Main Buttons/PlayButton/FontPlacer/Text_TMP");
|
||||
if (playTransform != null)
|
||||
{
|
||||
var playbutton = playTransform.gameObject;
|
||||
if (playbutton != null)
|
||||
{
|
||||
tmp.enabled = false;
|
||||
}
|
||||
if (playbutton.TryGetComponent<TextMeshPro>(out var text))
|
||||
{
|
||||
text.text = "Start";
|
||||
if (playbutton.TryGetComponent<TextTranslatorTMP>(out var tmp))
|
||||
{
|
||||
tmp.enabled = false;
|
||||
}
|
||||
if (playbutton.TryGetComponent<TextMeshPro>(out var text))
|
||||
{
|
||||
text.text = "Start";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void DisableObject(string name)
|
||||
{
|
||||
var obj = GameObject.Find(name);
|
||||
if (obj != null)
|
||||
static void DisableObject(string name)
|
||||
{
|
||||
obj.SetActive(false);
|
||||
var obj = GameObject.Find(name);
|
||||
if (obj != null)
|
||||
{
|
||||
obj.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
static void DisableComponent(string name)
|
||||
{
|
||||
var obj = GameObject.Find(name);
|
||||
if (obj != null)
|
||||
{
|
||||
if (obj.TryGetComponent<SpriteRenderer>(out var renderer))
|
||||
{
|
||||
renderer.enabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void DisableComponent(string name)
|
||||
private static PassiveButton CreateButton(MainMenuManager menu, string name, Vector3 localPosition, Color32 normalColor, Color32 hoverColor, Action action, string label)
|
||||
{
|
||||
var obj = GameObject.Find(name);
|
||||
if (obj != null)
|
||||
var parent = menu.transform.Find("MainUI/AspectScaler/LeftPanel/Main Buttons");
|
||||
if (parent == null) return null;
|
||||
|
||||
var button = Object.Instantiate(menu.quitButton, parent);
|
||||
button.name = name;
|
||||
|
||||
button.transform.localPosition = localPosition;
|
||||
if (name == "GitHubButton" || name == "DiscordButton")
|
||||
{
|
||||
if (obj.TryGetComponent<SpriteRenderer>(out var renderer))
|
||||
{
|
||||
renderer.enabled = false;
|
||||
}
|
||||
button.transform.localScale = new Vector3(0.8f, 1f, 1f);
|
||||
}
|
||||
else
|
||||
{
|
||||
button.transform.localScale = new Vector3(1.8f, 1.6f, 1f);
|
||||
}
|
||||
|
||||
var aspect = button.GetComponent<AspectPosition>();
|
||||
if (aspect != null)
|
||||
{
|
||||
aspect.enabled = false;
|
||||
}
|
||||
|
||||
button.OnClick = new();
|
||||
button.OnClick.AddListener(action);
|
||||
|
||||
var buttonText = button.transform.Find("FontPlacer/Text_TMP").GetComponent<TMP_Text>();
|
||||
Utils.DestroyTranslator(buttonText);
|
||||
buttonText.text = label;
|
||||
buttonText.fontSize = buttonText.fontSizeMax = buttonText.fontSizeMin = 3.5f;
|
||||
buttonText.enableWordWrapping = false;
|
||||
buttonText.horizontalAlignment = HorizontalAlignmentOptions.Center;
|
||||
|
||||
var normalSprite = button.inactiveSprites.GetComponent<SpriteRenderer>();
|
||||
var hoverSprite = button.activeSprites.GetComponent<SpriteRenderer>();
|
||||
normalSprite.color = normalColor;
|
||||
hoverSprite.color = hoverColor;
|
||||
|
||||
button.gameObject.SetActive(true);
|
||||
return button;
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(SignInStatusComponent), nameof(SignInStatusComponent.SetOnline))]
|
||||
public static class SignInStatusComponentSetOnlinePatch
|
||||
{
|
||||
private static void Postfix()
|
||||
{
|
||||
int pluginCount = IL2CPPChainloader.Instance.Plugins.Count;
|
||||
Logger.Info($" {pluginCount} Plugins detected", "PluginCheck");
|
||||
|
||||
if (pluginCount > 1 && !Main.DisableCompatibilityWarning.Value)
|
||||
{
|
||||
DisconnectPopup.Instance.gameObject.SetActive(true);
|
||||
DisconnectPopup.Instance._textArea.enableWordWrapping = false;
|
||||
DisconnectPopup.Instance._textArea.text = Translator.Get("pluginWarning");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if !ANDROID
|
||||
[HarmonyPatch(typeof(ServerDropdown), nameof(ServerDropdown.FillServerOptions))]
|
||||
public static class ServerDropdownPatch
|
||||
{
|
||||
public static bool Prefix(ServerDropdown __instance)
|
||||
{
|
||||
if (SceneManager.GetActiveScene().name == "FindAGame") return true;
|
||||
SpriteRenderer bg = __instance.background;
|
||||
bg.size = new Vector2(4, 1);
|
||||
ServerManager sm = ServerManager.Instance;
|
||||
TranslationController tc = TranslationController.Instance;
|
||||
int totalCols = Mathf.Max(1, Mathf.CeilToInt(sm.AvailableRegions.Length / (float)5));
|
||||
int rowLimit = Mathf.Min(sm.AvailableRegions.Length, 5);
|
||||
|
||||
for (var index = 0; index < sm.AvailableRegions.Length; index++)
|
||||
{
|
||||
IRegionInfo ri = sm.AvailableRegions[index];
|
||||
var b = __instance.ButtonPool.Get<ServerListButton>();
|
||||
b.transform.localPosition = new Vector3(((index / 5) - ((totalCols - 1) / 2f)) * 3.15f, __instance.y_posButton - (0.5f * (index % 5)), -1f);
|
||||
b.Text.text = tc.GetStringWithDefault(ri.TranslateName, ri.Name, new Il2CppReferenceArray<Il2CppSystem.Object>(0));
|
||||
b.Text.ForceMeshUpdate();
|
||||
b.Button.OnClick.RemoveAllListeners();
|
||||
b.Button.OnClick.AddListener((Action)(() => __instance.ChooseOption(ri)));
|
||||
__instance.controllerSelectable.Add(b.Button);
|
||||
}
|
||||
|
||||
float h = 1.2f + (0.5f * (rowLimit - 1));
|
||||
float w = totalCols > 1 ? (3.15f * (totalCols - 1)) + bg.size.x : bg.size.x;
|
||||
bg.transform.localPosition = new Vector3(0f, __instance.initialYPos - ((h - 1.2f) / 2f), 0f);
|
||||
bg.size = new Vector2(w, h);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,32 @@
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
[HarmonyPatch(typeof(DeconSystem), nameof(DeconSystem.UpdateSystem))]
|
||||
public static class DeconSystemUpdateSystemPatch
|
||||
{
|
||||
public static void Prefix(DeconSystem __instance)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
if (Options.ChangeDecontaminationTime.GetBool())
|
||||
{
|
||||
__instance.DoorOpenTime = Main.CurrentMap switch
|
||||
{
|
||||
MapNames.MiraHQ => Options.DecontaminationDoorOpenTimeOnMiraHQ.GetFloat(),
|
||||
MapNames.Polus => Options.DecontaminationDoorOpenTimeOnPolus.GetFloat(),
|
||||
_ => 3f
|
||||
};
|
||||
|
||||
__instance.DeconTime = Main.CurrentMap switch
|
||||
{
|
||||
MapNames.MiraHQ => Options.DecontaminationTimeOnMiraHQ.GetFloat(),
|
||||
MapNames.Polus => Options.DecontaminationTimeOnPolus.GetFloat(),
|
||||
_ => 3f
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
__instance.DoorOpenTime = 3f;
|
||||
__instance.DeconTime = 3f;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,195 @@
|
||||
using System;
|
||||
using Hazel;
|
||||
using Il2CppInterop.Runtime.InteropTypes.Arrays;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
// https://github.com/ykundesu/SuperNewRoles/blob/master/SuperNewRoles/Mode/SuperHostRoles/BlockTool.cs
|
||||
internal static class DisableDevice
|
||||
{
|
||||
public static readonly List<byte> DesyncComms = [];
|
||||
private static int frame;
|
||||
|
||||
public static readonly Dictionary<string, Vector2> DevicePos = new()
|
||||
{
|
||||
["SkeldAdmin"] = new(3.48f, -8.62f),
|
||||
["SkeldCamera"] = new(-13.06f, -2.45f),
|
||||
["MiraHQAdmin"] = new(21.02f, 19.09f),
|
||||
["MiraHQDoorLog"] = new(16.22f, 5.82f),
|
||||
["PolusLeftAdmin"] = new(22.80f, -21.52f),
|
||||
["PolusRightAdmin"] = new(24.66f, -21.52f),
|
||||
["PolusCamera"] = new(2.96f, -12.74f),
|
||||
["PolusVital"] = new(26.70f, -15.94f),
|
||||
["DleksAdmin"] = new(-3.48f, -8.62f),
|
||||
["DleksCamera"] = new(13.06f, -2.45f),
|
||||
["AirshipCockpitAdmin"] = new(-22.32f, 0.91f),
|
||||
["AirshipRecordsAdmin"] = new(19.89f, 12.60f),
|
||||
["AirshipCamera"] = new(8.10f, -9.63f),
|
||||
["AirshipVital"] = new(25.24f, -7.94f),
|
||||
["FungleVital"] = new(-2.50f, -9.80f),
|
||||
["SubmergedVital"] = new(5f, 32.54f),
|
||||
["SubmergedLeftAdmin"] = new(-9.45f, 10.16f),
|
||||
["SubmergedRightAdmin"] = new(-7.07f, 10.16f),
|
||||
["SubmergedCamera"] = new(-3.41f, -34.56f)
|
||||
};
|
||||
|
||||
public static bool DoDisable => Options.DisableDevices.GetBool();
|
||||
|
||||
public static float UsableDistance => Main.CurrentMap switch
|
||||
{
|
||||
MapNames.Skeld => 1.5f,
|
||||
MapNames.MiraHQ => 2.2f,
|
||||
MapNames.Polus => 1.4f,
|
||||
MapNames.Dleks => 1.5f,
|
||||
MapNames.Airship => 1.6f,
|
||||
MapNames.Fungle => 1.7f,
|
||||
_ => 2f
|
||||
};
|
||||
|
||||
public static void FixedUpdate()
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost || ShipStatus.Instance == null || !Utils.GamePastRoleSelection) return;
|
||||
frame = frame == 5 ? 0 : ++frame;
|
||||
if (frame != 0) return;
|
||||
|
||||
if (!DoDisable) return;
|
||||
|
||||
foreach (PlayerControl pc in Main.AllPlayerControls)
|
||||
{
|
||||
if (pc.Data.IsDead || (Main.GM.Value && pc == PlayerControl.LocalPlayer)) continue;
|
||||
|
||||
try
|
||||
{
|
||||
var doComms = false;
|
||||
Vector2 PlayerPos = pc.GetTruePosition();
|
||||
|
||||
if (!Utils.IsActive(SystemTypes.Comms))
|
||||
{
|
||||
switch (Main.NormalOptions.MapId)
|
||||
{
|
||||
case 0:
|
||||
if (Options.DisableSkeldAdmin.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["SkeldAdmin"]) <= UsableDistance;
|
||||
if (Options.DisableSkeldCamera.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["SkeldCamera"]) <= UsableDistance;
|
||||
break;
|
||||
case 1:
|
||||
if (Options.DisableMiraHQAdmin.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["MiraHQAdmin"]) <= UsableDistance;
|
||||
if (Options.DisableMiraHQDoorLog.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["MiraHQDoorLog"]) <= UsableDistance;
|
||||
break;
|
||||
case 2:
|
||||
if (Options.DisablePolusAdmin.GetBool())
|
||||
{
|
||||
doComms |= Vector2.Distance(PlayerPos, DevicePos["PolusLeftAdmin"]) <= UsableDistance;
|
||||
doComms |= Vector2.Distance(PlayerPos, DevicePos["PolusRightAdmin"]) <= UsableDistance;
|
||||
}
|
||||
|
||||
if (Options.DisablePolusCamera.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["PolusCamera"]) <= UsableDistance;
|
||||
if (Options.DisablePolusVital.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["PolusVital"]) <= UsableDistance;
|
||||
break;
|
||||
case 3:
|
||||
if (Options.DisableSkeldAdmin.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["DleksAdmin"]) <= UsableDistance;
|
||||
if (Options.DisableSkeldCamera.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["DleksCamera"]) <= UsableDistance;
|
||||
break;
|
||||
case 4:
|
||||
if (Options.DisableAirshipCockpitAdmin.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["AirshipCockpitAdmin"]) <= UsableDistance;
|
||||
if (Options.DisableAirshipRecordsAdmin.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["AirshipRecordsAdmin"]) <= UsableDistance;
|
||||
if (Options.DisableAirshipCamera.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["AirshipCamera"]) <= UsableDistance;
|
||||
if (Options.DisableAirshipVital.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["AirshipVital"]) <= UsableDistance;
|
||||
break;
|
||||
case 5:
|
||||
if (Options.DisableFungleVital.GetBool()) doComms |= Vector2.Distance(PlayerPos, DevicePos["FungleVital"]) <= UsableDistance;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (doComms && !pc.inVent)
|
||||
{
|
||||
if (!DesyncComms.Contains(pc.PlayerId))
|
||||
{
|
||||
DesyncComms.Add(pc.PlayerId);
|
||||
SendDesyncRepair(pc, SystemTypes.Comms, 128);
|
||||
}
|
||||
}
|
||||
else if (!doComms && DesyncComms.Contains(pc.PlayerId))
|
||||
{
|
||||
DesyncComms.Remove(pc.PlayerId);
|
||||
SendDesyncRepair(pc, SystemTypes.Comms, 16);
|
||||
|
||||
if (Main.NormalOptions.MapId is 1 or 5) SendDesyncRepair(pc, SystemTypes.Comms, 17);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) { Logger.Exception(ex, "DisableDevice"); }
|
||||
}
|
||||
}
|
||||
public static void SendDesyncRepair(PlayerControl target, SystemTypes systemType, byte amount)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
if (target == null || target.Data == null || target.Data.ClientId == AmongUsClient.Instance.HostId) return;
|
||||
|
||||
MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(
|
||||
ShipStatus.Instance.NetId,
|
||||
(byte)RpcCalls.UpdateSystem,
|
||||
SendOption.Reliable,
|
||||
target.Data.ClientId
|
||||
);
|
||||
|
||||
writer.Write((byte)systemType);
|
||||
writer.WritePacked(target.NetId);
|
||||
writer.Write(amount);
|
||||
|
||||
AmongUsClient.Instance.FinishRpcImmediately(writer);
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(ShipStatus), nameof(ShipStatus.Start))]
|
||||
public class RemoveDisableDevicesPatch
|
||||
{
|
||||
public static void Postfix()
|
||||
{
|
||||
if (!Options.DisableDevices.GetBool() || !AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
UpdateDisableDevices();
|
||||
}
|
||||
|
||||
public static void UpdateDisableDevices()
|
||||
{
|
||||
PlayerControl player = PlayerControl.LocalPlayer;
|
||||
|
||||
Il2CppArrayBase<MapConsole> admins = Object.FindObjectsOfType<MapConsole>(true);
|
||||
Il2CppArrayBase<SystemConsole> consoles = Object.FindObjectsOfType<SystemConsole>(true);
|
||||
if (admins == null || consoles == null) return;
|
||||
|
||||
switch (Main.NormalOptions.MapId)
|
||||
{
|
||||
case 3:
|
||||
case 0:
|
||||
if (Options.DisableSkeldAdmin.GetBool()) admins[0].gameObject.GetComponent<CircleCollider2D>().enabled = false;
|
||||
if (Options.DisableSkeldCamera.GetBool()) consoles.DoIf(x => x.name == "SurvConsole", x => x.gameObject.GetComponent<PolygonCollider2D>().enabled = false);
|
||||
break;
|
||||
case 1:
|
||||
if (Options.DisableMiraHQAdmin.GetBool()) admins[0].gameObject.GetComponent<CircleCollider2D>().enabled = false;
|
||||
if (Options.DisableMiraHQDoorLog.GetBool()) consoles.DoIf(x => x.name == "SurvLogConsole", x => x.gameObject.GetComponent<BoxCollider2D>().enabled = false);
|
||||
|
||||
break;
|
||||
case 2:
|
||||
if (Options.DisablePolusAdmin.GetBool()) admins.Do(x => x.gameObject.GetComponent<BoxCollider2D>().enabled = false);
|
||||
if (Options.DisablePolusCamera.GetBool()) consoles.DoIf(x => x.name == "Surv_Panel", x => x.gameObject.GetComponent<BoxCollider2D>().enabled = false);
|
||||
if (Options.DisablePolusVital.GetBool()) consoles.DoIf(x => x.name == "panel_vitals", x => x.gameObject.GetComponent<BoxCollider2D>().enabled = false);
|
||||
break;
|
||||
case 4:
|
||||
admins.Do(x =>
|
||||
{
|
||||
if ((Options.DisableAirshipCockpitAdmin.GetBool() && x.name == "panel_cockpit_map") ||
|
||||
(Options.DisableAirshipRecordsAdmin.GetBool() && x.name == "records_admin_map"))
|
||||
x.gameObject.GetComponent<BoxCollider2D>().enabled = false;
|
||||
});
|
||||
|
||||
if (Options.DisableAirshipCamera.GetBool()) consoles.DoIf(x => x.name == "task_cams", x => x.gameObject.GetComponent<BoxCollider2D>().enabled = false);
|
||||
if (Options.DisableAirshipVital.GetBool()) consoles.DoIf(x => x.name == "panel_vitals", x => x.gameObject.GetComponent<CircleCollider2D>().enabled = false);
|
||||
break;
|
||||
case 5:
|
||||
if (Options.DisableFungleVital.GetBool()) consoles.DoIf(x => x.name == "VitalsConsole", x => x.gameObject.GetComponent<BoxCollider2D>().enabled = false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -16,9 +16,14 @@ public class DiscordRPC
|
||||
{
|
||||
if (activity == null) return;
|
||||
|
||||
var details = $"AmongUsRevamped {Main.ModVersion}";
|
||||
var details = $"Revamped {Main.ModVersion}";
|
||||
activity.Details = details;
|
||||
|
||||
activity.Assets = new ActivityAssets
|
||||
{
|
||||
LargeImage = "https://i.imgur.com/ZnC1toT.png"
|
||||
};
|
||||
|
||||
try
|
||||
{
|
||||
if (activity.State != "In Menus")
|
||||
@@ -31,10 +36,10 @@ public class DiscordRPC
|
||||
Region = Utils.GetRegionName();
|
||||
}
|
||||
|
||||
if (Lobbycode != "" && Region != "") details = $"AmongUsRevamped - {Lobbycode} ({Region})";
|
||||
if (Lobbycode != "" && Region != "") details = $"Revamped - {Lobbycode} ({Region})";
|
||||
}
|
||||
else
|
||||
details = $"AmongUsRevamped {Main.ModVersion}";
|
||||
details = $"Revamped {Main.ModVersion}";
|
||||
|
||||
activity.Details = details;
|
||||
}
|
||||
@@ -43,7 +48,7 @@ public class DiscordRPC
|
||||
{
|
||||
Logger.Error("Error in updating discord rpc", "DiscordPatch");
|
||||
Logger.Exception(ex, "DiscordPatch");
|
||||
details = $"AmongUsRevamped v{Main.ModVersion}";
|
||||
details = $"Revamped v{Main.ModVersion}";
|
||||
activity.Details = details;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,237 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.AddressableAssets;
|
||||
using UnityEngine.SceneManagement;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
class CreateOptionsPickerPatch
|
||||
{
|
||||
public static bool SetDleks = false;
|
||||
public static bool SetDleks2;
|
||||
private static bool InitiatedDleks;
|
||||
private static bool isSkeldFlipped = false;
|
||||
public static bool FlippedSkeld
|
||||
{
|
||||
get => isSkeldFlipped;
|
||||
set
|
||||
{
|
||||
if (AmongUsClient.Instance == null || isSkeldFlipped == value) return;
|
||||
|
||||
AssetReference temp = AmongUsClient.Instance.ShipPrefabs[3];
|
||||
AmongUsClient.Instance.ShipPrefabs[3] = AmongUsClient.Instance.ShipPrefabs[0];
|
||||
AmongUsClient.Instance.ShipPrefabs[0] = temp;
|
||||
|
||||
isSkeldFlipped = value;
|
||||
}
|
||||
}
|
||||
|
||||
private static MapSelectButton DleksButton;
|
||||
[HarmonyPatch]
|
||||
public static class GameOptionsMapPickerPatch
|
||||
{
|
||||
[HarmonyPatch(typeof(GameOptionsMapPicker), nameof(GameOptionsMapPicker.SetupMapButtons))]
|
||||
[HarmonyPostfix]
|
||||
public static void Postfix_Initialize(CreateGameMapPicker __instance)
|
||||
{
|
||||
float delay;
|
||||
if (SceneManager.GetActiveScene().name == "MainMenu" && InitiatedDleks)
|
||||
{
|
||||
delay = 0.2f;
|
||||
}
|
||||
else
|
||||
{
|
||||
delay = 0f;
|
||||
InitiatedDleks = true;
|
||||
}
|
||||
|
||||
if (SceneManager.GetActiveScene().name == "FindAGame") return;
|
||||
|
||||
new LateTask(() =>
|
||||
{
|
||||
int DleksPos = 3;
|
||||
|
||||
MapSelectButton[] AllMapButton = __instance.transform.GetComponentsInChildren<MapSelectButton>();
|
||||
AllMapButton = AllMapButton.Where(x => x.gameObject.name != "DleksButton").ToArray();
|
||||
|
||||
if (AllMapButton != null)
|
||||
{
|
||||
GameObject dlekS_ehT = null;
|
||||
if (!SetDleks2 || SceneManager.GetActiveScene().name != "MainMenu")
|
||||
{
|
||||
dlekS_ehT = UnityEngine.Object.Instantiate(AllMapButton[0].gameObject, __instance.transform);
|
||||
dlekS_ehT.name = "DleksButton";
|
||||
SetDleks2 = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
dlekS_ehT = __instance.transform.Find("DleksButton")?.gameObject;
|
||||
}
|
||||
|
||||
if (dlekS_ehT == null) return;
|
||||
dlekS_ehT.name = "DleksButton";
|
||||
dlekS_ehT.transform.position = AllMapButton[DleksPos].transform.position;
|
||||
dlekS_ehT.transform.SetSiblingIndex(DleksPos + 2);
|
||||
MapSelectButton dlekS_ehT_MapButton = dlekS_ehT.GetComponent<MapSelectButton>();
|
||||
DleksButton = dlekS_ehT_MapButton;
|
||||
|
||||
foreach (var icon in dlekS_ehT_MapButton.MapIcon)
|
||||
{
|
||||
if (icon == null || icon.transform == null) continue;
|
||||
icon.flipX = true;
|
||||
}
|
||||
dlekS_ehT_MapButton.Button.OnClick.RemoveAllListeners();
|
||||
dlekS_ehT_MapButton.Button.OnClick.AddListener((UnityEngine.Events.UnityAction)(() =>
|
||||
{
|
||||
FlippedSkeld = true;
|
||||
|
||||
__instance.SelectMap(__instance.AllMapIcons[0]);
|
||||
|
||||
if (__instance.selectedButton)
|
||||
{
|
||||
__instance.selectedButton.Button.SelectButton(false);
|
||||
}
|
||||
__instance.selectedButton = dlekS_ehT_MapButton;
|
||||
__instance.selectedButton.Button.SelectButton(true);
|
||||
__instance.selectedMapId = 3;
|
||||
|
||||
if (!Utils.isHideNSeek)
|
||||
Main.NormalOptions.MapId = 0;
|
||||
else if (Utils.isHideNSeek)
|
||||
Main.HideNSeekOptions.MapId = 0;
|
||||
|
||||
__instance.MapImage.sprite = Utils.LoadSprite($"AmongUsRevamped.Resources.Images.DleksBanner.png", 100f);
|
||||
__instance.MapName.sprite = Utils.LoadSprite($"AmongUsRevamped.Resources.Images.DleksBanner-Wordart.png", 100f);
|
||||
}));
|
||||
|
||||
for (int i = DleksPos; i < AllMapButton.Length; i++)
|
||||
{
|
||||
AllMapButton[i].transform.localPosition += new Vector3(0.625f, 0f, 0f);
|
||||
}
|
||||
|
||||
if (DleksButton != null)
|
||||
{
|
||||
if (SetDleks)
|
||||
{
|
||||
if (__instance.selectedButton)
|
||||
{
|
||||
__instance.selectedButton.Button.SelectButton(false);
|
||||
}
|
||||
DleksButton.Button.SelectButton(true);
|
||||
__instance.selectedButton = DleksButton;
|
||||
__instance.selectedMapId = 3;
|
||||
|
||||
__instance.MapImage.sprite = Utils.LoadSprite($"AmongUsRevamped.Resources.Images.DleksBanner.png", 100f);
|
||||
__instance.MapName.sprite = Utils.LoadSprite($"AmongUsRevamped.Resources.Images.DleksBanner-Wordart.png", 100f);
|
||||
}
|
||||
else
|
||||
{
|
||||
DleksButton.Button.SelectButton(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}, delay, "ApplyDleks");
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(GameOptionsMapPicker), nameof(GameOptionsMapPicker.FixedUpdate))]
|
||||
[HarmonyPrefix]
|
||||
public static bool Prefix_FixedUpdate(GameOptionsMapPicker __instance)
|
||||
{
|
||||
if (__instance == null) return true;
|
||||
|
||||
if (__instance.MapName == null) return false;
|
||||
|
||||
FlippedSkeld = (__instance.selectedMapId == 3);
|
||||
|
||||
if (DleksButton != null) SetDleks = __instance.selectedMapId == 3;
|
||||
|
||||
if (__instance.selectedMapId == 3)
|
||||
{
|
||||
if (SceneManager.GetActiveScene().name == "FindAGame")
|
||||
{
|
||||
__instance.SelectMap(0);
|
||||
SetDleks = false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(CreateOptionsPicker), nameof(CreateOptionsPicker.Awake))]
|
||||
class MenuMapPickerPatch
|
||||
{
|
||||
public static void Postfix(CreateOptionsPicker __instance)
|
||||
{
|
||||
Transform mapPickerTransform = __instance.transform.Find("MapPicker");
|
||||
MapPickerMenu mapPickerMenu = mapPickerTransform.Find("Map Picker Menu").GetComponent<MapPickerMenu>();
|
||||
|
||||
MapFilterButton airhipIconInMenu = __instance.MapMenu.MapButtons[3];
|
||||
MapFilterButton fungleIconInMenu = __instance.MapMenu.MapButtons[4];
|
||||
MapFilterButton skeldIconInMenu = __instance.MapMenu.MapButtons[0];
|
||||
MapFilterButton dleksIconInMenuCopy = UnityEngine.Object.Instantiate(airhipIconInMenu, airhipIconInMenu.transform.parent);
|
||||
|
||||
Transform skeldMenuButton = mapPickerMenu.transform.Find("Skeld");
|
||||
Transform polusMenuButton = mapPickerMenu.transform.Find("Polus");
|
||||
Transform airshipMenuButton = mapPickerMenu.transform.Find("Airship");
|
||||
Transform fungleMenuButton = mapPickerMenu.transform.Find("Fungle");
|
||||
Transform dleksMenuButtonCopy = UnityEngine.Object.Instantiate(airshipMenuButton, airshipMenuButton.parent);
|
||||
|
||||
// Set mapid for Dleks button
|
||||
PassiveButton dleksButton = dleksMenuButtonCopy.GetComponent<PassiveButton>();
|
||||
dleksButton.OnClick.m_PersistentCalls.m_Calls._items[0].arguments.intArgument = (int)MapNames.Dleks;
|
||||
|
||||
SpriteRenderer dleksImage = dleksMenuButtonCopy.Find("Image").GetComponent<SpriteRenderer>();
|
||||
dleksImage.sprite = skeldMenuButton.Find("Image").GetComponent<SpriteRenderer>().sprite;
|
||||
|
||||
dleksIconInMenuCopy.name = "Dleks";
|
||||
dleksIconInMenuCopy.transform.localPosition = new Vector3(0.8f, airhipIconInMenu.transform.localPosition.y, airhipIconInMenu.transform.localPosition.z);
|
||||
dleksIconInMenuCopy.MapId = MapNames.Dleks;
|
||||
dleksIconInMenuCopy.Button = dleksButton;
|
||||
dleksIconInMenuCopy.ButtonCheck = dleksMenuButtonCopy.Find("selectedCheck").GetComponent<SpriteRenderer>();
|
||||
dleksIconInMenuCopy.ButtonImage = dleksImage;
|
||||
dleksIconInMenuCopy.ButtonOutline = dleksImage.transform.parent.GetComponent<SpriteRenderer>();
|
||||
dleksIconInMenuCopy.Icon.sprite = skeldIconInMenu.Icon.sprite;
|
||||
|
||||
dleksMenuButtonCopy.name = "Dleks";
|
||||
dleksMenuButtonCopy.position = new Vector3(dleksMenuButtonCopy.position.x, 2f * dleksMenuButtonCopy.position.y - polusMenuButton.transform.position.y, dleksMenuButtonCopy.position.z);
|
||||
fungleMenuButton.position = new Vector3(fungleMenuButton.position.x, dleksMenuButtonCopy.transform.position.y - 0.6f, fungleMenuButton.position.z);
|
||||
|
||||
__instance.MapMenu.MapButtons = HarmonyLib.CollectionExtensions.AddItem(__instance.MapMenu.MapButtons, dleksIconInMenuCopy).ToArray();
|
||||
|
||||
float xPos = -1f;
|
||||
for (int index = 0; index < 6; ++index)
|
||||
{
|
||||
__instance.MapMenu.MapButtons[index].transform.SetLocalX(xPos);
|
||||
xPos += 0.34f;
|
||||
}
|
||||
|
||||
if (__instance.mode == SettingsMode.Host)
|
||||
{
|
||||
mapPickerMenu.transform.localPosition = new Vector3(mapPickerMenu.transform.localPosition.x, 0.85f, mapPickerMenu.transform.localPosition.z);
|
||||
|
||||
mapPickerTransform.localScale = new Vector3(0.86f, 0.85f, 1f);
|
||||
mapPickerTransform.transform.localPosition = new Vector3(mapPickerTransform.transform.localPosition.x + 0.05f, mapPickerTransform.transform.localPosition.y + 0.03f, mapPickerTransform.transform.localPosition.z);
|
||||
}
|
||||
|
||||
SwapIconOrButtomsPositions(airhipIconInMenu, dleksIconInMenuCopy);
|
||||
SwapIconOrButtomsPositions(fungleIconInMenu, airhipIconInMenu);
|
||||
|
||||
SwapIconOrButtomsPositions(airshipMenuButton, dleksMenuButtonCopy);
|
||||
|
||||
__instance.MapMenu.MapButtons[5].SetFlipped(true);
|
||||
|
||||
mapPickerMenu.transform.Find("Backdrop").localScale *= 5;
|
||||
}
|
||||
private static void SwapIconOrButtomsPositions(Component one, Component two)
|
||||
{
|
||||
Transform transform1 = one.transform;
|
||||
Transform transform2 = two.transform;
|
||||
Vector3 position1 = two.transform.position;
|
||||
Vector3 position2 = one.transform.position;
|
||||
transform1.position = position1;
|
||||
transform2.position = position2;
|
||||
}
|
||||
}
|
||||
}
|
||||
+45
-17
@@ -29,7 +29,7 @@ class NormalGameEndChecker
|
||||
public static bool Prefix()
|
||||
{
|
||||
|
||||
if (Options.NoGameEnd.GetBool() || Options.Gamemode.GetValue() == 3) return false;
|
||||
if (Options.NoGameEnd.GetBool() || Options.Gamemode.GetValue() == 2 || Utils.HandlingGameEnd) return false;
|
||||
|
||||
var allPlayers = PlayerControl.AllPlayerControls.ToArray();
|
||||
|
||||
@@ -39,24 +39,52 @@ class NormalGameEndChecker
|
||||
ImpCheckComplete = true;
|
||||
}
|
||||
|
||||
if (Utils.AliveImpostors == 0)
|
||||
{
|
||||
LastWinReason = $"★ Crewmates win!\n\nImpostors:\n" + string.Join("\n", imps.Select(p => p.Data.PlayerName));
|
||||
}
|
||||
else if (Utils.AliveImpostors >= Utils.AliveCrewmates)
|
||||
{
|
||||
LastWinReason = $"★ Impostors win!\n\nImpostors:\n★" + string.Join("\n★", imps.Select(p => p.Data.PlayerName));
|
||||
}
|
||||
else if (GameData.Instance != null && GameData.Instance.TotalTasks > 0 && GameData.Instance.CompletedTasks >= GameData.Instance.TotalTasks)
|
||||
{
|
||||
LastWinReason = $"★ Crewmates win! (Tasks)\n\nImpostors:\n" + string.Join("\n", imps.Select(p => p.Data.PlayerName));
|
||||
}
|
||||
else if (Options.Gamemode.GetValue() < 2)
|
||||
{
|
||||
LastWinReason = $"★ Impostors win! (Sabotage)\n\nImpostors:\n★" + string.Join("\n★", imps.Select(p => p.Data.PlayerName));
|
||||
}
|
||||
CheckWinnerText("");
|
||||
|
||||
return true;
|
||||
}
|
||||
public static bool canUpdateWinnerText;
|
||||
public static string customRoles { get; set; }
|
||||
public static void CheckWinnerText(string Winner)
|
||||
{
|
||||
var impostorList = string.Join(", ", imps.Select(p => p.Data.PlayerName));
|
||||
|
||||
if (!canUpdateWinnerText) return;
|
||||
|
||||
if (Winner == "SnSTimer")
|
||||
{
|
||||
LastWinReason = $"Crewmates Win! (Survived {Options.CrewAutoWinsGameAfter.GetInt()}s)\n\n Impostors: " + impostorList;
|
||||
canUpdateWinnerText = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (Winner == "NoOneWinsSpeedrun")
|
||||
{
|
||||
LastWinReason = $"No one wins. ({Options.GameAutoEndsAfter.GetInt()}s Timer)";
|
||||
canUpdateWinnerText = false;
|
||||
return;
|
||||
}
|
||||
|
||||
if (Utils.AliveImpostors == 0 || Winner == "Crewmate")
|
||||
{
|
||||
LastWinReason = "Crewmates Win!\n\nImpostors: " + impostorList;
|
||||
canUpdateWinnerText = false;
|
||||
}
|
||||
else if (Utils.AliveImpostors >= Utils.AliveCrewmates || Winner == "Impostor")
|
||||
{
|
||||
LastWinReason = "Impostors Win!\n\nImpostors: " + impostorList;
|
||||
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;
|
||||
canUpdateWinnerText = false;
|
||||
}
|
||||
else if (Options.Gamemode.GetValue() < 1 || Winner == "ImpostorSabotage")
|
||||
{
|
||||
LastWinReason = "Impostors Win! (Sabotage)\n\n Impostors: " + impostorList;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(LogicGameFlowHnS), nameof(LogicGameFlowHnS.CheckEndCriteria))]
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
using System.Reflection;
|
||||
using Il2CppInterop.Runtime.InteropTypes;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
[HarmonyPatch]
|
||||
class ExileControllerWrapUpPatch
|
||||
{
|
||||
public static MethodBase TargetMethod()
|
||||
{
|
||||
return AccessTools.Method(typeof(ExileController), nameof(ExileController.WrapUp));
|
||||
}
|
||||
|
||||
public static void Postfix(ExileController __instance)
|
||||
{
|
||||
AfterExile(__instance.initData.networkedPlayer);
|
||||
}
|
||||
|
||||
public static void AfterExile(NetworkedPlayerInfo ejectedPlayer)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
if (ejectedPlayer == null) return;
|
||||
|
||||
PlayerControl pc = null;
|
||||
PlayerControl exiledPlayer = ejectedPlayer.Object;
|
||||
foreach (var p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.PlayerId == ejectedPlayer.PlayerId)
|
||||
{
|
||||
pc = p;
|
||||
}
|
||||
|
||||
if (ejectedPlayer == PlayerControl.LocalPlayer.Data && !Main.DisableInfoWhenDead.Value)
|
||||
{
|
||||
if (p.Data.Role.IsImpostor)
|
||||
{
|
||||
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=red><size=90%>({MurderPlayerPatch.killCount[p.Data.PlayerId]}† - {Utils.StoredRoleText[p.PlayerId]})";
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!PlayerControlCompleteTaskPatch.playerTasksCompleted.ContainsKey(p.PlayerId))
|
||||
{
|
||||
PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId] = 0;
|
||||
}
|
||||
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=green><size=90%>({PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId]} - {Utils.StoredRoleText[p.PlayerId]})";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Logger.Info($" {ejectedPlayer.PlayerName} was ejected", "ExileController");
|
||||
}
|
||||
|
||||
[HarmonyPatch]
|
||||
class AirshipExileControllerPatch
|
||||
{
|
||||
public static MethodBase TargetMethod()
|
||||
{
|
||||
return Utils.GetStateMachineMoveNext<AirshipExileController>(nameof(AirshipExileController.WrapUpAndSpawn));
|
||||
}
|
||||
|
||||
public static void Postfix(AirshipExileController._WrapUpAndSpawn_d__11 __instance)
|
||||
{
|
||||
ExileControllerWrapUpPatch.AfterExile(__instance.__4__this.initData.networkedPlayer);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,11 @@
|
||||
using System;
|
||||
using Il2CppSystem.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
using Object = UnityEngine.Object;
|
||||
#if ANDROID
|
||||
using System.Collections.Generic;
|
||||
#else
|
||||
using Il2CppSystem.Collections.Generic;
|
||||
#endif
|
||||
|
||||
// https://github.com/Yumenopai/TownOfHost_Y/blob/main/Patches/GameOptionsPatch.cs
|
||||
namespace AmongUsRevamped
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
using System;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
// https://github.com/Yumenopai/TownOfHost_Y/blob/main/Patches/GameSettingMenuPatch.cs
|
||||
namespace AmongUsRevamped
|
||||
@@ -114,16 +113,13 @@ namespace AmongUsRevamped
|
||||
switch ((TabGroup)(tabNum - 3))
|
||||
{
|
||||
case TabGroup.SystemSettings:
|
||||
__instance.MenuDescriptionText.text = "Quality settings to improve comfort and testing.";
|
||||
break;
|
||||
case TabGroup.CustomRoleSettings:
|
||||
__instance.MenuDescriptionText.text = "Custom Role enabling and settings.";
|
||||
__instance.MenuDescriptionText.text = Translator.Get("systemSettingsDesc");
|
||||
break;
|
||||
case TabGroup.ModSettings:
|
||||
__instance.MenuDescriptionText.text = "Gameplay Settings to improve the in-game experience.";
|
||||
__instance.MenuDescriptionText.text = Translator.Get("gameplaySettingsDesc");
|
||||
break;
|
||||
case TabGroup.GamemodeSettings:
|
||||
__instance.MenuDescriptionText.text = "Situational settings to apply for specific gamemodes.";
|
||||
__instance.MenuDescriptionText.text = Translator.Get("gamemodeSettingsDesc");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,34 +9,35 @@ public static class GameStartManagerUpdatePatch
|
||||
{
|
||||
public static bool CustomTimerApplied;
|
||||
public static bool Autostarting;
|
||||
public static bool CountingDown;
|
||||
|
||||
public static void Prefix(GameStartManager __instance)
|
||||
{
|
||||
if (!GameStartManager.InstanceExists || AmongUsClient.Instance == null || !AmongUsClient.Instance.AmHost) return;
|
||||
if (__instance == null || MeetingHud.Instance != null) return;
|
||||
if (AmongUsClient.Instance == null || !AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
var data = GameData.Instance;
|
||||
if (__instance.StartButton == null || __instance.GameStartText == null) return;
|
||||
|
||||
__instance.MinPlayers = 1;
|
||||
|
||||
if (Main.AutoStart.Value && OnGameJoinedPatch.AutoStartCheck && GameStartManager.InstanceExists && GameStartManager.Instance.startState != GameStartManager.StartingStates.Countdown && data != null && data.PlayerCount >= Options.PlayerAutoStart.GetInt())
|
||||
if (Main.AutoStart.Value && OnGameJoinedPatch.AutoStartCheck && GameStartManager.InstanceExists && __instance.startState != GameStartManager.StartingStates.Countdown && GameData.Instance?.PlayerCount >= Options.PlayerAutoStart.GetInt())
|
||||
{
|
||||
GameStartManager.Instance.startState = GameStartManager.StartingStates.Countdown;
|
||||
GameStartManager.Instance.countDownTimer = Options.AutoStartTimer.GetFloat();
|
||||
|
||||
var sb = GameStartManager.Instance?.StartButton;
|
||||
if (sb != null)
|
||||
{
|
||||
sb.gameObject.SetActive(false);
|
||||
}
|
||||
__instance.startState = GameStartManager.StartingStates.Countdown;
|
||||
__instance.countDownTimer = Options.AutoStartTimer.GetFloat();
|
||||
__instance.StartButton.gameObject.SetActive(false);
|
||||
Autostarting = true;
|
||||
}
|
||||
|
||||
if (__instance.startState == GameStartManager.StartingStates.Countdown && !CustomTimerApplied && !Autostarting)
|
||||
if (__instance.startState == GameStartManager.StartingStates.Countdown)
|
||||
{
|
||||
__instance.countDownTimer = Options.StartCountdown.GetInt();
|
||||
CustomTimerApplied = true;
|
||||
|
||||
CountingDown = true;
|
||||
if (!CustomTimerApplied && !Autostarting)
|
||||
{
|
||||
__instance.countDownTimer = Options.StartCountdown.GetInt();
|
||||
CustomTimerApplied = true;
|
||||
}
|
||||
}
|
||||
else CountingDown = false;
|
||||
|
||||
if (__instance.startState != GameStartManager.StartingStates.Countdown)
|
||||
{
|
||||
@@ -49,7 +50,10 @@ public static class GameStartManagerUpdatePatch
|
||||
{
|
||||
string warningMessage = "";
|
||||
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
if (__instance == null || MeetingHud.Instance != null) return;
|
||||
if (AmongUsClient.Instance == null || !AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
if (__instance.StartButton == null || __instance.GameStartText == null) return;
|
||||
|
||||
if (GameStartManagerStartPatch.warningText != null)
|
||||
{
|
||||
@@ -80,40 +84,42 @@ public static class GameStartManagerUpdatePatch
|
||||
public class GameStartManagerStartPatch
|
||||
{
|
||||
public static TextMeshPro warningText;
|
||||
private static Vector3 GameStartTextlocalPosition;
|
||||
public static PassiveButton cancelButton;
|
||||
|
||||
public static void Postfix(GameStartManager __instance)
|
||||
{
|
||||
if (__instance == null || !Utils.IsLobby) return;
|
||||
|
||||
warningText = UnityEngine.Object.Instantiate(__instance.GameStartText, __instance.transform.parent);
|
||||
warningText.name = "WarningText";
|
||||
warningText.transform.localPosition = new(0f, __instance.transform.localPosition.y + 3f, -1f);
|
||||
warningText.transform.localPosition = new Vector3(0f, __instance.transform.localPosition.y + 3f, -1f);
|
||||
warningText.gameObject.SetActive(false);
|
||||
|
||||
cancelButton = UnityEngine.Object.Instantiate(__instance.StartButton, __instance.transform);
|
||||
cancelButton.name = "CancelButton";
|
||||
|
||||
var cancelLabel = cancelButton.buttonText;
|
||||
cancelLabel.DestroyTranslator();
|
||||
cancelLabel.text = "Cancel";
|
||||
//cancelButton.transform.localScale = new(0.5f, 0.5f, 1f);
|
||||
var cancelButtonInactiveRenderer = cancelButton.inactiveSprites.GetComponent<SpriteRenderer>();
|
||||
cancelButtonInactiveRenderer.color = new(0.8f, 0f, 0f, 1f);
|
||||
var cancelButtonActiveRenderer = cancelButton.activeSprites.GetComponent<SpriteRenderer>();
|
||||
cancelButtonActiveRenderer.color = Color.red;
|
||||
var cancelButtonInactiveShine = cancelButton.inactiveSprites.transform.Find("Shine");
|
||||
if (cancelButtonInactiveShine)
|
||||
{
|
||||
cancelButtonInactiveShine.gameObject.SetActive(false);
|
||||
}
|
||||
|
||||
cancelButton.activeTextColor = cancelButton.inactiveTextColor = Color.white;
|
||||
//cancelButton.transform.localPosition = new(2f, 0.13f, 0f);
|
||||
GameStartTextlocalPosition = __instance.GameStartText.transform.localPosition;
|
||||
cancelButton.gameObject.SetActive(false);
|
||||
|
||||
cancelButton.OnClick = new();
|
||||
cancelButton.OnClick.AddListener((UnityEngine.Events.UnityAction)(() =>
|
||||
{
|
||||
__instance.ResetStartState();
|
||||
}));
|
||||
cancelButton.gameObject.SetActive(false);
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(GameStartManager), nameof(GameStartManager.BeginGame))]
|
||||
public class GameStartManagerBeginGamePatch
|
||||
{
|
||||
public static void Prefix(GameStartManager __instance)
|
||||
{
|
||||
if (Options.NoGameEnd.GetBool()) Logger.SendInGame(Translator.Get("noGameEndWarning"));
|
||||
if (Main.GM.Value) Logger.SendInGame(Translator.Get("gameMasterWarningTwo"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
using AmongUs.GameOptions;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
[HarmonyPatch(typeof(HudManager), nameof(HudManager.CoShowIntro))]
|
||||
internal static class CoShowIntroPatch
|
||||
{
|
||||
public static bool IntroInitiated;
|
||||
public static void Postfix(IntroCutscene __instance)
|
||||
{
|
||||
Logger.Info(" Intro initiated", "CoShowIntro");
|
||||
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
IntroInitiated = true;
|
||||
|
||||
foreach (var p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
p.cosmetics.nameText.text = p.Data.PlayerName;
|
||||
|
||||
MurderPlayerPatch.killCount[p.PlayerId] = 0;
|
||||
MurderPlayerPatch.misfireCount[p.PlayerId] = 0;
|
||||
PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId] = 0;
|
||||
PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId] = 0;
|
||||
|
||||
Logger.Info($" {p.Data.PlayerName} -> {p.Data.RoleType}", "RoleInfo");
|
||||
}
|
||||
|
||||
if (Options.DisableAnnoyingMeetingCalls.GetBool() && !Utils.isHideNSeek)
|
||||
{
|
||||
Utils.CanCallMeetings = false;
|
||||
_ = new LateTask(() =>
|
||||
{
|
||||
Utils.CanCallMeetings = true;
|
||||
}, 33f, "MeetingEnabled");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(IntroCutscene), nameof(IntroCutscene.BeginCrewmate))]
|
||||
class BeginCrewmatePatch
|
||||
{
|
||||
public static void Postfix(IntroCutscene __instance)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
if (Main.GM.Value)
|
||||
{
|
||||
__instance.TeamTitle.text = "Game Master";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14,6 +14,8 @@ internal static class OnGameJoinedPatch
|
||||
public static bool AutoStartCheck;
|
||||
public static void Postfix()
|
||||
{
|
||||
Logger.Info(" -------- JOINED GAME --------", "OnGameJoined");
|
||||
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
WaitingForChat = false;
|
||||
@@ -49,6 +51,7 @@ internal static class OnGameJoinedPatch
|
||||
[HarmonyPatch(typeof(AmongUsClient), nameof(AmongUsClient.OnPlayerJoined))]
|
||||
class OnPlayerJoinedPatch
|
||||
{
|
||||
public static int JoinNum;
|
||||
public static bool HasInvalidFriendCode(string friendcode)
|
||||
{
|
||||
if (string.IsNullOrEmpty(friendcode))
|
||||
@@ -77,27 +80,35 @@ class OnPlayerJoinedPatch
|
||||
if (AmongUsClient.Instance.AmHost)
|
||||
{
|
||||
BanManager.CheckBanPlayer(Client);
|
||||
|
||||
Utils.IsPlayerInDenyName(Client, Client.PlayerName);
|
||||
|
||||
if (Utils.IsPlayerModerator(Client.FriendCode) && Options.ApplyModeratorList.GetBool())
|
||||
{
|
||||
Logger.Info($" {Client.PlayerName} is moderator", "ModeratorCheck");
|
||||
}
|
||||
BanManager.IsPlayerInDenyName(Client, Client.PlayerName);
|
||||
Logger.Info($" {Client.PlayerName} has access level {Utils.CheckAccessLevel(Client.FriendCode)}", "AccessCheck");
|
||||
|
||||
if (HasInvalidFriendCode(Client.FriendCode) && Options.KickInvalidFriendCodes.GetBool())
|
||||
{
|
||||
if (!Options.TempBanInvalidFriendCodes.GetBool())
|
||||
{
|
||||
AmongUsClient.Instance.KickPlayer(Client.Id, false);
|
||||
Logger.Info($" {Client.PlayerName} Was kicked for having an invalid FriendCode", "KickInvalidFriendCode");
|
||||
Logger.SendInGame($" {Client.PlayerName} Was kicked for having an invalid FriendCode");
|
||||
Logger.Info(Translator.Get("invalidFriendCodeKick", Client.PlayerName), "KickInvalidFriendCode");
|
||||
Logger.SendInGame(Translator.Get("invalidFriendCodeKick", Client.PlayerName));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!BanManager.TempBanWhiteList.Contains(Client.GetHashedPuid())) BanManager.TempBanWhiteList.Add(Client.GetHashedPuid());
|
||||
AmongUsClient.Instance.KickPlayer(Client.Id, true);
|
||||
Logger.Info($" {Client.PlayerName} Was banned for having an invalid FriendCode", "BanInvalidFriendCode");
|
||||
Logger.SendInGame($" {Client.PlayerName} Was banned for having an invalid FriendCode");
|
||||
Logger.Info(Translator.Get("invalidFriendCodeBan", Client.PlayerName), "BanInvalidFriendCode");
|
||||
Logger.SendInGame(Translator.Get("invalidFriendCodeBan", Client.PlayerName));
|
||||
}
|
||||
}
|
||||
|
||||
if (Options.EnableJoinMessages.GetBool())
|
||||
{
|
||||
JoinNum++;
|
||||
BanManager.Templates.TryGetValue("welcome", out string msg);
|
||||
|
||||
if (JoinNum >= Options.MessagePerPlayerNum.GetInt())
|
||||
{
|
||||
JoinNum = 0;
|
||||
Utils.ModeratorChatCommand(BanManager.CheckTemplate(msg), "", false);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -107,9 +118,51 @@ class OnPlayerJoinedPatch
|
||||
[HarmonyPatch(typeof(AmongUsClient), nameof(AmongUsClient.OnPlayerLeft))]
|
||||
class OnPlayerLeftPatch
|
||||
{
|
||||
static void Prefix([HarmonyArgument(0)] ClientData client)
|
||||
static void Postfix([HarmonyArgument(0)] ClientData client)
|
||||
{
|
||||
if (client?.Character == null) return;
|
||||
FixedUpdateInGamePatch.ProcessedModerators.Remove(client.Character.PlayerId);
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
Logger.Info($" {client.PlayerName} left the game", "OnPlayerLeft");
|
||||
|
||||
if (!Utils.InGame) return;
|
||||
PlayerControlCompleteTaskPatch.CalculateTaskWin();
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.SetLevel))]
|
||||
public static class SetLevelPatch
|
||||
{
|
||||
public static List<PlayerControl> HandledLevelKicks = [];
|
||||
public static void Prefix(PlayerControl __instance, uint level)
|
||||
{
|
||||
if (AmongUsClient.Instance.AmHost && level < Options.KickLowLevelPlayer.GetInt() - 1 && __instance.Data.ClientId != AmongUsClient.Instance.HostId)
|
||||
{
|
||||
if (level == 0 && Options.DontKickLevelOnes.GetBool()) return;
|
||||
if (HandledLevelKicks.Contains(__instance)) return;
|
||||
|
||||
if (!Options.TempBanLowLevelPlayer.GetBool() && Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1)
|
||||
{
|
||||
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, false);
|
||||
Logger.Info($" {__instance.Data.PlayerName} (level {level + 1}) was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}", "KickLowLevelPlayer");
|
||||
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level + 1}) was kicked for being under level {Options.KickLowLevelPlayer.GetInt()}");
|
||||
}
|
||||
else if (Utils.CheckAccessLevel(__instance.Data.FriendCode) < 1)
|
||||
{
|
||||
AmongUsClient.Instance.KickPlayer(__instance.Data.ClientId, true);
|
||||
Logger.Info($" {__instance.Data.PlayerName} (level {level + 1}) was banned for being under level {Options.KickLowLevelPlayer.GetInt()} ", "BanLowLevelPlayer");
|
||||
Logger.SendInGame($" {__instance.Data.PlayerName} (level {level + 1}) was banned for being under level {Options.KickLowLevelPlayer.GetInt()}");
|
||||
}
|
||||
HandledLevelKicks.Add(__instance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(GameStartManager), nameof(GameStartManager.Start))]
|
||||
public static class ShowLobbyTimer_GameStartManager_Start_Postfix
|
||||
{
|
||||
public static void Postfix(GameStartManager __instance)
|
||||
{
|
||||
if (__instance == null || !GameData.Instance || !AmongUsClient.Instance || AmongUsClient.Instance.NetworkMode == NetworkModes.LocalGame || !AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
HudManager.Instance.ShowLobbyTimer(600);
|
||||
}
|
||||
}
|
||||
+32
-2
@@ -1,4 +1,5 @@
|
||||
using InnerNet;
|
||||
using Il2CppSystem.Collections;
|
||||
using InnerNet;
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
@@ -22,7 +23,36 @@ internal static class LobbyBehaviourUpdatePatch
|
||||
else
|
||||
{
|
||||
if (mapThemeSound != null) return;
|
||||
SoundManager.Instance.CrossFadeSound("MapTheme", __instance.MapTheme, 0.5f);
|
||||
SoundManager.Instance.CrossFadeSound("MapTheme", __instance.MapTheme, 0.1f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(LobbyBehaviour), nameof(LobbyBehaviour.Start))]
|
||||
public class LobbyStartPatch
|
||||
{
|
||||
private static GameObject LobbyPaintObject;
|
||||
private static Sprite LobbyPaintSprite;
|
||||
|
||||
public static void Prefix()
|
||||
{
|
||||
LobbyPaintSprite = Utils.LoadSprite("AmongUsRevamped.Resources.Images.doger.png", 290f);
|
||||
}
|
||||
|
||||
public static void Postfix(LobbyBehaviour __instance)
|
||||
{
|
||||
_ = new LateTask(() =>
|
||||
{
|
||||
var LeftBox = GameObject.Find("Leftbox");
|
||||
if (LeftBox != null)
|
||||
{
|
||||
LobbyPaintObject = UnityEngine.Object.Instantiate(LeftBox, LeftBox.transform.parent);
|
||||
LobbyPaintObject.name = "Lobby Paint";
|
||||
LobbyPaintObject.transform.localPosition = new Vector3(0.042f, -2.59f, -10.5f);
|
||||
|
||||
SpriteRenderer renderer = LobbyPaintObject.GetComponent<SpriteRenderer>();
|
||||
renderer.sprite = LobbyPaintSprite;
|
||||
}
|
||||
}, 0.25f, "Co Load Dropship Decorations");
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,6 @@ using System;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
|
||||
using Object = UnityEngine.Object;
|
||||
|
||||
// https://github.com/Rabek009/MoreGamemodes/blob/master/Patches/LobbyViewSettingsPatch.cs
|
||||
namespace AmongUsRevamped
|
||||
{
|
||||
|
||||
@@ -0,0 +1,115 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
// Old patch for roles and abilities. Might use later.
|
||||
/*
|
||||
[HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.CheckForEndVoting))]
|
||||
public static class CheckForEndVotingPatch
|
||||
{
|
||||
public static bool Prefix(MeetingHud __instance)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return true;
|
||||
|
||||
if (!__instance.playerStates.All(ps => ps.AmDead || ps.DidVote)) return true;
|
||||
|
||||
var votes = __instance.CalculateVotes();
|
||||
var visualVotes = new List<MeetingHud.VoterState>();
|
||||
|
||||
foreach (var ps in __instance.playerStates)
|
||||
{
|
||||
if (ps == null) continue;
|
||||
|
||||
byte voterId = ps.TargetPlayerId;
|
||||
byte votedFor = ps.VotedFor;
|
||||
PlayerControl pc = GameData.Instance.GetPlayerById(voterId)?.Object;
|
||||
if (pc == null) continue;
|
||||
if (votedFor == byte.MaxValue) continue;
|
||||
if (!votes.ContainsKey(votedFor)) votes[votedFor] = 0;
|
||||
|
||||
visualVotes.Add(new MeetingHud.VoterState { VoterId = voterId, VotedForId = votedFor });
|
||||
|
||||
if (!PlayerControlCompleteTaskPatch.playerTasksCompleted.ContainsKey(voterId)) PlayerControlCompleteTaskPatch.playerTasksCompleted[voterId] = 0;
|
||||
if (!MurderPlayerPatch.killCount.ContainsKey(voterId)) MurderPlayerPatch.killCount[voterId] = 0;
|
||||
|
||||
int extraVotes = 0;
|
||||
int extraVotesCrewmate = Options.ExtraVotesCrewmate.GetInt();
|
||||
int extraVotesImpostor = Options.ExtraVotesImpostor.GetInt();
|
||||
int extraVotesPerTask = (int)(Options.ExtraVotesPerTask.GetFloat()*PlayerControlCompleteTaskPatch.playerTasksCompleted[voterId]+0.1f);
|
||||
int extraVotesPerKill = (int)(Options.ExtraVotesPerKill.GetFloat()*MurderPlayerPatch.killCount[voterId]+0.1f);
|
||||
|
||||
if (!votes.TryGetValue(votedFor, out int currentVotes)) currentVotes = 0;
|
||||
|
||||
for (int i = 0; i < extraVotes; i++)
|
||||
{
|
||||
visualVotes.Add(new MeetingHud.VoterState { VoterId = voterId, VotedForId = votedFor });
|
||||
votes[votedFor]++;
|
||||
}
|
||||
}
|
||||
|
||||
var max = votes.MaxPair(out var tie);
|
||||
var exiled = GameData.Instance.AllPlayers.ToArray().FirstOrDefault(p => !tie && p.PlayerId == max.Key);
|
||||
var statesArray = visualVotes.ToArray();
|
||||
|
||||
__instance.RpcVotingComplete(statesArray, exiled, tie);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
[HarmonyPatch(typeof(MeetingHud), nameof(MeetingHud.Start))]
|
||||
class MeetingHudStartPatch
|
||||
{
|
||||
public static void Postfix(MeetingHud __instance)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
foreach (var playerState in __instance.playerStates)
|
||||
{
|
||||
PlayerControl player = null;
|
||||
foreach (var pc in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (pc.PlayerId == playerState.TargetPlayerId)
|
||||
{
|
||||
player = pc;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (player == null || !PlayerControl.LocalPlayer.Data.IsDead || Main.DisableInfoWhenDead.Value) continue;
|
||||
|
||||
var textTemplate = playerState.NameText;
|
||||
var taskText = GetProgressText(player);
|
||||
|
||||
var taskTextMeeting = UnityEngine.Object.Instantiate(textTemplate);
|
||||
taskTextMeeting.transform.SetParent(textTemplate.transform);
|
||||
taskTextMeeting.transform.localPosition = new Vector3(0f, 0.18f, 0f);
|
||||
taskTextMeeting.fontSize = 1.6f;
|
||||
taskTextMeeting.text = taskText;
|
||||
taskTextMeeting.gameObject.name = "TaskTextMeeting";
|
||||
taskTextMeeting.enableWordWrapping = false;
|
||||
taskTextMeeting.enabled = player.AmOwner || player.PlayerId == playerState.TargetPlayerId;
|
||||
}
|
||||
}
|
||||
|
||||
public static string GetProgressText(PlayerControl player)
|
||||
{
|
||||
int totalTasks = 0;
|
||||
int tasksCompleted = 0;
|
||||
|
||||
if (player.Data.Tasks != null && !player.Data.Role.IsImpostor)
|
||||
{
|
||||
foreach (var task in player.Data.Tasks)
|
||||
{
|
||||
totalTasks++;
|
||||
if (task.Complete) tasksCompleted++;
|
||||
}
|
||||
return $"<color=green>({tasksCompleted}/{totalTasks})</color> - {Utils.GetRoleText(player)}";
|
||||
}
|
||||
else
|
||||
{
|
||||
return $"<color=red>({MurderPlayerPatch.killCount[player.Data.PlayerId]}†)</color> - {Utils.GetRoleText(player)}";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,25 +1,55 @@
|
||||
using AmongUs.GameOptions;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
// https://github.com/astra1dev/AUnlocker/blob/main/src/OptionsPatches.cs
|
||||
|
||||
[HarmonyPatch(typeof(NumberOption), nameof(NumberOption.Increase))]
|
||||
public static class NumberOption_Increase
|
||||
{
|
||||
public static bool Prefix(NumberOption __instance)
|
||||
{
|
||||
if (ModGameOptionsMenu.TabIndex >= 3) return true;
|
||||
#if ANDROID
|
||||
float increment = __instance.Increment;
|
||||
#else
|
||||
float increment = Hotkeys.IncrementMultiplier * __instance.Increment;
|
||||
#endif
|
||||
|
||||
if (Utils.isHideNSeek || !Utils.isHideNSeek && __instance.Title != StringNames.GameNumImpostors && __instance.Title != StringNames.GamePlayerSpeed)
|
||||
if (Utils.IsLobby)
|
||||
{
|
||||
__instance.Value += __instance.Increment;
|
||||
__instance.UpdateValue();
|
||||
__instance.OnValueChanged.Invoke(__instance);
|
||||
__instance.AdjustButtonsActiveState();
|
||||
return false;
|
||||
if (__instance.Title == StringNames.GameKillCooldown)
|
||||
{
|
||||
if (__instance.Value == 0.01f)
|
||||
{
|
||||
__instance.Value = 0.5f;
|
||||
__instance.UpdateValue();
|
||||
__instance.OnValueChanged.Invoke(__instance);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (__instance.Value <= __instance.ValidRange.min)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (__instance.Value + increment > __instance.ValidRange.max)
|
||||
{
|
||||
__instance.Value = __instance.ValidRange.max;
|
||||
__instance.UpdateValue();
|
||||
__instance.OnValueChanged.Invoke(__instance);
|
||||
return false;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
__instance.Value += increment;
|
||||
__instance.UpdateValue();
|
||||
__instance.OnValueChanged.Invoke(__instance);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else return true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,17 +58,36 @@ public static class NumberOption_Decrease
|
||||
{
|
||||
public static bool Prefix(NumberOption __instance)
|
||||
{
|
||||
if (ModGameOptionsMenu.TabIndex >= 3) return true;
|
||||
#if ANDROID
|
||||
float increment = __instance.Increment;
|
||||
#else
|
||||
float increment = Hotkeys.IncrementMultiplier * __instance.Increment;
|
||||
#endif
|
||||
|
||||
if (Utils.isHideNSeek || !Utils.isHideNSeek && __instance.Title != StringNames.GameNumImpostors && __instance.Title != StringNames.GamePlayerSpeed)
|
||||
if (Utils.IsLobby)
|
||||
{
|
||||
__instance.Value -= __instance.Increment;
|
||||
__instance.UpdateValue();
|
||||
__instance.OnValueChanged.Invoke(__instance);
|
||||
__instance.AdjustButtonsActiveState();
|
||||
return false;
|
||||
if (__instance.Value >= __instance.ValidRange.max)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (__instance.Value - increment < __instance.ValidRange.min)
|
||||
{
|
||||
__instance.Value = __instance.ValidRange.min;
|
||||
__instance.UpdateValue();
|
||||
__instance.OnValueChanged.Invoke(__instance);
|
||||
return false;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
__instance.Value -= increment;
|
||||
__instance.UpdateValue();
|
||||
__instance.OnValueChanged.Invoke(__instance);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else return true;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -49,9 +98,37 @@ public static class NumberOption_Initialize
|
||||
{
|
||||
if (ModGameOptionsMenu.TabIndex >= 3) return;
|
||||
|
||||
if (Utils.isHideNSeek || !Utils.isHideNSeek && __instance.Title != StringNames.GameNumImpostors && __instance.Title != StringNames.GamePlayerSpeed)
|
||||
if (Utils.isHideNSeek || Utils.IsLobby && !Utils.isHideNSeek && __instance.Title != StringNames.GameNumImpostors && __instance.Title != StringNames.GamePlayerSpeed)
|
||||
{
|
||||
__instance.ValidRange = new FloatRange(-900f, 900f);
|
||||
__instance.ValidRange = new FloatRange(0f, 900f);
|
||||
}
|
||||
|
||||
switch (__instance.Title)
|
||||
{
|
||||
case StringNames.GameVotingTime:
|
||||
case StringNames.GameDiscussTime:
|
||||
case StringNames.EscapeTime:
|
||||
case StringNames.FinalEscapeTime:
|
||||
__instance.Increment = 5f;
|
||||
break;
|
||||
|
||||
case StringNames.GameKillCooldown:
|
||||
__instance.Increment = 0.5f;
|
||||
__instance.ValidRange = new FloatRange(0.01f, 900f);
|
||||
break;
|
||||
|
||||
case StringNames.GamePlayerSpeed:
|
||||
case StringNames.SeekerFinalSpeed:
|
||||
case StringNames.GameCrewLight:
|
||||
case StringNames.GameImpostorLight:
|
||||
case StringNames.CrewmateFlashlightSize:
|
||||
case StringNames.ImpostorFlashlightSize:
|
||||
__instance.Increment = 0.05f;
|
||||
break;
|
||||
|
||||
default:
|
||||
__instance.Increment = 1f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+116
-60
@@ -1,95 +1,151 @@
|
||||
using System;
|
||||
using AmongUs.GameOptions;
|
||||
using System;
|
||||
using InnerNet;
|
||||
using UnityEngine;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
[HarmonyPatch(typeof(AmongUsClient), nameof(AmongUsClient.CoStartGame))]
|
||||
internal class ApplyCustomImpostorCount
|
||||
internal class CoStartGamePatch
|
||||
{
|
||||
public static void Postfix(AmongUsClient __instance)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
Logger.Info(" -------- GAME STARTED --------", "StartGame");
|
||||
Logger.Info($" Gamemode: {Options.Gamemode.GetString()}", "StartGame");
|
||||
Logger.Info($" Players: {PlayerControl.AllPlayerControls.Count}", "StartGame");
|
||||
Logger.Info($" Map: {(MapNames)GameOptionsManager.Instance.CurrentGameOptions.MapId}", "StartGame");
|
||||
|
||||
if (Main.GM.Value)
|
||||
{
|
||||
Logger.Info($" Game Master Enabled", "StartGame");
|
||||
}
|
||||
|
||||
NormalGameEndChecker.imps.Clear();
|
||||
NormalGameEndChecker.LastWinReason = "";
|
||||
|
||||
if (Main.GM.Value)
|
||||
{
|
||||
if (Options.Gamemode.GetValue() == 3)
|
||||
{
|
||||
PlayerControl.LocalPlayer.CoSetRole(AmongUs.GameOptions.RoleTypes.CrewmateGhost, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
PlayerControl.LocalPlayer.RpcSetRole(AmongUs.GameOptions.RoleTypes.CrewmateGhost, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PlayerControl.LocalPlayer.myTasks.Clear();
|
||||
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.RpcSetRole))]
|
||||
class PlayerControlSetRolePatch
|
||||
{
|
||||
public static bool FirstAssign;
|
||||
private 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();
|
||||
|
||||
public static bool Prefix(PlayerControl __instance, ref RoleTypes roleType, ref bool canOverrideRole)
|
||||
{
|
||||
if (!FirstAssign || !AmongUsClient.Instance.AmHost) return true;
|
||||
|
||||
if (!ProcessedPlayers.Add(__instance.PlayerId)) return true;
|
||||
|
||||
canOverrideRole = false;
|
||||
|
||||
if (Main.GM.Value && __instance.PlayerId == PlayerControl.LocalPlayer.PlayerId)
|
||||
{
|
||||
roleType = RoleTypes.Crewmate;
|
||||
OnGameStartPatch.ScheduleExile = true;
|
||||
}
|
||||
|
||||
if (Options.Gamemode.GetValue() == 3 && !Utils.isHideNSeek)
|
||||
{
|
||||
foreach (var p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p != PlayerControl.LocalPlayer)
|
||||
{
|
||||
p.RpcSetRole(AmongUs.GameOptions.RoleTypes.Crewmate, false);
|
||||
}
|
||||
if (p == PlayerControl.LocalPlayer)
|
||||
{
|
||||
p.CoSetRole(AmongUs.GameOptions.RoleTypes.Crewmate, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (Utils.isHideNSeek)
|
||||
if (Utils.isHideNSeek && Seekers.Count() == 0 && Options.NumSeekers.GetInt() > 0)
|
||||
{
|
||||
int seekersCount = Options.NumSeekers.GetInt();
|
||||
|
||||
int toAdd = Math.Max(0, seekersCount - 1);
|
||||
if (manualSeekers.Count > seekersCount) seekersCount = manualSeekers.Count;
|
||||
|
||||
var candidates = new List<PlayerControl>();
|
||||
foreach (var p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.Data.Role.TeamType != RoleTeamTypes.Impostor && !p.Data.IsDead)
|
||||
candidates.Add(p);
|
||||
if (!Main.GM.Value || p != PlayerControl.LocalPlayer) candidates.Add(p);
|
||||
}
|
||||
|
||||
toAdd = Math.Min(toAdd, candidates.Count);
|
||||
|
||||
System.Random rand = new System.Random();
|
||||
for (int i = candidates.Count - 1; i > 0; i--)
|
||||
if (manualSeekers.Count == 0)
|
||||
{
|
||||
int j = rand.Next(i + 1);
|
||||
(candidates[i], candidates[j]) = (candidates[j], candidates[i]);
|
||||
seekersCount = Math.Min(seekersCount, candidates.Count);
|
||||
}
|
||||
|
||||
// 1st RpcSetRole forces the role on that user. 2nd is needed to allow them to kill.
|
||||
for (int i = 0; i < toAdd; i++)
|
||||
else
|
||||
{
|
||||
var player = candidates[i];
|
||||
|
||||
player.RpcSetRole(AmongUs.GameOptions.RoleTypes.Impostor, false);
|
||||
|
||||
foreach (var p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.Data.Role.TeamType == RoleTeamTypes.Impostor)
|
||||
{
|
||||
new LateTask(() =>
|
||||
{
|
||||
p.RpcSetRole(AmongUs.GameOptions.RoleTypes.Impostor, false);
|
||||
}, 5f, "HNS Secondary RPCSetRole");
|
||||
|
||||
new LateTask(() =>
|
||||
{
|
||||
p.RpcSetRole(AmongUs.GameOptions.RoleTypes.Impostor, false);
|
||||
}, 9f, "HNS Tertiary RPCSetRole");
|
||||
}
|
||||
}
|
||||
seekersCount = Math.Min(seekersCount, candidates.Count + manualSeekers.Count);
|
||||
}
|
||||
|
||||
foreach (byte id in manualSeekers)
|
||||
{
|
||||
if (Seekers.Count >= seekersCount) break;
|
||||
Seekers.Add(id);
|
||||
}
|
||||
|
||||
candidates.RemoveAll(p => manualSeekers.Contains(p.PlayerId));
|
||||
|
||||
for (int j = candidates.Count - 1; j > 0; j--)
|
||||
{
|
||||
int k = rand.Next(j + 1);
|
||||
(candidates[j], candidates[k]) = (candidates[k], candidates[j]);
|
||||
}
|
||||
|
||||
foreach (var p in candidates)
|
||||
{
|
||||
if (Seekers.Count >= seekersCount) break;
|
||||
|
||||
Seekers.Add(p.PlayerId);
|
||||
}
|
||||
}
|
||||
|
||||
if (Utils.isHideNSeek && Options.NumSeekers.GetInt() > 0)
|
||||
{
|
||||
if (Seekers.Contains(__instance.PlayerId)) roleType = RoleTypes.Impostor;
|
||||
else roleType = RoleTypes.Engineer;
|
||||
}
|
||||
|
||||
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek)
|
||||
{
|
||||
if (Options.EngineerMode.GetBool()) roleType = RoleTypes.Engineer;
|
||||
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");
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(HudManager), nameof(HudManager.OnGameStart))]
|
||||
internal static class OnGameStartPatch
|
||||
{
|
||||
public static bool ScheduleExile;
|
||||
public static void Postfix()
|
||||
{
|
||||
if (AmongUsClient.Instance.AmHost && Options.Gamemode.GetValue() == 1 && Options.SNSChatInGame.GetBool())
|
||||
{
|
||||
PlayerControl.LocalPlayer.CmdReportDeadBody(null);
|
||||
if (MeetingHud.Instance != null) MeetingHud.Instance.RpcClose();
|
||||
}
|
||||
|
||||
if (ScheduleExile)
|
||||
{
|
||||
Logger.Info($" Game Master Successful", "StartGame");
|
||||
PlayerControl.LocalPlayer.RpcSetRole(RoleTypes.CrewmateGhost);
|
||||
ScheduleExile = false;
|
||||
}
|
||||
|
||||
foreach (var p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
Utils.StoredRoleText[p.PlayerId] = Utils.GetRoleText(p);
|
||||
}
|
||||
}
|
||||
}
|
||||
+131
-11
@@ -3,7 +3,9 @@ using AmongUs.GameOptions;
|
||||
using Hazel;
|
||||
using InnerNet;
|
||||
using System;
|
||||
using TMPro;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
@@ -12,13 +14,31 @@ class ReportDeadBodyPatch
|
||||
{
|
||||
public static bool Prefix(PlayerControl __instance, [HarmonyArgument(0)] NetworkedPlayerInfo target)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return true;
|
||||
if (!AmongUsClient.Instance.AmHost || __instance == null) return true;
|
||||
if (Utils.isHideNSeek) return false;
|
||||
|
||||
if (Options.DisableReport.GetBool() && target != null || Options.Gamemode.GetValue() == 2 || Options.Gamemode.GetValue() == 3)
|
||||
if (Options.DisableAnnoyingMeetingCalls.GetBool() && !Utils.CanCallMeetings && target == null && Options.Gamemode.GetValue() < 1)
|
||||
{
|
||||
Logger.Info($" Stopped {__instance.Data.PlayerName} reporting the body of {target.PlayerName}", "ReportDeadBodyPatch");
|
||||
Logger.Info($" {__instance.Data.PlayerName} is calling a meeting too fast, attempt blocked", "ReportDeadBodyPatch");
|
||||
return false;
|
||||
}
|
||||
|
||||
// target == null means meeting
|
||||
|
||||
if (Options.Gamemode.GetValue() == 1 || Options.Gamemode.GetValue() == 2)
|
||||
{
|
||||
if (target != null)
|
||||
{
|
||||
Logger.Info($" Stopped {__instance.Data.PlayerName} reporting the body of {target.PlayerName}", "ReportDeadBodyPatch");
|
||||
return false;
|
||||
}
|
||||
if (__instance != PlayerControl.LocalPlayer)
|
||||
{
|
||||
Logger.Info($" Stopped {__instance.Data.PlayerName} trying to call a meeting", "ReportDeadBodyPatch");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else return true;
|
||||
}
|
||||
}
|
||||
@@ -27,19 +47,46 @@ class ReportDeadBodyPatch
|
||||
internal static class MurderPlayerPatch
|
||||
{
|
||||
public static readonly Dictionary<byte, int> misfireCount = new();
|
||||
public static readonly Dictionary<byte, int> killCount = new();
|
||||
|
||||
public static void Postfix(PlayerControl __instance, [HarmonyArgument(0)] PlayerControl target, [HarmonyArgument(1)] MurderResultFlags resultFlags, ref bool __state)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
if (!AmongUsClient.Instance.AmHost || !resultFlags.HasFlag(MurderResultFlags.Succeeded)) return;
|
||||
|
||||
byte playerId = __instance.Data.PlayerId;
|
||||
|
||||
if (!killCount.ContainsKey(playerId))
|
||||
{
|
||||
killCount[playerId] = 0;
|
||||
}
|
||||
|
||||
if (!__instance.isNew)
|
||||
{
|
||||
killCount[playerId]++;
|
||||
Logger.Info($" {__instance.Data.PlayerName} killed {target.Data.PlayerName}", "MurderPlayer");
|
||||
|
||||
if ((target == PlayerControl.LocalPlayer || PlayerControl.LocalPlayer.Data.IsDead) && !Main.DisableInfoWhenDead.Value)
|
||||
{
|
||||
foreach (var p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
if (p.Data.Role.IsImpostor)
|
||||
{
|
||||
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=red><size=90%>({killCount[p.Data.PlayerId]}†)</color> - {Utils.StoredRoleText[p.PlayerId]}";
|
||||
}
|
||||
else
|
||||
{
|
||||
p.cosmetics.nameText.text = $"{p.Data.PlayerName}<color=green><size=90%>({PlayerControlCompleteTaskPatch.playerTasksCompleted[p.PlayerId]}/{PlayerControlCompleteTaskPatch.tasksPerPlayer[p.PlayerId]})</color> - {Utils.StoredRoleText[p.PlayerId]}";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//2 = Shift and Seek
|
||||
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek)
|
||||
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek)
|
||||
{
|
||||
if (!resultFlags.HasFlag(MurderResultFlags.Succeeded))
|
||||
return;
|
||||
|
||||
byte playerId = __instance.Data.PlayerId;
|
||||
|
||||
if (target.Data.PlayerId == __instance.shapeshiftTargetPlayerId)
|
||||
{
|
||||
Logger.Info($" {__instance.Data.PlayerName} correctly killed {target.Data.PlayerName} ", "SNSKillManager");
|
||||
@@ -61,15 +108,15 @@ internal static class MurderPlayerPatch
|
||||
new LateTask(() =>
|
||||
{
|
||||
__instance.isNew = false;
|
||||
if (!__instance.Data.IsDead) {__instance.RpcSetRole(RoleTypes.Shapeshifter, false);}
|
||||
if (!__instance.Data.IsDead && __instance != null) {__instance.RpcSetRole(RoleTypes.Shapeshifter, false);}
|
||||
}, Options.CantKillTime.GetInt(), "SNSResetRole");
|
||||
}
|
||||
|
||||
if (misfireCount[__instance.Data.PlayerId] >= Options.MisfiresToSuicide.GetFloat())
|
||||
{
|
||||
__instance.RpcSetRole(RoleTypes.ImpostorGhost);
|
||||
Logger.Info($" {__instance.Data.PlayerName} misfired {misfireCount[playerId]} times and suicided", "SNSKillManager");
|
||||
Logger.SendInGame($" {__instance.Data.PlayerName} misfired {misfireCount[playerId]} times and suicided");
|
||||
Logger.Info($" {__instance.Data.PlayerName} misfired {misfireCount[playerId]} time(s) and suicided", "SNSKillManager");
|
||||
Logger.SendInGame($" {__instance.Data.PlayerName} misfired {misfireCount[playerId]} time(s) and suicided");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -86,7 +133,7 @@ internal static class CheckShapeshiftPatch
|
||||
if (!AmongUsClient.Instance.AmHost) return true;
|
||||
|
||||
// Canceling a Shapeshift freezes the player until they successfully Shapeshift again. Unavoidable game logic.
|
||||
if (Options.Gamemode.GetValue() == 2 && !Utils.isHideNSeek && __instance.isNew)
|
||||
if (Options.Gamemode.GetValue() == 1 && !Utils.isHideNSeek && __instance.isNew)
|
||||
{
|
||||
Logger.Info($" {__instance.Data.PlayerName} shapeshifted during misfire cooldown, making the game temporarily freeze them.", "SNSShapeshiftManager");
|
||||
Logger.SendInGame($" {__instance.Data.PlayerName} shapeshifted during misfire cooldown, making the game temporarily freeze them.");
|
||||
@@ -95,3 +142,76 @@ internal static class CheckShapeshiftPatch
|
||||
else return true;
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.CompleteTask))]
|
||||
class PlayerControlCompleteTaskPatch
|
||||
{
|
||||
public static Dictionary<byte, int> playerTasksCompleted = new Dictionary<byte, int>();
|
||||
public static Dictionary<byte, int> tasksPerPlayer = new Dictionary<byte, int>();
|
||||
public static List<string> ignoredRoles = new List<string> {"Jester"};
|
||||
public static int ignoredTasks;
|
||||
public static int ignoredCompletedTasks;
|
||||
public static bool tasksInitiated;
|
||||
|
||||
public static void Postfix(PlayerControl __instance, uint idx)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
foreach (var p in PlayerControl.AllPlayerControls)
|
||||
{
|
||||
|
||||
if (!playerTasksCompleted.ContainsKey(p.PlayerId))
|
||||
{
|
||||
playerTasksCompleted[p.PlayerId] = 0;
|
||||
}
|
||||
tasksPerPlayer[p.PlayerId] = p.Data.Tasks.Count;
|
||||
}
|
||||
|
||||
playerTasksCompleted[__instance.PlayerId]++;
|
||||
|
||||
Logger.Info($" {__instance.Data.PlayerName} completed {idx}", "TaskPatch");
|
||||
|
||||
if (Options.Gamemode.GetValue() != 2) CalculateTaskWin();
|
||||
|
||||
if (Options.Gamemode.GetValue() == 2)
|
||||
{
|
||||
if (!__instance.Data.IsDead && playerTasksCompleted[__instance.PlayerId] >= __instance.Data.Tasks.Count)
|
||||
{
|
||||
Utils.CustomWinnerEndGame(__instance, 1);
|
||||
NormalGameEndChecker.LastWinReason = $"{__instance.Data.PlayerName} wins! (Completed tasks)";
|
||||
NormalGameEndChecker.canUpdateWinnerText = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (PlayerControl.LocalPlayer.Data.IsDead && !Main.DisableInfoWhenDead.Value)
|
||||
{
|
||||
TMP_Text nameText = __instance.cosmetics.nameText;
|
||||
nameText.text = $"{__instance.Data.PlayerName}<color=green><size=90%>({playerTasksCompleted[__instance.PlayerId]}/{tasksPerPlayer[__instance.PlayerId]})</color> - {Utils.StoredRoleText[__instance.PlayerId]}";
|
||||
}
|
||||
}
|
||||
|
||||
public static void CalculateTaskWin()
|
||||
{
|
||||
if (!Utils.GamePastRoleSelection || Utils.isHideNSeek || Options.NoGameEnd.GetBool() || !CoShowIntroPatch.IntroInitiated) return;
|
||||
|
||||
//Logger.Info($" Checking if {GameData.Instance.CompletedTasks} - {ignoredCompletedTasks} >= ({GameData.Instance.TotalTasks} - {ignoredTasks}) * 0.01 * {Options.TaskPercentNeededToWin.GetInt()}", "TaskPatch");
|
||||
|
||||
if ((GameData.Instance.CompletedTasks - ignoredCompletedTasks) >= (GameData.Instance.TotalTasks - ignoredTasks)*0.01*Options.TaskPercentNeededToWin.GetInt())
|
||||
{
|
||||
Utils.ContinueEndGame((byte)GameOverReason.CrewmatesByVote);
|
||||
NormalGameEndChecker.CheckWinnerText("CrewmateTasks");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(PlayerControl), nameof(PlayerControl.CheckSporeTrigger))]
|
||||
public static class PlayerControlCheckSporeTriggerPatch
|
||||
{
|
||||
public static bool Prefix(PlayerControl __instance, [HarmonyArgument(0)] Mushroom mushroom)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return true;
|
||||
|
||||
if (Options.DisableSporeTrigger.GetBool()) return false;
|
||||
else return true;
|
||||
}
|
||||
}
|
||||
@@ -9,8 +9,6 @@ public static class SabotageSystemTypeRepairDamagePatch
|
||||
{
|
||||
private static bool Prefix([HarmonyArgument(0)] PlayerControl player, [HarmonyArgument(1)] MessageReader msgReader)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return true;
|
||||
|
||||
byte amount;
|
||||
{
|
||||
var newReader = MessageReader.Get(msgReader);
|
||||
@@ -18,12 +16,40 @@ public static class SabotageSystemTypeRepairDamagePatch
|
||||
newReader.Recycle();
|
||||
}
|
||||
var Sabo = (SystemTypes)amount;
|
||||
|
||||
Logger.Info($" {player.Data.PlayerName} is trying to sabotage: {Sabo}", "SabotageCheck");
|
||||
if (Options.DisableSabotage.GetBool() || Options.Gamemode.GetValue() == 2)
|
||||
|
||||
if (Options.Gamemode.GetValue() == 0)
|
||||
{
|
||||
Logger.Info($" Sabotage {Sabo} by: {player.Data.PlayerName} was blocked", "SabotageCheck");
|
||||
return false;
|
||||
if (Sabo == SystemTypes.LifeSupp && Options.DisableOxygen.GetBool() ||
|
||||
Sabo == SystemTypes.Reactor && Options.DisableReactor.GetBool() ||
|
||||
Sabo == SystemTypes.Electrical && Options.DisableLights.GetBool() ||
|
||||
Sabo == SystemTypes.Comms && Options.DisableComms.GetBool() ||
|
||||
Sabo == SystemTypes.HeliSabotage && Options.DisableHeli.GetBool() ||
|
||||
Sabo == SystemTypes.MushroomMixupSabotage && Options.DisableMushroomMixup.GetBool() ||
|
||||
Sabo == SystemTypes.Laboratory && Options.DisableReactor.GetBool() && msgReader != null ||
|
||||
player.Data.IsDead && !Options.DeadImpostorsCanSabotage.GetBool())
|
||||
{
|
||||
Logger.Info($" Sabotage {Sabo} by: {player.Data.PlayerName} was blocked", "SabotageCheck");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
if (Options.Gamemode.GetValue() == 1)
|
||||
{
|
||||
if (Sabo == SystemTypes.LifeSupp && Options.SNSDisableOxygen.GetBool() ||
|
||||
Sabo == SystemTypes.Reactor && Options.SNSDisableReactor.GetBool() ||
|
||||
Sabo == SystemTypes.Electrical && Options.SNSDisableLights.GetBool() ||
|
||||
Sabo == SystemTypes.Comms && Options.SNSDisableComms.GetBool() ||
|
||||
Sabo == SystemTypes.HeliSabotage && Options.SNSDisableHeli.GetBool() ||
|
||||
Sabo == SystemTypes.MushroomMixupSabotage && Options.SNSDisableMushroomMixup.GetBool() ||
|
||||
Sabo == SystemTypes.Laboratory && Options.DisableReactor.GetBool() && msgReader != null ||
|
||||
player.Data.IsDead && !Options.DeadImpostorsCanSabotage.GetBool())
|
||||
{
|
||||
Logger.Info($" Sabotage {Sabo} by: {player.Data.PlayerName} was blocked", "SnSSabotageCheck");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
else return true;
|
||||
}
|
||||
@@ -38,7 +64,7 @@ class ShipStatusCloseDoorsPatch
|
||||
|
||||
Logger.Info($" Trying to close the door in: {room}", "DoorCheck");
|
||||
|
||||
if (Options.DisableCloseDoor.GetBool() || Options.Gamemode.GetValue() == 2)
|
||||
if ((Options.DisableCloseDoor.GetBool() && Options.Gamemode.GetValue() == 0) || (Options.Gamemode.GetValue() == 1 && Options.SNSDisableCloseDoor.GetBool()))
|
||||
{
|
||||
Logger.Info($" Door sabotage in: {room} was blocked", "DoorCheck");
|
||||
return false;
|
||||
@@ -60,6 +86,8 @@ public static class MessageReaderUpdateSystemPatch
|
||||
or SystemTypes.Decontamination3
|
||||
or SystemTypes.MedBay) return true;
|
||||
|
||||
if (player.Data.ClientId == AmongUsClient.Instance.HostId) return true;
|
||||
|
||||
var amount = MessageReader.Get(reader).ReadByte();
|
||||
if (EACR.RpcUpdateSystemCheck(player, systemType, amount))
|
||||
{
|
||||
|
||||
+13
-11
@@ -136,7 +136,7 @@ internal static class RpcSetTasksPatch
|
||||
|
||||
if (!Options.AllPlayersSameTasks.GetBool())
|
||||
{
|
||||
RerollTasks(ref taskTypeIds);
|
||||
RerollTasks(pc, ref taskTypeIds);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -155,11 +155,11 @@ internal static class RpcSetTasksPatch
|
||||
|
||||
|
||||
}
|
||||
|
||||
private static void RerollTasks(ref Il2CppStructArray<byte> taskTypeIds)
|
||||
private static void RerollTasks(PlayerControl pc, ref Il2CppStructArray<byte> taskTypeIds)
|
||||
{
|
||||
// Default number of tasks
|
||||
bool hasCommonTasks = true;
|
||||
int numCommonTasks = Main.NormalOptions.NumCommonTasks;
|
||||
int numLongTasks = Main.NormalOptions.NumLongTasks;
|
||||
int numShortTasks = Main.NormalOptions.NumShortTasks;
|
||||
|
||||
@@ -167,11 +167,8 @@ internal static class RpcSetTasksPatch
|
||||
|
||||
switch (hasCommonTasks)
|
||||
{
|
||||
case false when numLongTasks == 0 && numShortTasks == 0:
|
||||
numShortTasks = 1;
|
||||
break;
|
||||
case true when numLongTasks == Main.NormalOptions.NumLongTasks && numShortTasks == Main.NormalOptions.NumShortTasks:
|
||||
return;
|
||||
case false when numLongTasks == 0 && numShortTasks == 0: numShortTasks = 1; break;
|
||||
case true when numLongTasks == Main.NormalOptions.NumLongTasks && numShortTasks == Main.NormalOptions.NumShortTasks: return;
|
||||
}
|
||||
|
||||
Il2CppSystem.Collections.Generic.List<byte> TasksList = new();
|
||||
@@ -180,24 +177,28 @@ internal static class RpcSetTasksPatch
|
||||
|
||||
Il2CppSystem.Collections.Generic.HashSet<TaskTypes> UsedTaskTypes = new();
|
||||
|
||||
var start0 = 0;
|
||||
var start1 = 0;
|
||||
var start2 = 0;
|
||||
|
||||
// Long tasks
|
||||
Il2CppSystem.Collections.Generic.List<NormalPlayerTask> CommonTasks = new();
|
||||
foreach (var task in ShipStatus.Instance.CommonTasks) CommonTasks.Add(task);
|
||||
Shuffle(CommonTasks);
|
||||
|
||||
ShipStatus.Instance.AddTasksFromList(ref start0, numCommonTasks, TasksList, UsedTaskTypes, CommonTasks);
|
||||
|
||||
Il2CppSystem.Collections.Generic.List<NormalPlayerTask> LongTasks = new();
|
||||
foreach (var task in ShipStatus.Instance.LongTasks) LongTasks.Add(task);
|
||||
Shuffle(LongTasks);
|
||||
|
||||
ShipStatus.Instance.AddTasksFromList(ref start1, numLongTasks, TasksList, UsedTaskTypes, LongTasks);
|
||||
|
||||
// Short tasks
|
||||
Il2CppSystem.Collections.Generic.List<NormalPlayerTask> ShortTasks = new();
|
||||
foreach (var task in ShipStatus.Instance.ShortTasks) ShortTasks.Add(task);
|
||||
Shuffle(ShortTasks);
|
||||
|
||||
ShipStatus.Instance.AddTasksFromList(ref start2, numShortTasks, TasksList, UsedTaskTypes, ShortTasks);
|
||||
|
||||
// Apply result
|
||||
taskTypeIds = new Il2CppStructArray<byte>(TasksList.Count);
|
||||
for (int i = 0; i < TasksList.Count; i++) taskTypeIds[i] = TasksList[i];
|
||||
}
|
||||
@@ -212,4 +213,5 @@ internal static class RpcSetTasksPatch
|
||||
list[r] = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
namespace AmongUsRevamped;
|
||||
|
||||
//Old Patch for Mayor
|
||||
|
||||
/*
|
||||
[HarmonyPatch(typeof(Vent), nameof(Vent.EnterVent))]
|
||||
class EnterVentPatch
|
||||
{
|
||||
public static void Postfix(Vent __instance, [HarmonyArgument(0)] PlayerControl pc)
|
||||
{
|
||||
if (!AmongUsClient.Instance.AmHost) return;
|
||||
|
||||
if (CustomRoleManagement.PlayerRoles.TryGetValue(pc.PlayerId, out var role) && role == "Mayor")
|
||||
{
|
||||
pc.CmdReportDeadBody(null);
|
||||
Logger.Info($" The Mayor, {pc.Data.PlayerName}, called a meeting by venting", "EnterVent");
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
@@ -17,11 +17,9 @@ internal static class AddVotePatch
|
||||
|
||||
if (AmongUsClient.Instance.ClientId == srcClient)
|
||||
{
|
||||
AmongUsClient.Instance.KickPlayer(target.Data.ClientId, false);
|
||||
|
||||
Logger.Info($" Kicked {target.Data.PlayerName}, {target.Data.FriendCode}", "KickPatch");
|
||||
}
|
||||
return false;
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
@@ -48,6 +46,16 @@ internal static class BanMenuSetVisiblePatch
|
||||
__instance.KickButton.gameObject.SetActive(true);
|
||||
__instance.MenuButton.gameObject.SetActive(show);
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(InnerNetClient), nameof(InnerNetClient.CanBan))]
|
||||
internal class InnerNetClientCanBanPatch
|
||||
{
|
||||
public static bool Prefix(InnerNetClient __instance, ref bool __result)
|
||||
{
|
||||
__result = __instance.AmHost;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
# Welcome to AmongUsRevamped!
|
||||
# Welcome to Among Us Revamped!
|
||||
<br>
|
||||
|
||||
</p>
|
||||
@@ -29,54 +29,105 @@
|
||||
<img src="https://github.com/astra1dev/AUnlocker/assets/90265231/14226f03-a003-4efc-b27b-6df53fb394d6" width=410 height=240>****
|
||||
|
||||
|
||||
# 🎮 Features (v1.2.1):
|
||||
- <b>🔶 Client Side settings:</b>
|
||||
- Game Master
|
||||
- Unlock FPS
|
||||
# 🎮 Features (v1.9.0):
|
||||
|
||||
## <b>♠️ Client Side settings:</b>
|
||||
- Game Master (Spectator)
|
||||
- Show FPS
|
||||
- Dark Theme
|
||||
- Toggle Lobby Music
|
||||
- <b>🔷 Technical settings:</b>
|
||||
- Show/Hide Info When Dead
|
||||
## <b>⚙️ Technical settings:</b>
|
||||
- Kick/Ban players under a certain level
|
||||
- Kick/Ban invalid FriendCodes
|
||||
- Kick/Ban command using names
|
||||
- Ckick/Cban command using colors
|
||||
- DenyName system
|
||||
- Moderator system
|
||||
- Kick/Ban players who say "start"
|
||||
- Denyword system
|
||||
- Banlist system
|
||||
- Denyname system
|
||||
- Multi layer moderator system
|
||||
- To add Admins, Moderators and VIP's, type the user's Friendcode in the designated files located in AUR-DATA
|
||||
- Enable No Game End
|
||||
- <b>🔶 Automation settings:</b>
|
||||
- Auto start game and conditions for it
|
||||
- Auto rejoin lobby
|
||||
- Auto send winner info
|
||||
- <b>🔷 Gameplay Settings:</b>
|
||||
- Disable critical sabotages
|
||||
- Custom starting countdown
|
||||
## <b>♻️ Automation settings:</b>
|
||||
- Automatically start game
|
||||
- Automatically rejoin lobby
|
||||
- Automatically send winner info
|
||||
- Enable (configurable) Welcome Messages
|
||||
- The Welcome Template is in Templates.txt
|
||||
## <b>🔧 Gameplay Settings:</b>
|
||||
- Dead impostors can sabotage
|
||||
- Disable critical sabotages (invividual)
|
||||
- Disable door sabotages
|
||||
- Disable body reporting
|
||||
- Enable/Disable any desired tasks
|
||||
- Disable meeting calls first 30s
|
||||
- Disable devices (per map, individual)
|
||||
- Override decontamination time (per map)
|
||||
- Disable spore triggers on The Fungle
|
||||
- % Tasks completed for Crewmates to win
|
||||
- Enable/Disable any task
|
||||
- All players have same tasks
|
||||
- Hide and Seek: Custom Impostor count
|
||||
- <b>🔶 Custom Gamemodes:</b>
|
||||
- 0 Kill Cooldown
|
||||
- Hide and Seek: Custom Seeker count
|
||||
## <b>🏆 Custom Gamemodes:</b>
|
||||
- 0 Kill Cooldown -> Set Kill Cooldown to 0.01
|
||||
- Shift and Seek
|
||||
- Speedrun
|
||||
- <b>🔷 Extra features:</b>
|
||||
- Shift + L + Enter - Force End Game
|
||||
- Shift + M + Enter - Force Call/Close Meeting
|
||||
- /help command
|
||||
- Specific gamemode info commands -> /0kc, /sns, /sp
|
||||
- Current gamemode info command -> /r
|
||||
## <b>❓ Other Improvements:</b>
|
||||
- Among Us Revamped supports other languages
|
||||
- Select a language in Language/YourLanguage.txt
|
||||
- Preset system for mod settings
|
||||
- Command Helper
|
||||
- Creatable and customizable Templates
|
||||
- Eht Dleks (Reverse Skeld) Map
|
||||
- Ability to cancel starting countdown
|
||||
- Improved main menu
|
||||
- Faster startup time
|
||||
- Custom anticheat system
|
||||
- Zoom out in lobby or when dead
|
||||
- Unlimited default Option ranges
|
||||
- Logging for useful information
|
||||
- <b>🎉 And this all without Modded Protocol!</b>
|
||||
|
||||
- See player kill/task count and Role when dead
|
||||
- Higher and more accurate Option ranges
|
||||
- Always visible lobby timer
|
||||
- Access experimental animation test scene
|
||||
- Manually set multiple Seekers in HnS
|
||||
- <b>🎉 And this all works in public lobbies!</b>
|
||||
|
||||
### Hotkeys
|
||||
| HotKey | Function | Usable Scene |
|
||||
| ------------------- | ------------------------------------------- | ---------------------------------- |
|
||||
| `Shift`+`L`+`Enter` | Force End Game | In Game |
|
||||
| `Shift`+`M`+`Enter` | Skip meeting when active | In Game |
|
||||
| `C` | Cancel game start | In Starting Countdown |
|
||||
| `Shift` | Start the game immediately | In Starting Countdown |
|
||||
| `Shift` | 5x Option increment | In Options Menu |
|
||||
| `Ctrl` | Noclip in lobby | In Lobby |
|
||||
| `Ctrl` | 10x Option increment | In Options Menu |
|
||||
|
||||
### Chat Commands
|
||||
| Command | Function |
|
||||
| ------------------------------------------- | ------------------------------------------------- |
|
||||
| /help | Show command help |
|
||||
| /l<br>/lastgame | Send last game info |
|
||||
| /r | Send current gamemode/roles description |
|
||||
| /r {ability} | Send specific Ability info |
|
||||
| /0kc<br>/sns</br>/sp | Send respective gamemode description |
|
||||
| /ban {name} | Ban a player by name |
|
||||
| /kick {name} | Kick a player by name |
|
||||
| /cban {color} | Ban a player by color |
|
||||
| /ckick {color} | Kick a player by color |
|
||||
| /dump | Copy your LogOutput file |
|
||||
| /eg<br>/endgame | Instantly end an ongoing game |
|
||||
| /em<br>/endmeeting | Instantly end an ongoing meeting |
|
||||
| /aur<br>/socials | Send AUR socials (GitHub, Discord) |
|
||||
| /col<br>/color | Set color. Can be used to bypass color limit |
|
||||
| /reload | Reset the *Language*.JSON file to default |
|
||||
| /s<br>/start | Start game countdown |
|
||||
| /vip<br>/moderator<br>/admin | Add a user to respective list by name |
|
||||
| /t {template} | Send a Template from Templates.txt |
|
||||
|
||||
|
||||
**Credit to these mods and their developers for their code:**
|
||||
### :star: [AUnlocker](https://github.com/astra1dev/AUnlocker)
|
||||
> - NumberOptionsPatch
|
||||
> - Original NumberOptionsPatch
|
||||
> - Always Show Lobby Timer
|
||||
### :star: [EHR (Formerly TOHE+)](https://github.com/Gurge44/EndlessHostRoles)
|
||||
> - Dark Theme
|
||||
> - Task Patching
|
||||
### :star: [TOH](https://github.com/tukasa0001/TownOfHost) :
|
||||
> - Ban Manager
|
||||
@@ -86,10 +137,10 @@
|
||||
### :star: [TOHY](https://github.com/Yumenopai/TownOfHost_Y) :
|
||||
> - Zoom
|
||||
### :star: [MoreGamemodes](https://github.com/Rabek009/MoreGamemodes)
|
||||
> - Chat Patches
|
||||
> - Some Chat Patches
|
||||
> - OptionItem System
|
||||
---
|
||||
This project is licensed under the GNU General Public License version 3.0. For more details, please refer to the [LICENSE](https://github.com/0xDrLime/TownofHost-Enhanced/blob/main/LICENSE) file.
|
||||
This project is licensed under the GNU General Public License version 3.0. For more details, please refer to the [LICENSE](https://github.com/apemv/AmongUsRevamped/blob/main/LICENSE) file.
|
||||
---
|
||||
|
||||
<b>This mod is not affiliated with Among Us or Innersloth LLC, and the content contained therein is not endorsed or otherwise sponsored by Innersloth LLC. Portions of the materials contained herein are property of Innersloth LLC. © Innersloth LLC.</b>
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 24 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 55 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 13 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 80 KiB |
@@ -0,0 +1,295 @@
|
||||
{
|
||||
"LanguageID": "0",
|
||||
|
||||
"gameMaster": "Game Master",
|
||||
"showFPS": "Show FPS",
|
||||
"autoStart": "Auto Start",
|
||||
"enableDarkTheme": "Enable Dark Theme",
|
||||
"enableLobbyMusic": "Lobby Music",
|
||||
"disableInfoWhenDead": "Hide Info When Dead",
|
||||
"disableCommandHelper": "Disable Command Helper",
|
||||
"disableCompatibilityWarning": "Disable Compatibility Warning",
|
||||
|
||||
"gameMasterWarning":"You will now spectate games until Game Master is turned off. WARNING: Role assigning might be inaccurate if this setting is enabled.",
|
||||
|
||||
"cancelStartCountdown": "Start countdown canceled",
|
||||
|
||||
"invalidFriendCodeKick": "{0} was kicked for having an invalid Friendcode",
|
||||
"invalidFriendCodeBan": "{0} was banned for having an invalid Friendcode",
|
||||
"language": "Language (Requires Restart)",
|
||||
"gamemode": "Gamemode",
|
||||
"tabGroupMain": "Moderation",
|
||||
"kickLowLevelPlayer": "Kick Players Under Level",
|
||||
"tempBanLowLevelPlayer": "Ban Instead Of Kick",
|
||||
"dontKickLevelOnes": "Don't Kick Lv.1 Players For Glitched Lobbies",
|
||||
"kickInvalidFriendCodes": "Kick Invalid (Empty) Friendcodes",
|
||||
"tempBanInvalidFriendCodes": "Ban Instead Of Kick",
|
||||
"deniedWordsToKick": "Sent Denied Words To Kick Player",
|
||||
"moderatorCanUseCommand": "Moderators can use commands",
|
||||
"autoKickStart": "Kick Players Who Say Start",
|
||||
"autoKickStartAsBan": "Ban Instead Of Kick",
|
||||
"autoKickStartTimes": "Start messages needed to kick",
|
||||
"autoKickStartStrength": "Strict detection mode",
|
||||
"tabGroupAutomation": "Automation",
|
||||
"autoSendGameInfo": "Automatically send winner info",
|
||||
"autoRejoinLobby": "Auto Rejoin Lobby",
|
||||
"autoStartTimer": "Countdown For Auto Start",
|
||||
"waitAutoStart": "Auto Start After",
|
||||
"playerAutoStart": "Players Needed To Auto Start",
|
||||
"enableJoinMessages": "Enable Welcome Messages",
|
||||
"messagePerPlayerNum": "Message Per Amount Of Joins",
|
||||
"tabGroupMisc": "Miscelleneous",
|
||||
"startCountdown": "Default Starting Countdown",
|
||||
"colorCommandLevel": "Who Can use Color Commands",
|
||||
"allowFortegreen": "Allow Fortegreen Color",
|
||||
"noGameEnd": "No Game End",
|
||||
|
||||
"tabGroupAccess": "Access Levels",
|
||||
"slashColorCmd": "Who Can Use /color",
|
||||
"slashRolesAndGamemodeCmd": "Who Can Use /r & Templates",
|
||||
"slashLastGameCmd": "Who Can Use /l & /aur",
|
||||
"slashKickCmd": "Who Can Use /kick & /ckick",
|
||||
"slashBanCmd": "Who Can Use /ban & /cban",
|
||||
"slashEndMeetingCmd": "Who Can Use /endmeeting & /seeker",
|
||||
"slashStartAndEndGameCmd": "Who Can Use /startgame & /endgame",
|
||||
|
||||
"tabGroupCrewmate": "Crewmate Roles",
|
||||
"tabGroupNeutral": "Neutral Roles",
|
||||
"tabGroupImpostor": "Impostor Roles",
|
||||
|
||||
"tabGroupStandard": "Standard",
|
||||
|
||||
"tabGroupHNS": "Hide and Seek",
|
||||
"numSeekers": "# Seekers",
|
||||
"tabGroup0Kcd": "0 Kill Cooldown",
|
||||
"noKcdSettingsOverride": "Auto Update Settings",
|
||||
"tabGroupSNS": "Shift and Seek",
|
||||
"snsChatInGame": "Chat during gameplay (experimental)",
|
||||
"snsSettingsOverride": "Auto Update Settings",
|
||||
"cantKillTime": "After Misfiring, Can't kill for",
|
||||
"misfiresToSuicide": "Suicide After Amount Of Misfires",
|
||||
"crewAutoWinsGameAfter": "Crewmates Automatically Win After",
|
||||
"snsDisableSabotage": "Disable SnS Critical Sabotages",
|
||||
"snsDisableReactor": "Disable Reactor Sabotage",
|
||||
"snsDisableOxygen": "Disable O2 Sabotage",
|
||||
"snsDisableLights": "Disable Lights Sabotage",
|
||||
"snsDisableComms": "Disable Communications Sabotage",
|
||||
"snsDisableHeli": "Disable Crash Course Sabotage",
|
||||
"snsDisableMushroomMixup": "Disable Mushroom Mixup Sabotage",
|
||||
"snsDisableCloseDoor": "Disable SnS Door Sabotages",
|
||||
"tabGroupSpeedrun": "Speedrun",
|
||||
"speedrunSettingsOverride": "Auto Update Settings",
|
||||
"gameAutoEndsAfter": "Game automatically ends after",
|
||||
"engineerMode": "Everyone Is Engineer",
|
||||
|
||||
"tabGroupSabotages": "Sabotages",
|
||||
"deadImpostorsCanSabotage": "Dead Impostors Can Sabotage",
|
||||
"disableSabotage": "Disable Critical Sabotages",
|
||||
"disableReactor": "Disable Reactor Sabotage",
|
||||
"disableOxygen": "Disable O2 Sabotage",
|
||||
"disableLights": "Disable Lights Sabotage",
|
||||
"disableComms": "Disable Communications Sabotage",
|
||||
"disableHeli": "Disable Crash Course Sabotage",
|
||||
"disableMushroomMixup": "Disable Mushroom Mixup Sabotage",
|
||||
"disableCloseDoor": "Disable Door Sabotages",
|
||||
|
||||
"tabGroupGameplayGeneral": "General",
|
||||
"disableAnnoyingMeetingCalls": "Disable Meeting Calls First 30s",
|
||||
"disableReport": "Disable Body Reports",
|
||||
"changeDecontaminationTime": "Override Decontamination Time (Standard Only)",
|
||||
"decontaminationTimeOnMiraHQ": "Mira HQ Decon Duration",
|
||||
"decontaminationDoorOpenTimeOnMiraHQ": "Mira HQ Door Open Duration",
|
||||
"decontaminationTimeOnPolus": "Polus Decon Duration",
|
||||
"decontaminationDoorOpenTimeOnPolus": "Polus Door Open Duration",
|
||||
"disableSporeTrigger": "Disable Spores On The Fungle",
|
||||
|
||||
"disableDevices": "Disable Devices",
|
||||
"disableSkeldDevices": "Disable Skeld Devices",
|
||||
"disableSkeldAdmin": "Disable Skeld Admin",
|
||||
"disableSkeldCamera": "Disable Skeld Camera",
|
||||
"disableMiraHQDevices": "Disable Mira HQ Devices",
|
||||
"disableMiraHQAdmin": "Disable Mira HQ Admin",
|
||||
"disableMiraHQDoorLog": "Disable Mira HQ DoorLogs",
|
||||
"disablePolusDevices": "Disable Polus Devices",
|
||||
"disablePolusAdmin": "Disable Polus Admin",
|
||||
"disablePolusCamera": "Disable Polus Camera",
|
||||
"disablePolusVital": "Disable Polus Vitals",
|
||||
"disableAirshipDevices": "Disable Airship Devices",
|
||||
"disableAirshipCockpitAdmin": "Disable Airship Cockpit Admin",
|
||||
"disableAirshipRecordsAdmin": "Disable Airship Records Admin",
|
||||
"disableAirshipCamera": "Disable Airship Camera",
|
||||
"disableAirshipVital": "Disable Airship Vitals",
|
||||
"disableFungleDevices": "Disable Fungle Devices",
|
||||
"disableFungleVital": "Disable Fungle Vitals",
|
||||
|
||||
"tabGroupTasks": "Tasks",
|
||||
"allPlayersSameTasks": "Everyone has same tasks",
|
||||
"overrideTaskSettings": "Disable Tasks",
|
||||
"taskPercentNeededToWin": "% Tasks completed for crewmates to win",
|
||||
|
||||
"disableMiraTasks": "Disable Mira HQ Tasks",
|
||||
"disableBuyBeverage": "Disable Buy Beverage",
|
||||
"disableMeasureWeather": "Disable Measure Weather",
|
||||
"disableProcessData": "Disable Process Data",
|
||||
"disableRunDiagnostics": "Disable Run Diagnostics",
|
||||
"disableSortSamples": "Disable Sort Samples",
|
||||
|
||||
"disablePolusTasks": "Disable Polus Tasks",
|
||||
"disableActivateWeatherNodes": "Disable Activate Weather Nodes",
|
||||
"disableAlignTelescope": "Disable Align Telescope",
|
||||
"disableFillCanisters": "Disable Fill Canisters",
|
||||
"disableInsertKeys": "Disable Insert Keys",
|
||||
"disableOpenWaterways": "Disable Open Waterways",
|
||||
"disableRebootWifi": "Disable Reboot Wifi",
|
||||
"disableRepairDrill": "Disable Repair Drill",
|
||||
"disableScanBoardingPass": "Disable Scan Boarding Pass",
|
||||
|
||||
"disableAirshipTasks": "Disable Airship Tasks",
|
||||
"disableCleanToilet": "Disable Clean Toilet",
|
||||
"disableDecontaminate": "Disable Decontaminate",
|
||||
"disableDevelopPhotos": "Disable Develop Photos",
|
||||
"disableDressMannequin": "Disable Dress Mannequin",
|
||||
"disableFixShower": "Disable Fix Shower",
|
||||
"disableMakeBurger": "Disable Make Burger",
|
||||
"disablePickUpTowels": "Disable Pick Up Towels",
|
||||
"disablePolishRuby": "Disable Polish Ruby",
|
||||
"disablePutAwayPistols": "Disable Put Away Pistols",
|
||||
"disablePutAwayRifles": "Disable Put Away Rifles",
|
||||
"disableRewindTapes": "Disable Rewind Tapes",
|
||||
"disableResetBreaker": "Disable Reset Breakers",
|
||||
"disableSortRecords": "Disable Sort Records",
|
||||
"disableStartFans": "Disable Start Fans",
|
||||
"disableUnlockSafe": "Disable Unlock Safe",
|
||||
|
||||
"disableFungleTasks": "Disable Fungle Tasks",
|
||||
"disableBuildSandcastle": "Disable Build Sandcastle",
|
||||
"disableCatchFish": "Disable Catch Fish",
|
||||
"disableCollectSamples": "Disable Collect Samples",
|
||||
"disableCollectShells": "Disable Collect Shells",
|
||||
"disableCollectVegetables": "Disable Collect Vegetables",
|
||||
"disableCrankGenerator": "Disable Crank Generator",
|
||||
"disableExtractFuel": "Disable Extract Fuel",
|
||||
"disableFixAntenna": "Disable Fix Antenna",
|
||||
"disableHelpCritter": "Disable Help Critter",
|
||||
"disableHoistSupplies": "Disable Hoist Supplies",
|
||||
"disableLiftWeights": "Disable Lift Weights",
|
||||
"disableMineOres": "Disable Mine Ores",
|
||||
"disablePlayVideoGame": "Disable Play Video Game",
|
||||
"disablePolishGem": "Disable Polish Gem",
|
||||
"disableReplaceParts": "Disable Replace Parts",
|
||||
"disableRoastMarshmallow": "Disable Roast Marshmallow",
|
||||
"disableThrowFisbee": "Disable Throw Fisbee",
|
||||
"disableFindSignal": "Disable Find Signal",
|
||||
|
||||
"disableMiscCommonTasks": "Disable Global Common Tasks",
|
||||
"disableEnterIdCode": "Disable Enter Id Code",
|
||||
"disableFixWiring": "Disable Fix Wiring",
|
||||
"disableSwipeCard": "Disable Swipe Card",
|
||||
|
||||
"disableMiscShortTasks": "Disable Global Short Tasks",
|
||||
"disableAssembleArtifact": "Disable Assemble Artifact",
|
||||
"disableChartCourse": "Disable Chart Course",
|
||||
"disableCleanO2Filter": "Disable Clean O2 Filter",
|
||||
"disableCleanVent": "Disable Clean Vent",
|
||||
"disableMonitorMushroom": "Disable Monitor Mushroom",
|
||||
"disableMonitorTree": "Disable Monitor Tree",
|
||||
"disablePrimeShields": "Disable Prime Shields",
|
||||
"disableRecordTemperature": "Disable Record Temperature",
|
||||
"disableStabilizeSteering": "Disable Stabilize Steering",
|
||||
"disableStoreArtifacts": "Disable Store Artifacts",
|
||||
"disableUnlockManifolds": "Disable Unlock Manifolds",
|
||||
|
||||
"disableMiscLongTasks": "Disable Global Long Tasks",
|
||||
"disableAlignEngineOutput": "Disable Align Engine Output",
|
||||
"disableClearAsteroids": "Disable Clear Asteroids",
|
||||
"disableEmptyChute": "Disable Empty Chute",
|
||||
"disableInspectSample": "Disable Inspect Sample",
|
||||
"disableReplaceWaterJug": "Disable Replace Water Jug",
|
||||
"disableStartReactor": "Disable Start Reactor",
|
||||
"disableWaterPlants": "Disable Water Plants",
|
||||
|
||||
"disableMiscMixedTasks": "Disable Global Mixed Tasks",
|
||||
"disableCalibrateDistributor": "Disable Calibrate Distributor",
|
||||
"disableDivertPower": "Disable Divert Power",
|
||||
"disableEmptyGarbage": "Disable Empty Garbage",
|
||||
"disableFuelEngines": "Disable Fuel Engines",
|
||||
"disableSubmitScan": "Disable Submit Scan",
|
||||
"disableUploadData": "Disable Upload Data",
|
||||
|
||||
"allCommandsFull": "<b>ALL COMMANDS:</b>\n\n<b>/help</b>\nShow this message.\n<b>/aur, /socials</b>\nSend Among Us Revamped social links.\n\n<b>/r, /gm</b>\nSend current mode description.\n<b>/l, /lastgame</b>\nSend last winner info.\n\n<b>/0kc, /0killcooldown</b>\nSend 0 Kill Cooldown mode description.\n<b>/sns, /shiftandseek</b>\nSend Shift and Seek mode description.\n<b>/sp, /speedrun</b>\nSend Speedrun mode description.\n\n/<b>kick, /ban</b>\nKick or ban a player by name.\n<b>/ckick, /cban</b>\nKick or ban a player by color.\n\n<b>/vip /moderator /admin</b>\nAdd a player as VIP, Moderator, or Admin.\n<b>/removevip, /removemoderator, /removeadmin</b>\nRemove VIP, Moderator, or Admin from a player.\n\n<b>/eg, /endgame</b>\nEnd the current game.\n<b>/em, /endmeeting</b>\nEnd the current meeting.\n<b>/s, /start</b>\nBegin the game starting countdown.\n\n<b>/t {template}</b>\nSend a template from AUR-DATA/templates.txt.\n\n<b>/col, /color, /colour</b>\nSet your color, can be used to bypass limits.",
|
||||
|
||||
"translationReloaded": "Your file has successfully been reset.\nTo apply all changes, restart your game.",
|
||||
|
||||
"templateWelcome": "# In this file you can add Templates, which serve as easy copy-paste alternatives.\n# To create a template, write a new line with the same formatting as the test Template below.\n# Note that Templates can't be longer than 120 characters and can't contain special characters. Having so will kick you.\n\ntest: this is an example template. Type '/t test' to see it.\n\nwelcome: Welcome! This lobby uses Among Us Revamped {ModVersion} by MV. Enjoy!",
|
||||
"moderatorWelcome": "# In this file you can add Moderators by Friendcode.\n# If you add someone, they will gain a purple name in-game.\n# Go to 'System Settings' in-game to customize Moderator permissions. Below is a Friendcode example.\n\nfriendcode#0000",
|
||||
"vipWelcome": "# In this file you can add VIP's by Friendcode.\n# If you add someone, they will gain a yellow name in-game.\n# Go to 'System Settings' in-game to customize VIP permissions. Below is a Friendcode example.\n\nfriendcode#0000\n",
|
||||
"adminWelcome": "# In this file you can add Admins by Friendcode.\n# If you add someone, they will gain a red name in-game.\n# Go to 'System Settings' in-game to customize Admin permissions. Below is a Friendcode example.\n\nfriendcode#0000\n",
|
||||
"banlistWelcome": "# In this file you can ban players from your lobby by Friendcode.\n# Banning someone in-game will automatically add them here as well. Below is a Friendcode example.\n\nfriendcode#0000\n",
|
||||
"banwordWelcome": "# In this file you can set denied words, automatically kicking anyone in-game who sends words listed here.\n# Make sure to separate words by using new lines.",
|
||||
"bannameWelcome": "# In this file you can set denied names, automatically kicking anyone in-game who uses names listed here.\n# Make sure to separate names by using new lines.",
|
||||
"startWordsWelcome": "# In this file you can set the detected words for 'Kick Players Who Say Start'.\n# 'Strict Detection Mode' OFF = Messages have to exactly match words. 'Strict Detection Mode' ON = Messages only have to contain words.\n# You can put unrelated words in as well in order to detect them only in lobby.\n\nstart\nbegin\ncommence",
|
||||
|
||||
"noGameEndWarning": "WARNING: No Game End is enabled",
|
||||
"gameMasterWarningTwo": "WARNING: Game Master is enabled",
|
||||
|
||||
"tooLongTemplate": "Your Template is longer than 120 characters and would kick you upon sending. Please reduce the length.",
|
||||
|
||||
"vipAdd": "Successfully added {0} as VIP.",
|
||||
"moderatorAdd": "Successfully added {0} as Moderator.",
|
||||
"adminAdd": "Successfully added {0} as Admin.",
|
||||
"vipRemove": "Successfully removed VIP from {0}.",
|
||||
"moderatorRemove": "Successfully removed Moderator from {0}.",
|
||||
"adminRemove": "Successfully removed Admin from {0}.",
|
||||
"permFail": "Could not find user '{0}'. Did you write it correctly?",
|
||||
|
||||
"helpDesc": "Show all commands and what they do.",
|
||||
"snsDesc": "Send Shift and Seek gamemode Description.",
|
||||
"0kcDesc": "Send 0 Kill Cooldown gamemode Description.",
|
||||
"SrDesc": "Send Speedrun gamemode Description.",
|
||||
"egDesc": "End the current game.",
|
||||
"emDesc": "End the current meeting.",
|
||||
"aurDesc": "Send Among Us Revamped social links.",
|
||||
"sDesc": "Start the game countdown.",
|
||||
"rDesc": "Sends current gamemode description.",
|
||||
"rolesDesc": "Send all abilities/gamemode overview.",
|
||||
"kickDesc": "Kick a player by name.",
|
||||
"ckickDesc": "Kick a player by color.",
|
||||
"banDesc": "Ban a player by name.",
|
||||
"cbanDesc": "Ban a player by color.",
|
||||
"dumpDesc": "Copy LogOutput into a seperate file.",
|
||||
"colDesc": "Set your color.",
|
||||
"reloadDesc": "Reload language file.",
|
||||
"vipDesc": "Add user as VIP.",
|
||||
"moderatorDesc": "Add user as Moderator.",
|
||||
"adminDesc": "Add user as admin.",
|
||||
"cremoveVipDesc": "Remove VIP from user.",
|
||||
"removeModeratorDesc": "Remove Moderator from user.",
|
||||
"removeAdminDesc": "Remove Admin from user.",
|
||||
"lastgameDesc": "Send last game info.",
|
||||
"templateDesc": "Send a specified template from AUR-DATA/templates.txt.",
|
||||
"seekerDesc": "Adds player as Seeker in HnS.",
|
||||
"seekersDesc": "Shows all manually selected Seekers.",
|
||||
"clearSeekerDesc": "Clears the manual Seeker list.",
|
||||
|
||||
"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)",
|
||||
|
||||
"pluginWarning": "<color=red><size=5><b>WARNING:</color></b></size>\n<size=3><b>You have 2 or more detected Plugins.</size></b>\nAmong Us Revamped is not compatible with most mods.\nIf you find bugs, they are most likely due to incompatibility.",
|
||||
|
||||
"systemSettings": "System Settings",
|
||||
"gameplaySettings": "Gameplay Settings",
|
||||
"gamemodeSettings": "Gamemode Settings",
|
||||
|
||||
"systemSettingsDesc": "Quality settings to improve comfort and testing.",
|
||||
"gameplaySettingsDesc": "Gameplay settings to improve the in-game experience.",
|
||||
"gamemodeSettingsDesc": "Situational settings to apply for specific gamemodes.",
|
||||
|
||||
"everyone": "Everyone",
|
||||
"vipAndAbove": "<color=yellow>VIP</color> And Above",
|
||||
"moderatorAndAbove": "<color=purple>Moderator</color> And Above",
|
||||
"admin": "<color=red>Admin</color>",
|
||||
"onlyYou": "Only You",
|
||||
|
||||
"seekers": "Seekers: ",
|
||||
"clearedSeekers": "Successfully cleared the manual Seeker list."
|
||||
}
|
||||
@@ -0,0 +1,286 @@
|
||||
{
|
||||
"LanguageID": "1",
|
||||
|
||||
"gameMaster": "Spettatore",
|
||||
"showFPS": "Mostra FPS",
|
||||
"autoStart": "Auto Start",
|
||||
"enableDarkTheme": "Abilità Tema Scuro",
|
||||
"enableLobbyMusic": "Musica Lobby",
|
||||
"disableInfoWhenDead": "Nascondi Info da Morto",
|
||||
"disableCommandHelper": "Disabilita Command Helper",
|
||||
"disableCompatibilityWarning": "Disattiva avviso di compatibilità",
|
||||
|
||||
"gameMasterWarning":"Assisterai alle partite come spettatore finché la modalità Spettatore non viene disattivata.AVVISO:I messaggi delle abilità non verranno inviati e l'assegnazione dei ruoli potrebbe non essere accurata se questa impostazione è attiva.",
|
||||
|
||||
"cancelStartCountdown": "Conto alla rovescia di inizio annullato",
|
||||
|
||||
"invalidFriendCodeKick": "{0} è stato espulso per avere un codice amico non valido",
|
||||
"invalidFriendCodeBan": "{0} è stato bannato per avere un codice amico non valido",
|
||||
"language": "Lingua (Richiede il riavvio)",
|
||||
"gamemode": "Modalità di gioco",
|
||||
"tabGroupMain": "Moderazione",
|
||||
"kickLowLevelPlayer": "Espelli giocatori sotto il livello",
|
||||
"tempBanLowLevelPlayer": "Banna invece di espellere",
|
||||
"dontKickLevelOnes": "Non espellere i giocatori di livello 1 per lobby glitched",
|
||||
"kickInvalidFriendCodes": "Espelli codici amico non validi (vuoti)",
|
||||
"tempBanInvalidFriendCodes": "Banna invece di espellere",
|
||||
"deniedWordsToKick": "Inviate parole proibite per espellere il giocatore",
|
||||
"moderatorCanUseCommand": "I moderatori possono usare i comandi",
|
||||
"autoKickStart": "Espelli i giocatori che dicono Start",
|
||||
"autoKickStartAsBan": "Banna invece di espellere",
|
||||
"autoKickStartTimes": "Messaggi di Start necessari per l'espulsione",
|
||||
"autoKickStartStrength": "Modalità di rilevamento rigorosa",
|
||||
"tabGroupAutomation": "Automazione",
|
||||
"autoSendGameInfo": "Invia automaticamente le informazioni sul vincitore",
|
||||
"autoRejoinLobby": "Rientra automaticamente nella lobby",
|
||||
"autoStartTimer": "Conto alla rovescia per l'Auto Start",
|
||||
"waitAutoStart": "Auto Start dopo",
|
||||
"playerAutoStart": "Giocatori necessari per l'Auto Start",
|
||||
"enableJoinMessages": "Abilita i messaggi di benvenuto",
|
||||
"messagePerPlayerNum": "Messaggio in base al numero di accessi",
|
||||
"tabGroupMisc": "Varie",
|
||||
"startCountdown": "Conto alla rovescia di inizio predefinito",
|
||||
"colorCommandLevel": "Chi può usare i comandi colore",
|
||||
"allowFortegreen": "Consenti il colore Verde Forte",
|
||||
"noGameEnd": "Nessuna fine del gioco",
|
||||
|
||||
"tabGroupAccess": "Livelli di accesso",
|
||||
"slashColorCmd": "Chi può usare /color",
|
||||
"slashRolesAndGamemodeCmd": "Chi può usare /r e i template",
|
||||
"slashLastGameCmd": "Chi può usare /l e /aur",
|
||||
"slashKickCmd": "Chi può usare /kick e /ckick",
|
||||
"slashBanCmd": "Chi può usare /ban e /cban",
|
||||
"slashEndMeetingCmd": "Chi può usare /endmeeting",
|
||||
"slashStartAndEndGameCmd": "Chi può usare /startgame e /endgame",
|
||||
|
||||
"tabGroupCrewmate": "Ruoli degli astronauti",
|
||||
"tabGroupNeutral": "Ruoli dei neutrali",
|
||||
"tabGroupImpostor": "Ruoli degli impostori",
|
||||
|
||||
"tabGroupStandard": "Standard",
|
||||
|
||||
"tabGroupHNS": "Nascondino",
|
||||
"numSeekers": "# Cercatori",
|
||||
"tabGroup0Kcd": "Ricarica uccisione a 0",
|
||||
"noKcdSettingsOverride": "Aggiorna automaticamente le impostazioni",
|
||||
"tabGroupSNS": "Mutaforma e cerca",
|
||||
"snsChatInGame": "Chat durante il gioco (sperimentale)",
|
||||
"snsSettingsOverride": "Aggiorna automaticamente le impostazioni",
|
||||
"cantKillTime": "Dopo un errore, non può uccidere per",
|
||||
"misfiresToSuicide": "Suicidio dopo un numero di errori",
|
||||
"crewAutoWinsGameAfter": "Gli astronauti vincono automaticamente dopo",
|
||||
"snsDisableSabotage": "Disabilita i sabotaggi critici SnS",
|
||||
"snsDisableReactor": "Disabilita il sabotaggio del reattore",
|
||||
"snsDisableOxygen": "Disabilita il sabotaggio dell'ossigeno",
|
||||
"snsDisableLights": "Disabilita il sabotaggio delle luci",
|
||||
"snsDisableComms": "Disabilita il sabotaggio delle comunicazioni",
|
||||
"snsDisableHeli": "Disabilita il sabotaggio della rotta di collisione",
|
||||
"snsDisableMushroomMixup": "Disabilita il sabotaggio della miscela di funghi",
|
||||
"snsDisableCloseDoor": "Disabilita i sabotaggi delle porte SnS",
|
||||
"tabGroupSpeedrun": "Speedrun",
|
||||
"speedrunSettingsOverride": "Aggiorna automaticamente le impostazioni",
|
||||
"gameAutoEndsAfter": "Il gioco termina automaticamente dopo",
|
||||
"engineerMode": "Tutti sono ingegneri",
|
||||
|
||||
"tabGroupSabotages": "Sabotaggi",
|
||||
"deadImpostorsCanSabotage": "Gli impostori morti possono sabotare",
|
||||
"disableSabotage": "Disabilita i sabotaggi critici",
|
||||
"disableReactor": "Disabilita il sabotaggio del reattore",
|
||||
"disableOxygen": "Disabilita il sabotaggio dell'ossigeno",
|
||||
"disableLights": "Disabilita il sabotaggio delle luci",
|
||||
"disableComms": "Disabilita il sabotaggio delle comunicazioni",
|
||||
"disableHeli": "Disabilita il sabotaggio della rotta di collisione",
|
||||
"disableMushroomMixup": "Disabilita il sabotaggio della miscela di funghi",
|
||||
"disableCloseDoor": "Disabilita i sabotaggi delle porte",
|
||||
|
||||
"tabGroupGameplayGeneral": "Generale",
|
||||
"disableAnnoyingMeetingCalls": "Disabilita le chiamate di riunione nei primi 30s",
|
||||
"disableReport": "Disabilita le segnalazioni dei corpi",
|
||||
"changeDecontaminationTime": "Ignora il tempo di decontaminazione (Solo standard)",
|
||||
"decontaminationTimeOnMiraHQ": "Durata decontaminazione Mira HQ",
|
||||
"decontaminationDoorOpenTimeOnMiraHQ": "Durata apertura porte decontaminazione Mira HQ",
|
||||
"decontaminationTimeOnPolus": "Durata decontaminazione Polus",
|
||||
"decontaminationDoorOpenTimeOnPolus": "Durata apertura porte decontaminazione Polus",
|
||||
"disableSporeTrigger": "Disabilita le spore su The Fungle",
|
||||
|
||||
"disableDevices": "Disabilita i dispositivi",
|
||||
"disableSkeldDevices": "Disabilita i dispositivi di The Skeld",
|
||||
"disableSkeldAdmin": "Disabilita l'amministrazione di The Skeld",
|
||||
"disableSkeldCamera": "Disabilita le telecamere di The Skeld",
|
||||
"disableMiraHQDevices": "Disabilita i dispositivi di Mira HQ",
|
||||
"disableMiraHQAdmin": "Disabilita l'amministrazione di Mira HQ",
|
||||
"disableMiraHQDoorLog": "Disabilita il registro delle porte di Mira HQ",
|
||||
"disablePolusDevices": "Disabilita i dispositivi di Polus",
|
||||
"disablePolusAdmin": "Disabilita l'amministrazione di Polus",
|
||||
"disablePolusCamera": "Disabilita le telecamere di Polus",
|
||||
"disablePolusVital": "Disabilita i parametri vitali di Polus",
|
||||
"disableAirshipDevices": "Disabilita i dispositivi di Airship",
|
||||
"disableAirshipCockpitAdmin": "Disabilita l'amministrazione della cabina di pilotaggio di Airship",
|
||||
"disableAirshipRecordsAdmin": "Disabilita l'amministrazione degli archivi di Airship",
|
||||
"disableAirshipCamera": "Disabilita le telecamere di Airship",
|
||||
"disableAirshipVital": "Disabilita i parametri vitali di Airship",
|
||||
"disableFungleDevices": "Disabilita i dispositivi di The Fungle",
|
||||
"disableFungleVital": "Disabilita i parametri vitali di The Fungle",
|
||||
|
||||
"tabGroupTasks": "Incarichi",
|
||||
"allPlayersSameTasks": "Tutti hanno gli stessi incarichi",
|
||||
"overrideTaskSettings": "Disabilita gli incarichi",
|
||||
"taskPercentNeededToWin": "% Incarichi completati per la vittoria degli astronauti",
|
||||
|
||||
"disableMiraTasks": "Disabilita gli incarichi di Mira HQ",
|
||||
"disableBuyBeverage": "Disabilita Acquista bevanda",
|
||||
"disableMeasureWeather": "Disabilita Misura il tempo",
|
||||
"disableProcessData": "Disabilita Elabora dati",
|
||||
"disableRunDiagnostics": "Disabilita Esegui diagnostica",
|
||||
"disableSortSamples": "Disabilita Ordina i campioni",
|
||||
|
||||
"disablePolusTasks": "Disabilita gli incarichi di Polus",
|
||||
"disableActivateWeatherNodes": "Disabilita Attiva i nodi meteo",
|
||||
"disableAlignTelescope": "Disabilita Allinea il telescopio",
|
||||
"disableFillCanisters": "Disabilita Riempi le bombole",
|
||||
"disableInsertKeys": "Disabilita Inserisci le chiavi",
|
||||
"disableOpenWaterways": "Disabilita Apri i canali dell'acqua",
|
||||
"disableRebootWifi": "Disabilita Riavvia il Wi-Fi",
|
||||
"disableRepairDrill": "Disabilita Ripara il trapano",
|
||||
"disableScanBoardingPass": "Disabilita Scansiona la carta d'imbarco",
|
||||
|
||||
"disableAirshipTasks": "Disabilita gli incarichi di Airship",
|
||||
"disableCleanToilet": "Disabilita Pulisci il bagno",
|
||||
"disableDecontaminate": "Disabilita Decontamina",
|
||||
"disableDevelopPhotos": "Disabilita Sviluppa le foto",
|
||||
"disableDressMannequin": "Disabilita Vesti il manichino",
|
||||
"disableFixShower": "Disabilita Ripara la doccia",
|
||||
"disableMakeBurger": "Disabilita Prepara un hamburger",
|
||||
"disablePickUpTowels": "Disabilita Raccogli gli asciugamani",
|
||||
"disablePolishRuby": "Disabilita Lucida il rubino",
|
||||
"disablePutAwayPistols": "Disabilita Metti via le pistole",
|
||||
"disablePutAwayRifles": "Disabilita Metti via i fucili",
|
||||
"disableRewindTapes": "Disabilita Riavvolgi i nastri",
|
||||
"disableResetBreaker": "Disabilita Ripristina gli interruttori",
|
||||
"disableSortRecords": "Disabilita Ordina i record",
|
||||
"disableStartFans": "Disabilita Avvia i ventilatori",
|
||||
"disableUnlockSafe": "Disabilita Sblocca la cassaforte",
|
||||
|
||||
"disableFungleTasks": "Disabilita gli incarichi di The Fungle",
|
||||
"disableBuildSandcastle": "Disabilita Costruisci il castello di sabbia",
|
||||
"disableCatchFish": "Disabilita Pesca i pesci",
|
||||
"disableCollectSamples": "Disabilita Raccogli i campioni",
|
||||
"disableCollectShells": "Disabilita Raccogli le conchiglie",
|
||||
"disableCollectVegetables": "Disabilita Raccogli le verdure",
|
||||
"disableCrankGenerator": "Disabilita Gira la manovella del generatore",
|
||||
"disableExtractFuel": "Disabilita Estrai il carburante",
|
||||
"disableFixAntenna": "Disabilita Ripara l'antenna",
|
||||
"disableHelpCritter": "Disabilita Aiuta la creatura",
|
||||
"disableHoistSupplies": "Disabilita Solleva le provviste",
|
||||
"disableLiftWeights": "Disabilita Solleva i pesi",
|
||||
"disableMineOres": "Disabilita Estrai i minerali",
|
||||
"disablePlayVideoGame": "Disabilita Gioca al videogioco",
|
||||
"disablePolishGem": "Disabilita Lucida la gemma",
|
||||
"disableReplaceParts": "Disabilita Sostituisci le parti",
|
||||
"disableRoastMarshmallow": "Disabilita Arrostisci il marshmallow",
|
||||
"disableThrowFisbee": "Disabilita Lancia il frisbee",
|
||||
"disableFindSignal": "Disabilita Trova il segnale",
|
||||
|
||||
"disableMiscCommonTasks": "Disabilita gli incarichi comuni globali",
|
||||
"disableEnterIdCode": "Disabilita Inserisci il codice ID",
|
||||
"disableFixWiring": "Disabilita Ripara i cavi elettrici",
|
||||
"disableSwipeCard": "Disabilita Striscia la tessera",
|
||||
|
||||
"disableMiscShortTasks": "Disabilita gli incarichi brevi globali",
|
||||
"disableAssembleArtifact": "Disabilita Assembla l'artefatto",
|
||||
"disableChartCourse": "Disabilita Traccia la rotta",
|
||||
"disableCleanO2Filter": "Disabilita Pulisci il filtro dell'O2",
|
||||
"disableCleanVent": "Disabilita Pulisci il condotto",
|
||||
"disableMonitorMushroom": "Disabilita Monitora il fungo",
|
||||
"disableMonitorTree": "Disabilita Monitora l'albero",
|
||||
"disablePrimeShields": "Disabilita Attiva gli scudi",
|
||||
"disableRecordTemperature": "Disabilita Registra la temperatura",
|
||||
"disableStabilizeSteering": "Disabilita Stabilizza la guida",
|
||||
"disableStoreArtifacts": "Disabilita Conserva gli artefatti",
|
||||
"disableUnlockManifolds": "Disabilita Sblocca i collettori",
|
||||
|
||||
"disableMiscLongTasks": "Disabilita gli incarichi lunghi globali",
|
||||
"disableAlignEngineOutput": "Disabilita Allinea l'uscita del motore",
|
||||
"disableClearAsteroids": "Disabilita Distruggi gli asteroidi",
|
||||
"disableEmptyChute": "Disabilita Svuota lo scivolo",
|
||||
"disableInspectSample": "Disabilita Ispeziona il campione",
|
||||
"disableReplaceWaterJug": "Disabilita Sostituisci il boccione dell'acqua",
|
||||
"disableStartReactor": "Disabilita Avvia il reattore",
|
||||
"disableWaterPlants": "Disabilita Annaffia le piante",
|
||||
|
||||
"disableMiscMixedTasks": "Disabilita gli incarichi misti globali",
|
||||
"disableCalibrateDistributor": "Disabilita Calibra il distributore",
|
||||
"disableDivertPower": "Disabilita Devia l'energia",
|
||||
"disableEmptyGarbage": "Disabilita Svuota la spazzatura",
|
||||
"disableFuelEngines": "Disabilita Rifornisci i motori",
|
||||
"disableSubmitScan": "Disabilita Invia la scansione",
|
||||
"disableUploadData": "Disabilita Carica i dati",
|
||||
|
||||
"allCommandsFull": "<b>TUTTI I COMANDI:</b>\n\n<b>/help</b>\nMostra questo messaggio.\n<b>/aur, /socials</b>\nInvia i link social di Among Us Revamped.\n\n<b>/r, /gm</b>\nInvia la descrizione della modalità corrente o l'elenco delle abilità.\n<b>/l, /lastgame</b>\nInvia le informazioni sull'ultimo vincitore.\n\n<b>/0kc, /0killcooldown</b>\nInvia la descrizione della modalità Ricarica uccisione a 0.\n<b>/sns, /shiftandseek</b>\nInvia la descrizione della modalità Mutaforma e cerca.\n<b>/sp, /speedrun</b>\nInvia la descrizione della modalità Speedrun.\n\n/<b>kick, /ban</b>\nEspelli o banna un giocatore per nome.\n<b>/ckick, /cban</b>\nEspelli o banna un giocatore per colore.\n\n<b>/vip /moderator /admin</b>\nAggiungi un giocatore come VIP, Moderatore o Admin.\n<b>/removevip, /removemoderator, /removeadmin</b>\nRimuovi VIP, Moderatore o Admin da un giocatore.\n\n<b>/eg, /endgame</b>\nTermina la partita corrente.\n<b>/em, /endmeeting</b>\nTermina la riunione corrente.\n<b>/s, /start</b>\nAvvia il conto alla rovescia di inizio partita.\n\n<b>/t {template}</b>\nInvia un template da AUR-DATA/templates.txt.\n\n<b>/col, /color, /colour</b>\nImposta il tuo colore, può essere usato per aggirare i limiti.",
|
||||
|
||||
"translationReloaded": "Il tuo file è stato ripristinato con successo.\nPer applicare tutte le modifiche, riavvia il gioco.",
|
||||
|
||||
"templateWelcome": "# In questo file puoi aggiungere i Template, che fungono da comode alternative per il copia-incolla.\n# Per creare un template, scrivi una nuova riga con la stessa formattazione del Template di prova qui sotto.\n# Nota che i Template non possono superare i 120 caratteri e non possono contenere caratteri speciali. In caso contrario verrai espulso.\n\ntest: questo è un esempio di template. Digita '/t test' per vederlo.\n\nwelcome: Benvenuto! Questa lobby utilizza Among Us Revamped {ModVersion} di MV. Buon divertimento!",
|
||||
"moderatorWelcome": "# In questo file puoi aggiungere i Moderatori tramite Codice Amico.\n# Se aggiungi qualcuno, otterrà un nome viola all'interno del gioco.\n# Vai su 'Impostazioni di sistema' nel gioco per personalizzare i permessi dei Moderatori. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000",
|
||||
"vipWelcome": "# In questo file puoi aggiungere i VIP tramite Codice Amico.\n# Se aggiungi qualcuno, otterrà un nome giallo all'interno del gioco.\n# Vai su 'Impostazioni di sistema' nel gioco per personalizzare i permessi dei VIP. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000\n",
|
||||
"adminWelcome": "# In questo file puoi aggiungere gli Admin tramite Codice Amico.\n# Se aggiungi qualcuno, otterrà un nome rosso all'interno del gioco.\n# Vai su 'Impostazioni di sistema' nel gioco per personalizzare i permessi degli Admin. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000\n",
|
||||
"banlistWelcome": "# In questo file puoi bannare i giocatori dalla tua lobby tramite Codice Amico.\n# Bannare qualcuno nel gioco lo aggiungerà automaticamente anche qui. Di seguito è riportato un esempio di Codice Amico.\n\nfriendcode#0000\n",
|
||||
"banwordWelcome": "# In questo file puoi impostare le parole proibite, espellendo automaticamente chiunque invii nel gioco le parole elencate qui.\n# Assicurati di separare le parole usando le nuove righe.",
|
||||
"bannameWelcome": "# In questo file puoi impostare i nomi proibiti, espellendo automaticamente chiunque utilizzi nel gioco i nomi elencati qui.\n# Assicurati di separare i nomi usando le nuove righe.",
|
||||
|
||||
"noGameEndWarning": "AVVISO: La modalità Nessuna fine del gioco è attiva",
|
||||
|
||||
"tooLongTemplate": "Il tuo Template supera i 120 caratteri e comporterebbe la tua espulsione al momento dell'invio. Per favore, riducine la lunghezza.",
|
||||
|
||||
"vipAdd": "Aggiunto con successo {0} come VIP.",
|
||||
"moderatorAdd": "Aggiunto con successo {0} come Moderatore.",
|
||||
"adminAdd": "Aggiunto con successo {0} come Admin.",
|
||||
"vipRemove": "Rimosso con successo VIP da {0}.",
|
||||
"moderatorRemove": "Rimosso con successo Moderatore da {0}.",
|
||||
"adminRemove": "Rimosso con successo Admin da {0}.",
|
||||
"permFail": "Impossibile trovare l'utente '{0}'. Lo hai scritto correttamente?",
|
||||
|
||||
"helpDesc": "Mostra tutti i comandi e la loro funzione.",
|
||||
"snsDesc": "Invia la descrizione della modalità di gioco Mutaforma e cerca.",
|
||||
"0kcDesc": "Invia la descrizione della modalità di gioco Ricarica uccisione a 0.",
|
||||
"SrDesc": "Invia la descrizione della modalità di gioco Speedrun.",
|
||||
"egDesc": "Termina la partita corrente.",
|
||||
"emDesc": "Termina la riunione corrente.",
|
||||
"aurDesc": "Invia i link social di Among Us Revamped.",
|
||||
"sDesc": "Avvia il conto alla rovescia del gioco.",
|
||||
"rDesc": "/r invia le abilità attive o la modalità di gioco corrente.",
|
||||
"rolesDesc": "Invia una panoramica di tutte le abilità/modalità di gioco.",
|
||||
"kickDesc": "Espelli un giocatore per nome.",
|
||||
"ckickDesc": "Espelli un giocatore per colore.",
|
||||
"banDesc": "Banna un giocatore per nome.",
|
||||
"cbanDesc": "Banna un giocatore per colore.",
|
||||
"dumpDesc": "Copia il LogOutput in un file separato.",
|
||||
"colDesc": "Imposta il tuo colore.",
|
||||
"reloadDesc": "Ricarica il file della lingua.",
|
||||
"vipDesc": "Aggiungi utente come VIP.",
|
||||
"moderatorDesc": "Aggiungi utente come Moderatore.",
|
||||
"adminDesc": "Aggiungi utente come admin.",
|
||||
"cremoveVipDesc": "Rimuovi VIP dall'utente.",
|
||||
"removeModeratorDesc": "Rimuovi Moderatore dall'utente.",
|
||||
"removeAdminDesc": "Rimuovi Admin dall'utente.",
|
||||
"lastgameDesc": "Invia le informazioni dell'ultima partita.",
|
||||
"templateDesc": "Invia un template specificato da AUR-DATA/templates.txt.",
|
||||
|
||||
"banWordKick": "{0} è stato espulso perché ha inviato una parola proibita {1} volta/e",
|
||||
|
||||
"pluginWarning": "<color=red><size=5><b>AVVISO:</color></b></size>\n<size=3><b>Hai 2 o più Plugin rilevati.</size></b>\nAmong Us Revamped non è compatibile con la maggior parte delle mod.\nSe riscontri dei bug, molto probabilmente sono dovuti all'incompatibilità.",
|
||||
|
||||
"systemSettings": "Impostazioni di sistema",
|
||||
"gameplaySettings": "Impostazioni di gioco",
|
||||
"gamemodeSettings": "Impostazioni modalità di gioco",
|
||||
|
||||
"systemSettingsDesc": "Impostazioni di qualità per migliorare il comfort e i test.",
|
||||
"gameplaySettingsDesc": "Impostazioni di gioco per migliorare l'esperienza in partita.",
|
||||
"gamemodeSettingsDesc": "Impostazioni situazionali da applicare per specifiche modalità di gioco.",
|
||||
|
||||
"everyone": "Tutti",
|
||||
"vipAndAbove": "<color=yellow>VIP</color> e superiori",
|
||||
"moderatorAndAbove": "<color=purple>Moderatori</color> e superiori",
|
||||
"admin": "<color=red>Admin</color>",
|
||||
"onlyYou": "Solo tu"
|
||||
}
|
||||
@@ -0,0 +1,287 @@
|
||||
{
|
||||
"LanguageID": "4",
|
||||
|
||||
"disableCompatibilityWarning": "互換性警告を無効化",
|
||||
|
||||
"systemSettings": "システム設定",
|
||||
"gameplaySettings": "ゲームプレイ設定",
|
||||
"gamemodeSettings": "モード設定",
|
||||
|
||||
"systemSettingsDesc": "快適性の向上やテスト目的の画質・システム設定。",
|
||||
"gameplaySettingsDesc": "ゲーム内体験を改善するための設定。",
|
||||
"gamemodeSettingsDesc": "特定のゲームモードに適したシチュエーション設定。",
|
||||
|
||||
"everyone": "全員",
|
||||
"vipAndAbove": "<color=yellow>VIP</color> 以上",
|
||||
"moderatorAndAbove": "<color=purple>モデレーター</color> 以上",
|
||||
"admin": "<color=red>管理者</color>",
|
||||
"onlyYou": "自分のみ",
|
||||
|
||||
"gameMaster": "管理者",
|
||||
"showFPS": "FPSを表示",
|
||||
"autoStart": "自動開始",
|
||||
"enableDarkTheme": "ダークテーマを有効化",
|
||||
"enableLobbyMusic": "ロビーBGM",
|
||||
"disableInfoWhenDead": "死亡後に情報を非表示",
|
||||
"disableCommandHelper": "コマンドヘルパーを無効化",
|
||||
|
||||
"gameMasterWarning": "ゲーム管理者をオフにするまで、観戦モードに入ります。警告:この設定を有効にすると、スキルのメッセージが送信されなくなったり、配役の割り当てが不正確になったりする可能性があります。",
|
||||
|
||||
"cancelStartCountdown": "開始カウントダウンがキャンセルされました",
|
||||
|
||||
"invalidFriendCodeKick": "{0} はフレンドコードが無効なためキックされました",
|
||||
"invalidFriendCodeBan": "{0} はフレンドコードが無効なためBANされました",
|
||||
"language": "言語 (再起動が必要)",
|
||||
"gamemode": "ゲームモード",
|
||||
"tabGroupMain": "管理設定",
|
||||
"kickLowLevelPlayer": "このレベル未満のプレイヤーをキック",
|
||||
"tempBanLowLevelPlayer": "キックではなくBANにする",
|
||||
"dontKickLevelOnes": "部屋のエラーによるレベル1プレイヤーのキックを防止",
|
||||
"kickInvalidFriendCodes": "無効(空)のフレンドコードをキック",
|
||||
"tempBanInvalidFriendCodes": "キックではなくBANにする",
|
||||
"deniedWordsToKick": "NGワード送信時にプレイヤーをキック",
|
||||
"moderatorCanUseCommand": "モデレーターはコマンドを使用可能",
|
||||
"autoKickStart": "「Start」と送信したプレイヤーを自動キック",
|
||||
"autoKickStartAsBan": "キックではなくBANにする",
|
||||
"autoKickStartTimes": "キックに必要な「Start」の送信回数",
|
||||
"autoKickStartStrength": "厳格な検出モード",
|
||||
"tabGroupAutomation": "自動化",
|
||||
"autoSendGameInfo": "勝者情報を自動送信",
|
||||
"autoRejoinLobby": "ロビーに自動で再参加",
|
||||
"autoStartTimer": "自動開始カウントダウン",
|
||||
"waitAutoStart": "自動開始の待機時間",
|
||||
"playerAutoStart": "自動開始に必要な人数",
|
||||
"enableJoinMessages": "入室歓迎メッセージを有効化",
|
||||
"messagePerPlayerNum": "指定した入室人数に達するごとにメッセージを送信",
|
||||
"tabGroupMisc": "その他設定",
|
||||
"startCountdown": "デフォルトの開始カウントダウン",
|
||||
"colorCommandLevel": "カラーコマンドを使用できる権限",
|
||||
"allowFortegreen": "フォートグリーンを許可",
|
||||
"noGameEnd": "ゲームが絶対に終了しない",
|
||||
|
||||
"tabGroupAccess": "権限レベル",
|
||||
"slashColorCmd": "/color を使用できる権限",
|
||||
"slashRolesAndGamemodeCmd": "/r とテンプレートを使用できる権限",
|
||||
"slashLastGameCmd": "/l と /aur を使用できる権限",
|
||||
"slashKickCmd": "/kick と /ckick を使用できる権限",
|
||||
"slashBanCmd": "/ban と /cban を使用できる権限",
|
||||
"slashEndMeetingCmd": "/endmeeting を使用できる権限",
|
||||
"slashStartAndEndGameCmd": "/startgame と /endgame を使用できる権限",
|
||||
|
||||
"tabGroupCrewmate": "クルーメイトの役職",
|
||||
"tabGroupNeutral": "ニュートラルの役職",
|
||||
"tabGroupImpostor": "インポスターの役職",
|
||||
|
||||
"tabGroupStandard": "スタンダードモード",
|
||||
|
||||
"tabGroupHNS": "かくれんぼモード (Hide and Seek)",
|
||||
"numSeekers": "オニの数",
|
||||
"tabGroup0Kcd": "キルクールダウン0秒モード (0 Kill Cooldown)",
|
||||
"noKcdSettingsOverride": "設定の自動更新",
|
||||
"tabGroupSNS": "シフト&シーク (Shift and Seek)",
|
||||
"snsChatInGame": "ゲーム進行中のチャットを許可 (実験的)",
|
||||
"snsSettingsOverride": "設定の自動更新",
|
||||
"cantKillTime": "ミス/空振り後のキル不能時間",
|
||||
"misfiresToSuicide": "ミスが指定回数に達した時に自害",
|
||||
"crewAutoWinsGameAfter": "クルーがこの時間経過後に自動勝利",
|
||||
"snsDisableSabotage": "SnSの緊急サボタージュを無効化",
|
||||
"snsDisableReactor": "リアクター妨害を無効化",
|
||||
"snsDisableOxygen": "酸素妨害を無効化",
|
||||
"snsDisableLights": "停電妨害を無効化",
|
||||
"snsDisableComms": "通信妨害を無効化",
|
||||
"snsDisableHeli": "墜落危機妨害を無効化",
|
||||
"snsDisableMushroomMixup": "キノコまぜまぜ妨害を無効化",
|
||||
"snsDisableCloseDoor": "SnSのドア閉め妨害を無効化",
|
||||
"tabGroupSpeedrun": "タイムアタックモード (Speedrun)",
|
||||
"speedrunSettingsOverride": "設定の自動更新",
|
||||
"gameAutoEndsAfter": "ゲームがこの時間経過後に自動終了",
|
||||
"engineerMode": "全員がエンジニア",
|
||||
|
||||
"tabGroupSabotages": "サボタージュ設定",
|
||||
"deadImpostorsCanSabotage": "死亡したインポスターもサボタージュ可能",
|
||||
"disableSabotage": "緊急サボタージュを無効化",
|
||||
"disableReactor": "リアクター妨害を無効化",
|
||||
"disableOxygen": "酸素妨害を無効化",
|
||||
"disableLights": "停電妨害を無効化",
|
||||
"disableComms": "通信妨害を無効化",
|
||||
"disableHeli": "墜落危機妨害を無効化",
|
||||
"disableMushroomMixup": "キノコまぜまぜ妨害を無効化",
|
||||
"disableCloseDoor": "ドア閉め妨害を無効化",
|
||||
|
||||
"tabGroupGameplayGeneral": "全般的なゲームプレイ",
|
||||
"disableAnnoyingMeetingCalls": "ゲーム開始後30秒間は緊急会議の招集を禁止",
|
||||
"disableReport": "死体通報を無効化",
|
||||
"changeDecontaminationTime": "除染室の時間を上書き (スタンダードモードのみ)",
|
||||
"decontaminationTimeOnMiraHQ": "Mira HQの除染持続時間",
|
||||
"decontaminationDoorOpenTimeOnMiraHQ": "Mira HQのドア開放持続時間",
|
||||
"decontaminationTimeOnPolus": "Polusの除染持続時間",
|
||||
"decontaminationDoorOpenTimeOnPolus": "Polusのドア開放持続時間",
|
||||
"disableSporeTrigger": "The Fungleの胞子トリガーを無効化",
|
||||
|
||||
"disableDevices": "端末を無効化",
|
||||
"disableSkeldDevices": "Skeldの端末を無効化",
|
||||
"disableSkeldAdmin": "Skeldの管理室マップを無効化",
|
||||
"disableSkeldCamera": "Skeldの監視カメラを無効化",
|
||||
"disableMiraHQDevices": "Mira HQの端末を無効化",
|
||||
"disableMiraHQAdmin": "Mira HQの管理室マップを無効化",
|
||||
"disableMiraHQDoorLog": "Mira HQのセンサーログを無効化",
|
||||
"disablePolusDevices": "Polusの端末を無効化",
|
||||
"disablePolusAdmin": "Polusの管理室マップを無効化",
|
||||
"disablePolusCamera": "Polusの監視カメラを無効化",
|
||||
"disablePolusVital": "Polusのバイタルを無効化",
|
||||
"disableAirshipDevices": "Airshipの端末を無効化",
|
||||
"disableAirshipCockpitAdmin": "Airshipのコックピット管理室マップを無効化",
|
||||
"disableAirshipRecordsAdmin": "Airshipの記録室管理室マップを無効化",
|
||||
"disableAirshipCamera": "Airshipの監視カメラを無効化",
|
||||
"disableAirshipVital": "Airshipのバイタルを無効化",
|
||||
"disableFungleDevices": "The Fungleの端末を無効化",
|
||||
"disableFungleVital": "The Fungleのバイタルを無効化",
|
||||
|
||||
"tabGroupTasks": "タスク設定",
|
||||
"allPlayersSameTasks": "全員が同じタスクを所持",
|
||||
"overrideTaskSettings": "タスクを無効化",
|
||||
"taskPercentNeededToWin": "クルーの勝利に必要なタスク達成割合",
|
||||
|
||||
"disableMiraTasks": "Mira HQのタスクを無効化",
|
||||
"disableBuyBeverage": "「飲料を買う」を無効化",
|
||||
"disableMeasureWeather": "「天気を計測する」を無効化",
|
||||
"disableProcessData": "「データを処理する」を無効化",
|
||||
"disableRunDiagnostics": "「診断を実行する」を無効化",
|
||||
"disableSortSamples": "「サンプルを整理する」を無効化",
|
||||
|
||||
"disablePolusTasks": "Polusのタスクを無効化",
|
||||
"disableActivateWeatherNodes": "「気象ノードを起動する」を無効化",
|
||||
"disableAlignTelescope": "「望遠鏡を調整する」を無効化",
|
||||
"disableFillCanisters": "「キャニスターを満たす」を無効化",
|
||||
"disableInsertKeys": "「鍵を差し込む」を無効化",
|
||||
"disableOpenWaterways": "「水路を開く」を無効化",
|
||||
"disableRebootWifi": "「Wi-Fiを再起動する」を無効化",
|
||||
"disableRepairDrill": "「ドリルを修理する」を無効化",
|
||||
"disableScanBoardingPass": "「搭乗券をスキャンする」を無効化",
|
||||
|
||||
"disableAirshipTasks": "Airshipのタスクを無効化",
|
||||
"disableCleanToilet": "「トイレを掃除する」を無効化",
|
||||
"disableDecontaminate": "「除染する」を無効化",
|
||||
"disableDevelopPhotos": "「写真を現像する」を無効化",
|
||||
"disableDressMannequin": "「マネキンに着せ替える」を無効化",
|
||||
"disableFixShower": "「シャワーヘッドを修理する」を無効化",
|
||||
"disableMakeBurger": "「ハンバーガーを作る」を無効化",
|
||||
"disablePickUpTowels": "「タオルを拾う」を無効化",
|
||||
"disablePolishRuby": "「ルビーを磨く」を無効化",
|
||||
"disablePutAwayPistols": "「ピストルを片付ける」を無効化",
|
||||
"disablePutAwayRifles": "「ライフルを片付ける」を無効化",
|
||||
"disableRewindTapes": "「テープを巻き戻す」を無効化",
|
||||
"disableResetBreaker": "「ブレーカーをリセットする」を無効化",
|
||||
"disableSortRecords": "「記録を整理する」を無効化",
|
||||
"disableStartFans": "「ファンを始動する」を無効化",
|
||||
"disableUnlockSafe": "「金庫を開ける」を無効化",
|
||||
|
||||
"disableFungleTasks": "The Fungleのタスクを無効化",
|
||||
"disableBuildSandcastle": "「砂のお城を作る」を無効化",
|
||||
"disableCatchFish": "「魚釣りをする」を無効化",
|
||||
"disableCollectSamples": "「サンプルを採集する」を無効化",
|
||||
"disableCollectShells": "「貝殻を集める」を無効化",
|
||||
"disableCollectVegetables": "「野菜を収穫する」を無効化",
|
||||
"disableCrankGenerator": "「発電機を回す」を無効化",
|
||||
"disableExtractFuel": "「燃料を抽出する」を無効化",
|
||||
"disableFixAntenna": "「アンテナを修理する」を無効化",
|
||||
"disableHelpCritter": "「小動物を助ける」を無効化",
|
||||
"disableHoistSupplies": "「物資を巻き上げる」を無効化",
|
||||
"disableLiftWeights": "「ウエイトリフティング」を無効化",
|
||||
"disableMineOres": "「鉱石を採掘する」を無効化",
|
||||
"disablePlayVideoGame": "「ゲームを遊ぶ」を無効化",
|
||||
"disablePolishGem": "「宝石を磨く」を無効化",
|
||||
"disableReplaceParts": "「部品を交換する」を無効化",
|
||||
"disableRoastMarshmallow": "「マシュマロを焼く」を無効化",
|
||||
"disableThrowFisbee": "「フリスビーを投げる」を無効化",
|
||||
"disableFindSignal": "「電波を探す」を無効化",
|
||||
|
||||
"disableMiscCommonTasks": "共通タスクをグローバル無効化",
|
||||
"disableEnterIdCode": "「IDコードを入力する」を無効化",
|
||||
"disableFixWiring": "「配線を修理する」を無効化",
|
||||
"disableSwipeCard": "「カードをスワイプする」を無効化",
|
||||
|
||||
"disableMiscShortTasks": "ショートタスクをグローバル無効化",
|
||||
"disableAssembleArtifact": "「遺物を組み立てる」を無効化",
|
||||
"disableChartCourse": "「航路を設定する」を無効化",
|
||||
"disableCleanO2Filter": "「酸素フィルターを清掃する」を無効化",
|
||||
"disableCleanVent": "「ベントを清掃する」を無効化",
|
||||
"disableMonitorMushroom": "「キノコを監視する」を無効化",
|
||||
"disableMonitorTree": "「木を監視する」を無効化",
|
||||
"disablePrimeShields": "「シールドを充填する」を無効化",
|
||||
"disableRecordTemperature": "「温度を記録する」を無効化",
|
||||
"disableStabilizeSteering": "「操縦を安定させる」を無効化",
|
||||
"disableStoreArtifacts": "「遺物を保管する」を無効化",
|
||||
"disableUnlockManifolds": "「マニホールドを開ける」を無効化",
|
||||
|
||||
"disableMiscLongTasks": "ロングタスクをグローバル無効化",
|
||||
"disableAlignEngineOutput": "「エンジン出力を調整する」を無効化",
|
||||
"disableClearAsteroids": "「小惑星をクリアする」を無効化",
|
||||
"disableEmptyChute": "「ゴミ捨て場のシュートを空にする」を無効化",
|
||||
"disableInspectSample": "「サンプルを検査する」を無効化",
|
||||
"disableReplaceWaterJug": "「給水ボトルの交換」を無効化",
|
||||
"disableStartReactor": "「リアクターを起動する」を無効化",
|
||||
"disableWaterPlants": "「植物に水をやる」を無効化",
|
||||
|
||||
"disableMiscMixedTasks": "複合タスクをグローバル無効化",
|
||||
"disableCalibrateDistributor": "「配電盤を調整する」を無効化",
|
||||
"disableDivertPower": "「電力を転送する」を無効化",
|
||||
"disableEmptyGarbage": "「ゴミを捨てる」を無効化",
|
||||
"disableFuelEngines": "「エンジンに燃料を補給する」を無効化",
|
||||
"disableSubmitScan": "「スキャンを送信する」を無効化",
|
||||
"disableUploadData": "「データをアップロードする」を無効化",
|
||||
|
||||
"allCommandsFull": "<b>すべてのコマンド:</b>\n\n<b>/help</b>\nこのヘルプメッセージを表示します。\n<b>/aur, /socials</b>\nAmong Us RevampedのSNSリンクを送信します。\n\n<b>/r, /gm</b>\n現在のモード紹介またはスキルリストを送信します。\n<b>/l, /lastgame</b>\n前回のゲームの勝者情報を送信します。\n\n<b>/0kc, /0killcooldown</b>\nキルクールダウン0秒モードの紹介を送信します。\n<b>/sns, /shiftandseek</b>\nシフト&シークモードの紹介を送信します。\n<b>/sp, /speedrun</b>\nタイムアタックモードの紹介を送信します。\n\n/<b>kick, /ban</b>\n名前を指定してプレイヤーをキックまたはBANします。\n<b>/ckick, /cban</b>\n色を指定してプレイヤーをキックまたはBANします。\n\n<b>/vip /moderator /admin</b>\nプレイヤーをVIP、モデレーター、または管理者に設定します。\n<b>/removevip, /removemoderator, /removeadmin</b>\nプレイヤーのVIP、モデレーター、または管理者権限を剥奪します。\n\n<b>/eg, /endgame</b>\n現在のゲームを終了します。\n<b>/em, /endmeeting</b>\n現在の会議を終了します。\n<b>/s, /start</b>\nゲーム開始のカウントダウンを始めます。\n\n<b>/t {template}</b>\nAUR-DATA/templates.txt内の指定されたテンプレートを送信します。\n\n<b>/col, /color, /colour</b>\nあなたのカラーを設定します(制限のバイパスに使用可能)。",
|
||||
|
||||
"translationReloaded": "ファイルが正常にリセットされました。\nすべての変更を適用するには、ゲームを再起動してください。",
|
||||
|
||||
"templateWelcome": "# このファイルでは、簡単にコピー&ペーストできるテンプレートを追加できます。\n# 新しいテンプレートを作成するには、改行して下のテスト用テンプレートと同じ形式を使用してください。\n# テンプレートの長さは120文字を超えることはできず、特殊文字も含められません。超えた場合は部屋からキックされます。\n\ntest: これはテンプレートの例です。「/t test」と入力すると表示されます。\n\nwelcome: ようこそ!このロビーはMV制作の Among Us Revamped {ModVersion} を使用しています。お楽しみください!",
|
||||
"moderatorWelcome": "# このファイルでは、フレンドコードを使ってモデレーターを追加できます。\n# 追加されると、ゲーム内での名前が紫色になります。\n# ゲーム内の「システム設定」からモデレーター権限をカスタマイズしてください。以下はフレンドコードの例です。\n\nfriendcode#0000",
|
||||
"vipWelcome": "# このファイルでは、フレンドコードを使ってVIPを追加できます。\n# 追加されると、ゲーム内での名前が黄色になります。\n# ゲーム内の「システム設定」からVIP権限をカスタマイズしてください。以下はフレンドコードの例です。\n\nfriendcode#0000\n",
|
||||
"adminWelcome": "# このファイルでは、フレンドコードを使って管理職(Admin)を追加できます。\n# 追加されると、ゲーム内での名前が赤色になります。\n# ゲーム内の「システム設定」から管理者権限をカスタマイズしてください。以下はフレンドコードの例です。\n\nfriendcode#0000\n",
|
||||
"banlistWelcome": "# このファイルでは、フレンドコードを使ってロビーからプレイヤーをBANできます。\n# ゲーム内で誰かをBANすると、自動的にここにも同期されます。以下はフレンドコードの例です。\n\nfriendcode#0000\n",
|
||||
"banwordWelcome": "# このファイルでは、NGワードを設定できます。ここでリストされた単語をゲーム内で送信したプレイヤーは自動的にキックされます。\n# 単語ごとに必ず改行して区切ってください。",
|
||||
"bannameWelcome": "# このファイルでは、NG名前を設定できます。ここでリストされた名前をゲーム内で使用しているプレイヤーは自動的にキックされます。\n# 名前ごとに必ず改行して区切ってください。",
|
||||
|
||||
"noGameEndWarning": "警告:「ゲームが絶対に終了しない」が有効になっています",
|
||||
|
||||
"tooLongTemplate": "テンプレートが120文字を超えているため、送信するとキックされます。長さを短くしてください。",
|
||||
|
||||
"vipAdd": "{0} を VIP として登録しました。",
|
||||
"moderatorAdd": "{0} を モデレーター として登録しました。",
|
||||
"adminAdd": "{0} を 管理者 として登録しました。",
|
||||
"vipRemove": "{0} の VIP 権限を削除しました。",
|
||||
"moderatorRemove": "{0} の モデレーター 権限を削除しました。",
|
||||
"adminRemove": "{0} の 管理者 権限を削除しました。",
|
||||
"permFail": "ユーザー '{0}' が見つかりません。スペルが正しいか確認してください。",
|
||||
|
||||
"helpDesc": "すべてのコマンドとその機能を表示します。",
|
||||
"snsDesc": "シフト&シーク (Shift and Seek) ゲームモードの紹介を送信します。",
|
||||
"0kcDesc": "キルクールダウン0秒 (0 Kill Cooldown) ゲームモードの紹介を送信します。",
|
||||
"SrDesc": "タイムアタック (Speedrun) ゲームモード의 紹介を送信します。",
|
||||
"egDesc": "現在のゲームを終了します。",
|
||||
"emDesc": "現在の会議を終了します。",
|
||||
"aurDesc": "Among Us RevampedのSNSリンクを送信します。",
|
||||
"sDesc": "ゲーム開始のカウントダウンを始めます。",
|
||||
"rDesc": "/r はアクティブなスキルまたは現在のモードを送信します。",
|
||||
"rolesDesc": "すべてのスキル・ゲームモードの概要を送信します。",
|
||||
"kickDesc": "名前を指定してプレイヤーをキックします。",
|
||||
"ckickDesc": "色を指定してプレイヤーをキックします。",
|
||||
"banDesc": "名前を指定してプレイヤーをBANします。",
|
||||
"cbanDesc": "色を指定してプレイヤーをBANします。",
|
||||
"dumpDesc": "LogOutput(ログ出力)を独立したファイルにコピーします。",
|
||||
"colDesc": "あなたのカラーを設定します。",
|
||||
"reloadDesc": "言語ファイルを再読み込みします。",
|
||||
"vipDesc": "ユーザーを VIP に追加します。",
|
||||
"moderatorDesc": "ユーザーを モデレーター に追加します。",
|
||||
"adminDesc": "ユーザーを 管理者 に追加します。",
|
||||
"cremoveVipDesc": "ユーザーの VIP 権限を削除します。",
|
||||
"removeModeratorDesc": "ユーザーの モデレーター 権限を削除します。",
|
||||
"removeAdminDesc": "ユーザーの 管理者 権限を削除します。",
|
||||
"lastgameDesc": "前回のゲーム情報を送信します。",
|
||||
"templateDesc": "AUR-DATA/templates.txtで指定されたテンプレートを送信します。",
|
||||
|
||||
"banWordKick": "{0} はNGワードを送信したためキックされました(累計回数:{1} 回)",
|
||||
|
||||
"pluginWarning": "<color=red><size=5><b>警告:</color></b></size>\n<size=3><b>2つ以上のプラグインが有効化されていることを検出しました。</size></b>\nAmong Us RevampedはほとんどのModと互換性がありません。\n不具合が発生した場合、競合が原因である可能性が非常に高いです。"
|
||||
}
|
||||
@@ -0,0 +1,287 @@
|
||||
{
|
||||
"LanguageID": "5",
|
||||
|
||||
"gameMaster": "Наблюдатель",
|
||||
"showFPS": "Показать FPS",
|
||||
"autoStart": "Авто Старт",
|
||||
"enableDarkTheme": "Включить Тёмную Тему",
|
||||
"enableLobbyMusic": "Музыка Лобби",
|
||||
"disableInfoWhenDead": "Скрывать Информацию После Смерти",
|
||||
"disableCommandHelper": "Выключить Командного Помощника",
|
||||
"disableCompatibilityWarning": "Выключить Предупреждение Совместимости",
|
||||
|
||||
"gameMasterWarning":"Вы будете наблюдать игры пока включён режим спектатора. ВНИМАНИЕ: Сообщения со способностями не будут отправлены и назначение ролей может быть неправильным если эта настройка включена.",
|
||||
|
||||
"cancelStartCountdown": "Отсчет до старта отменён",
|
||||
|
||||
"invalidFriendCodeKick": "{0} был кикнут из-за неправильного Кода друга",
|
||||
"invalidFriendCodeBan": "{0} был забанен из-за неправильного Кода друга",
|
||||
"language": "Язык (Нужен Перезапуск)",
|
||||
"gamemode": "Режим",
|
||||
"tabGroupMain": "Модерация",
|
||||
"kickLowLevelPlayer": "Кикать Игроков Ниже Уровня",
|
||||
"tempBanLowLevelPlayer": "Банить вместо кика",
|
||||
"dontKickLevelOnes": "Не кикать Игроков Ур.1 В Глитчнутых Лобби",
|
||||
"kickInvalidFriendCodes": "Кикать Неправильные (Пустые) Коды друзей",
|
||||
"tempBanInvalidFriendCodes": "Банить вместо кика",
|
||||
"deniedWordsToKick": "Отправленных Запрещённых Слов Чтобы Кикнуть Игрока",
|
||||
"moderatorCanUseCommand": "Модераторы Могут Использовать Команды",
|
||||
"autoKickStart": "Кикать Игроков Которые Говорят Start",
|
||||
"autoKickStartAsBan": "Банить вместо кика",
|
||||
"autoKickStartTimes": "Start сообщений нужно для кика",
|
||||
"autoKickStartStrength": "Режим строго обнаружения",
|
||||
"tabGroupAutomation": "Автоматизация",
|
||||
"autoSendGameInfo": "Автоматически отправлять информацию о победителе",
|
||||
"autoRejoinLobby": "Автоматически перезаходить в лобби",
|
||||
"autoStartTimer": "Отсчет Для Авто Старта",
|
||||
"waitAutoStart": "Авто Старт После",
|
||||
"playerAutoStart": "Игроков Нужно Для Авто Старта",
|
||||
"enableJoinMessages": "Включить Сообщение С Приветствиями",
|
||||
"messagePerPlayerNum": "Сообщение Каждое Количество Заходов",
|
||||
"tabGroupMisc": "Разное",
|
||||
"startCountdown": "Отсчет Для Старта По Умолчанию",
|
||||
"colorCommandLevel": "Кто Может использовать Команды Цветов",
|
||||
"allowFortegreen": "Разрешить Фортезелёный Цвет",
|
||||
"noGameEnd": "Без Конца Игры",
|
||||
|
||||
"tabGroupAccess": "Уровни Доступа",
|
||||
"slashColorCmd": "Кто Может Использовать /color",
|
||||
"slashRolesAndGamemodeCmd": "Кто Может Использовать /r & Templates",
|
||||
"slashLastGameCmd": "Кто Может Использовать /l & /aur",
|
||||
"slashKickCmd": "Кто Может Использовать /kick & /ckick",
|
||||
"slashBanCmd": "Кто Может Использовать /ban & /cban",
|
||||
"slashEndMeetingCmd": "Кто Может Использовать /endmeeting",
|
||||
"slashStartAndEndGameCmd": "Кто Может Использовать /startgame & /endgame",
|
||||
|
||||
"tabGroupCrewmate": "Роли Экипажа",
|
||||
"tabGroupNeutral": "Роли Нейтралов",
|
||||
"tabGroupImpostor": "Роли Предателей",
|
||||
|
||||
"tabGroupStandard": "Стандарт",
|
||||
|
||||
"tabGroupHNS": "Прятки",
|
||||
"numSeekers": "# Искателей",
|
||||
"tabGroup0Kcd": "0 Перезарядка Убийств",
|
||||
"noKcdSettingsOverride": "Автоматически Обновлять Настройки",
|
||||
"tabGroupSNS": "Клон",
|
||||
"snsChatInGame": "Чат во время игры (экспериментальное)",
|
||||
"snsSettingsOverride": "Автоматически Обновлять Настройки",
|
||||
"cantKillTime": "После Осечки Нельзя Убивать В Течение",
|
||||
"misfiresToSuicide": "Самоубийство После Количества Осечек",
|
||||
"crewAutoWinsGameAfter": "Экипаж Автоматически Побеждает После",
|
||||
"snsDisableSabotage": "Выключить Критические Сабботажи в Режиме Клона",
|
||||
"snsDisableReactor": "Выключить Сабботаж Реактора",
|
||||
"snsDisableOxygen": "Выключить Сабботаж O2",
|
||||
"snsDisableLights": "Выключить Сабботаж Света",
|
||||
"snsDisableComms": "Выключить Сабботаж Связи",
|
||||
"snsDisableHeli": "Выключить Сабботаж Столкновения",
|
||||
"snsDisableMushroomMixup": "Выключить Сабботаж Грибного Переполоха",
|
||||
"snsDisableCloseDoor": "Выключить Сабботаж Дверей в Режиме Клона",
|
||||
"tabGroupSpeedrun": "Спидран",
|
||||
"speedrunSettingsOverride": "Автоматически Обновлять Настройки",
|
||||
"gameAutoEndsAfter": "Игра автоматически заканчивается после",
|
||||
"engineerMode": "Все Инженеры",
|
||||
|
||||
"tabGroupSabotages": "Сабботажи",
|
||||
"deadImpostorsCanSabotage": "Умершие Предатели Могут Сабботировать",
|
||||
"disableSabotage": "Выключить Критические Сабботажи",
|
||||
"disableReactor": "Выключить Сабботаж Реактора",
|
||||
"disableOxygen": "Выключить Сабботаж O2",
|
||||
"disableLights": "Выключить Сабботаж Света",
|
||||
"disableComms": "Выключить Сабботаж Связи",
|
||||
"disableHeli": "Выключить Сабботаж Столкновения",
|
||||
"disableMushroomMixup": "Выключить Сабботаж Грибного Переполоха",
|
||||
"disableCloseDoor": "Выключить Сабботаж Дверей",
|
||||
|
||||
"tabGroupGameplayGeneral": "Основное",
|
||||
"disableAnnoyingMeetingCalls": "В первые 30 секунд нельзя созывать собрания",
|
||||
"disableReport": "Выключить Репорты Трупов",
|
||||
"changeDecontaminationTime": "Изменить Время Обеззараживания (Только Стандартный Режим)",
|
||||
"decontaminationTimeOnMiraHQ": "Время обеззараживания на Mira HQ",
|
||||
"decontaminationDoorOpenTimeOnMiraHQ": "Время открытия дверей на Mira HQ",
|
||||
"decontaminationTimeOnPolus": "Время обеззараживания на Polus",
|
||||
"decontaminationDoorOpenTimeOnPolus": "Время открытия дверей на Polus",
|
||||
"disableSporeTrigger": "Выключить споры на Fungle",
|
||||
|
||||
"disableDevices": "Выключить Девайсы",
|
||||
"disableSkeldDevices": "Выключить Девайсы на Skeld",
|
||||
"disableSkeldAdmin": "Выключить Админ на Skeld",
|
||||
"disableSkeldCamera": "Выключить Камеры на Skeld",
|
||||
"disableMiraHQDevices": "Выключить Девайсы на Mira HQ",
|
||||
"disableMiraHQAdmin": "Выключить Админ на Mira HQ",
|
||||
"disableMiraHQDoorLog": "Выключить Журнал на Mira HQ",
|
||||
"disablePolusDevices": "Выключить Девайсы на Polus",
|
||||
"disablePolusAdmin": "Выключить Админ на Polus",
|
||||
"disablePolusCamera": "Выключить Камеры на Polus",
|
||||
"disablePolusVital": "Выключить Пульс на Polus",
|
||||
"disableAirshipDevices": "Выключить Девайсы на Airship",
|
||||
"disableAirshipCockpitAdmin": "Выключить Админ в Кабине на Airship",
|
||||
"disableAirshipRecordsAdmin": "Выключить Админ в Архиве на Airship",
|
||||
"disableAirshipCamera": "Выключить Камеры на Airship",
|
||||
"disableAirshipVital": "Выключить Пульс на Airship",
|
||||
"disableFungleDevices": "Выключить Девайсы на Fungle",
|
||||
"disableFungleVital": "Выключить Пульс на Fungle",
|
||||
|
||||
"tabGroupTasks": "Задания",
|
||||
"allPlayersSameTasks": "Одинаковые задания для всех",
|
||||
"overrideTaskSettings": "Отключить задания",
|
||||
"taskPercentNeededToWin": "% Выполненных заданий для победы экипажа",
|
||||
|
||||
"disableMiraTasks": "Выключить Задания на Mira HQ",
|
||||
"disableBuyBeverage": "Выключить Купить Напиток",
|
||||
"disableMeasureWeather": "Выключить Изучить Погодные Условия",
|
||||
"disableProcessData": "Выключить Обработать Данные",
|
||||
"disableRunDiagnostics": "Выключить Провести Диагностику",
|
||||
"disableSortSamples": "Выключить Разобрать Образцы",
|
||||
|
||||
"disablePolusTasks": "Выключить Задания на Polus",
|
||||
"disableActivateWeatherNodes": "Выключить Починить Узел",
|
||||
"disableAlignTelescope": "Выключить Навести Телескоп",
|
||||
"disableFillCanisters": "Выключить Наполнить Баллоны",
|
||||
"disableInsertKeys": "Выключить Вставить Ключи",
|
||||
"disableOpenWaterways": "Выключить Открыть Водопровод",
|
||||
"disableRebootWifi": "Выключить Перезагрузить Wi-Fi",
|
||||
"disableRepairDrill": "Выключить Починить Бур",
|
||||
"disableScanBoardingPass": "Выключить Проверить Посадочный Талон",
|
||||
|
||||
"disableAirshipTasks": "Выключить Задания на Airship",
|
||||
"disableCleanToilet": "Выключить Помыть Туалет",
|
||||
"disableDecontaminate": "Выключить Пройти Обработку",
|
||||
"disableDevelopPhotos": "Выключить Проявить Фото",
|
||||
"disableDressMannequin": "Выключить Одеть Манекен",
|
||||
"disableFixShower": "Выключить Починить Душ",
|
||||
"disableMakeBurger": "Выключить Сделать Бургер",
|
||||
"disablePickUpTowels": "Выключить Поднять Полотенца",
|
||||
"disablePolishRuby": "Выключить Полировать рубин",
|
||||
"disablePutAwayPistols": "Выключить Убрать Пистолеты",
|
||||
"disablePutAwayRifles": "Выключить Убрать Ружья",
|
||||
"disableRewindTapes": "Выключить Перемотать Кассеты",
|
||||
"disableResetBreaker": "Выключить Перезапуск Пробок",
|
||||
"disableSortRecords": "Выключить Разобрать Записи",
|
||||
"disableStartFans": "Выключить Запустить Вентилятор",
|
||||
"disableUnlockSafe": "Выключить Открыть Сейф",
|
||||
|
||||
"disableFungleTasks": "Выключить Задания на Fungle",
|
||||
"disableBuildSandcastle": "Выключить Построить Песчаный Замок",
|
||||
"disableCatchFish": "Выключить Поймать Рыбу",
|
||||
"disableCollectSamples": "Выключить Собрать Образцы",
|
||||
"disableCollectShells": "Выключить Собрать Ракушки",
|
||||
"disableCollectVegetables": "Выключить Собрать Овощи",
|
||||
"disableCrankGenerator": "Выключить Завести Генератор",
|
||||
"disableExtractFuel": "Выключить Извлечь Топливо",
|
||||
"disableFixAntenna": "Выключить Починить Антенну",
|
||||
"disableHelpCritter": "Выключить Помочь Животному",
|
||||
"disableHoistSupplies": "Выключить Поднять Припасы",
|
||||
"disableLiftWeights": "Выключить Поднять Грузы",
|
||||
"disableMineOres": "Выключить Добыть Руду",
|
||||
"disablePlayVideoGame": "Выключить Играть в Видеоигру",
|
||||
"disablePolishGem": "Выключить Отполировать Драгоценный Камень",
|
||||
"disableReplaceParts": "Выключить Заменить Детали",
|
||||
"disableRoastMarshmallow": "Выключить Поджарить Зефирки",
|
||||
"disableThrowFisbee": "Выключить Играть с Фрисби",
|
||||
"disableFindSignal": "Выключить Найти Сигнал",
|
||||
|
||||
"disableMiscCommonTasks": "Выключить Общие Задания",
|
||||
"disableEnterIdCode": "Выключить Ввести Код Доступа",
|
||||
"disableFixWiring": "Выключить Починить Проводку",
|
||||
"disableSwipeCard": "Выключить Провести Картой",
|
||||
|
||||
"disableMiscShortTasks": "Выключить Короткие Задания",
|
||||
"disableAssembleArtifact": "Выключить Собрать Артефакт",
|
||||
"disableChartCourse": "Выключить Выровнять Курс",
|
||||
"disableCleanO2Filter": "Выключить Очистить Фильтр O2",
|
||||
"disableCleanVent": "Выключить Прочистить Люк",
|
||||
"disableMonitorMushroom": "Выключить Наблюдать За Грибом",
|
||||
"disableMonitorTree": "Выключить Проверить Дерево",
|
||||
"disablePrimeShields": "Выключить Запустить Щиты",
|
||||
"disableRecordTemperature": "Выключить Записать Температуру",
|
||||
"disableStabilizeSteering": "Выключить Выровнять Курс",
|
||||
"disableStoreArtifacts": "Выключить Сложить Артефакты",
|
||||
"disableUnlockManifolds": "Выключить Открыть Коллекторы",
|
||||
|
||||
"disableMiscLongTasks": "Выключить Длинные Задания",
|
||||
"disableAlignEngineOutput": "Выключить Выровнять Отдачу Моторов",
|
||||
"disableClearAsteroids": "Выключить Разрушить Астероиды",
|
||||
"disableEmptyChute": "Выключить Очистить Мусоросборник",
|
||||
"disableInspectSample": "Выключить Исследовать Образец",
|
||||
"disableReplaceWaterJug": "Выключить Заменить Кулер",
|
||||
"disableStartReactor": "Выключить Запустить Реактор",
|
||||
"disableWaterPlants": "Выключить Полить Растения",
|
||||
|
||||
"disableMiscMixedTasks": "Выключить Смешанные Задания",
|
||||
"disableCalibrateDistributor": "Выключить Откалибровать Распределитель",
|
||||
"disableDivertPower": "Выключить Подать Энергию",
|
||||
"disableEmptyGarbage": "Выключить Выбросить Мусор",
|
||||
"disableFuelEngines": "Выключить Заправить Моторы",
|
||||
"disableSubmitScan": "Выключить Пройти Скан",
|
||||
"disableUploadData": "Выключить Загрузить Данные",
|
||||
|
||||
"allCommandsFull": "<b>ВСЕ КОМАНДЫ:</b>\n\n<b>/help</b>\nПоказать это сообщение.\n<b>/aur, /socials</b>\nОтправляет ссылки Among Us Revamped.\n\n<b>/r, /gm</b>\nОтправляет описание текущего режима или списка способностей.\n<b>/l, /lastgame</b>\nОтправляет информацию о последнем победителе.\n\n<b>/0kc, /0killcooldown</b>\nОтправляет описание режима 0 Перезарядки Убийств.\n<b>/sns, /shiftandseek</b>\nОтправляет описание режима Клона.\n<b>/sp, /speedrun</b>\nОтправляет описание режима Спидрана.\n\n/<b>kick, /ban</b>\nКикает или банит игрока по нику.\n<b>/ckick, /cban</b>\nКикает или банит игрока по цвету.\n\n<b>/vip /moderator /admin</b>\nДобавляет игрока как VIP, Модератора или Админа.\n<b>/removevip, /removemoderator, /removeadmin</b>\nУбирает VIP, Модератора или Админа у игрока.\n\n<b>/eg, /endgame</b>\nЗаканчивает текущую игру.\n<b>/em, /endmeeting</b>\nЗаканчивает текущее собрание.\n<b>/s, /start</b>\nНачинает отсчет для старта.\n\n<b>/t {template}</b>\nОтправляет шаблон из AUR-DATA/templates.txt.\n\n<b>/col, /color, /colour</b>\nМеняет ваш цвет, может быть использована чтобы обойти ограничения по цветам.",
|
||||
|
||||
"translationReloaded": "Ваш языковой файл был успешно сброшен.\nЧтобы применить все изменения, перезапустите вашу игру.",
|
||||
|
||||
"templateWelcome": "# В этом файле вы можете создавать шаблоны, которые могут служить как простая альтернатива копировать-вставить.\n# Чтобы создать шаблон, напишите новую линию с таким же форматированием как и у тестового шаблона снизу.\n# Шаблоны не могут быть длиннее чем 120 символов и не могут содержать специальные символы. В противном вас будет кикать.\n\ntest: это пример шаблона. Напишите '/t test' чтобы увидеть его.\n\nwelcome: Добро Пожаловать! Это Лобби Использует Among Us Revamped {ModVersion} от MV. Наслаждайтесь!",
|
||||
"moderatorWelcome": "# В этом файле вы можете добавлять Модераторов по Коду друга.\n# Если вы добавите кого то, они получат фиолетовый ник в игре.\n# Перейдите в 'Системные Настройки' в игре чтобы изменить полномочия Модераторов. Снизу приведен пример Кода друга.\n\nfriendcode#0000",
|
||||
"vipWelcome": "# В этом файле вы можете добавлять VIP по Коду друга.\n# Если вы добавите кого то, они получат желтый ник в игре.\n# Перейдите в 'Системные Настройки' в игре чтобы изменить полномочия VIP. Снизу приведен пример Кода друга.\n\nfriendcode#0000\n",
|
||||
"adminWelcome": "# В этом файле вы можете добавлять Админов по Коду друга.\n# Если вы добавите кого то, они получат красный ник в игре.\n# Перейдите в 'Системные Настройки' в игре чтобы изменить полномочия Админов. Снизу приведен пример Кода друга.\n\nfriendcode#0000\n",
|
||||
"banlistWelcome": "# В этом файле вы можете банить игроков из ваших лобби по Коду друга.\n# Если вы забаните кого-то в игре они автоматически добавятся в этот файл. Снизу приведен пример Кода друга.\n\nfriendcode#0000\n",
|
||||
"banwordWelcome": "# В этом файле вы можете создавать запрещенные слова, автоматически кикает тех кто сказали эти слова которые написаны здесь.\n# Обратите внимание чтобы разделять слова надо при помощи новых строк.",
|
||||
"bannameWelcome": "# В этом файле вы можете создавать запрещенные имена, автоматически кикает тех кто использует имена которые написаны здесь.\n# Обратите внимание чтобы разделять имена надо при помощи новых строк.",
|
||||
"languageWelcome": "# In this file you can set your Among Us Revamped language.\n# To set the language, type one of the supported languages in a new line. The default is English.\n# Supported languages: English, Spanish, SimplifiedChinese, Italian\n\nEnglish",
|
||||
|
||||
"noGameEndWarning": "ВНИМАНИЕ: Настройка 'Без Конца Игры' Включена",
|
||||
|
||||
"tooLongTemplate": "Ваш шаблон длиннее чем 120 символов и будет вас кик если он будет отправлен. Пожалуйста уменьшите длину.",
|
||||
|
||||
"vipAdd": "Успешно добавлен {0} как VIP.",
|
||||
"moderatorAdd": "Успешно добавлен {0} как Модератор.",
|
||||
"adminAdd": "Успешно добавлен {0} as Админ.",
|
||||
"vipRemove": "Успешно убран VIP у {0}.",
|
||||
"moderatorRemove": "Успешно убран Модератор у {0}.",
|
||||
"adminRemove": "Успешно убран Админ у {0}.",
|
||||
"permFail": "Не удалось найти игрока '{0}'. Убедитесь что вы написали ник корректно",
|
||||
|
||||
"helpDesc": "Показывает все Команды и что они делают.",
|
||||
"snsDesc": "Отправляет описание режима Клона.",
|
||||
"0kcDesc": "Отправляет описание режима 0 Перезарядки Убийств.",
|
||||
"SrDesc": "Отправляет описание режима Спидрана.",
|
||||
"egDesc": "Заканчивает текущую игру.",
|
||||
"emDesc": "Заканчивает текущее собрание.",
|
||||
"aurDesc": "Отправляет Ссылки Us Revamped.",
|
||||
"sDesc": "Начинает отсчет для старта.",
|
||||
"rDesc": "/r Отправляет включеные способности или текущий режим.",
|
||||
"rolesDesc": "Отправляет обзор всех способностей/режимов.",
|
||||
"kickDesc": "Кикает игрока по нику.",
|
||||
"ckickDesc": "Кикает игрока по цвету.",
|
||||
"banDesc": "Банит игрока по нику.",
|
||||
"cbanDesc": "Банит игрока по цвету.",
|
||||
"dumpDesc": "Копирует LogOutput в отдельный файл.",
|
||||
"colDesc": "Меняет ваш цвет.",
|
||||
"reloadDesc": "Перезагружает языковой файл.",
|
||||
"vipDesc": "Добавляет игрока как VIP.",
|
||||
"moderatorDesc": "Добавляет игрока как Модератор.",
|
||||
"adminDesc": "Добавляет игрока как Админ.",
|
||||
"cremoveVipDesc": "Убирает VIP у игрока.",
|
||||
"removeModeratorDesc": "Убирает Модератора у игрока.",
|
||||
"removeAdminDesc": "Убирает Админа у игрока.",
|
||||
"lastgameDesc": "Отправляет информацию о последней игре.",
|
||||
"templateDesc": "Отправляет определённый шаблон из AUR-DATA/templates.txt.",
|
||||
|
||||
"banWordKick": "{0} был кикнут потому что они отправили запрещенное слово {1} раз(а)",
|
||||
|
||||
"pluginWarning": "<color=red><size=5><b>ВНИМАНИЕ:</color></b></size>\n<size=3><b>У вас обнаружено 2 или более активных плагинов.</size></b>\nAmong Us Revamped не совместим с большинством модов.\nЕсли у вас будут баги, они наверняка происходят из-за несовместимости.",
|
||||
|
||||
"systemSettings": "Системные Настройки",
|
||||
"gameplaySettings": "Игровые Настройки",
|
||||
"gamemodeSettings": "Настройки Режима",
|
||||
|
||||
"systemSettingsDesc": "Системные Настройки Для Повышения Комфорта и Упрощения Тестирования.",
|
||||
"gameplaySettingsDesc": "Игровые Настройки Для Улучшения Игрового Процесса.",
|
||||
"gamemodeSettingsDesc": "Дополнительные Настройки Для Определённых Игровых Режимов.",
|
||||
|
||||
"everyone": "Все",
|
||||
"vipAndAbove": "<color=yellow>VIP</color> И Выше",
|
||||
"moderatorAndAbove": "<color=purple>Модератор</color> И Выше",
|
||||
"admin": "<color=red>Админ</color>",
|
||||
"onlyYou": "Только Вы"
|
||||
}
|
||||
@@ -0,0 +1,286 @@
|
||||
{
|
||||
"LanguageID": "2",
|
||||
|
||||
"gameMaster": "游戏大师(Game Master)",
|
||||
"showFPS": "显示帧率 (FPS)",
|
||||
"autoStart": "自动开始",
|
||||
"enableDarkTheme": "启用深色主题",
|
||||
"enableLobbyMusic": "大厅音乐",
|
||||
"disableInfoWhenDead": "死亡后隐藏信息",
|
||||
"disableCommandHelper": "禁用命令助手",
|
||||
"disableCompatibilityWarning": "关闭兼容性警告",
|
||||
|
||||
"gameMasterWarning": "您现在将进入观战模式,直到关闭游戏主管。警告:启用此设置后,可能无法发送技能消息,且身份分配可能不准确。",
|
||||
|
||||
"cancelStartCountdown": "已取消开始倒计时",
|
||||
|
||||
"invalidFriendCodeKick": "{0} 因好友代码无效被踢出房间",
|
||||
"invalidFriendCodeBan": "{0} 因好友代码无效被封禁",
|
||||
"language": "语言 (需要重启)",
|
||||
"gamemode": "游戏模式",
|
||||
"tabGroupMain": "管理设置",
|
||||
"kickLowLevelPlayer": "踢出等级低于此级别的玩家",
|
||||
"tempBanLowLevelPlayer": "改为封禁而非踢出",
|
||||
"dontKickLevelOnes": "不要因房间故障踢出 1 级玩家",
|
||||
"kickInvalidFriendCodes": "踢出无效 (空) 好友代码",
|
||||
"tempBanInvalidFriendCodes": "改为封禁而非踢出",
|
||||
"deniedWordsToKick": "发送违禁词时踢出玩家",
|
||||
"moderatorCanUseCommand": "管理人员可以使用命令",
|
||||
"autoKickStart": "自动踢出发送“Start”的玩家",
|
||||
"autoKickStartAsBan": "改为封禁而非踢出",
|
||||
"autoKickStartTimes": "踢出所需的“Start”消息次数",
|
||||
"autoKickStartStrength": "严格检测模式",
|
||||
"tabGroupAutomation": "自动化",
|
||||
"autoSendGameInfo": "自动发送获胜者信息",
|
||||
"autoRejoinLobby": "自动重新加入大厅",
|
||||
"autoStartTimer": "自动开始倒计时",
|
||||
"waitAutoStart": "自动开始等待时间",
|
||||
"playerAutoStart": "自动开始所需人数",
|
||||
"enableJoinMessages": "启用欢迎消息",
|
||||
"messagePerPlayerNum": "每达到指定加入人数发送消息",
|
||||
"tabGroupMisc": "杂项设置",
|
||||
"startCountdown": "默认开始倒计时",
|
||||
"colorCommandLevel": "谁可以使用颜色命令",
|
||||
"allowFortegreen": "允许军绿色",
|
||||
"noGameEnd": "游戏永不结束",
|
||||
|
||||
"tabGroupAccess": "权限等级",
|
||||
"slashColorCmd": "谁可以使用 /color",
|
||||
"slashRolesAndGamemodeCmd": "谁可以使用 /r 和模板",
|
||||
"slashLastGameCmd": "谁可以使用 /l 和 /aur",
|
||||
"slashKickCmd": "谁可以使用 /kick 和 /ckick",
|
||||
"slashBanCmd": "谁可以使用 /ban 和 /cban",
|
||||
"slashEndMeetingCmd": "谁可以使用 /endmeeting",
|
||||
"slashStartAndEndGameCmd": "谁可以使用 /startgame 和 /endgame",
|
||||
|
||||
"tabGroupCrewmate": "船员职业",
|
||||
"tabGroupNeutral": "中立职业",
|
||||
"tabGroupImpostor": "内鬼职业",
|
||||
|
||||
"tabGroupStandard": "标准模式",
|
||||
|
||||
"tabGroupHNS": "躲猫猫模式 (Hide and Seek)",
|
||||
"numSeekers": "搜寻者数量",
|
||||
"tabGroup0Kcd": "0秒击杀冷却 (0 Kill Cooldown)",
|
||||
"noKcdSettingsOverride": "自动更新设置",
|
||||
"tabGroupSNS": "变形与搜寻 (Shift and Seek)",
|
||||
"snsChatInGame": "游戏进行中允许聊天 (实验性)",
|
||||
"snsSettingsOverride": "自动更新设置",
|
||||
"cantKillTime": "空刀/失误后,无法击杀时长",
|
||||
"misfiresToSuicide": "失误达到指定次数后自杀",
|
||||
"crewAutoWinsGameAfter": "船员在此时间后自动获胜",
|
||||
"snsDisableSabotage": "禁用 SnS 紧急破坏",
|
||||
"snsDisableReactor": "禁用反应堆破坏",
|
||||
"snsDisableOxygen": "禁用氧气破坏",
|
||||
"snsDisableLights": "禁用照明破坏",
|
||||
"snsDisableComms": "禁用通讯破坏",
|
||||
"snsDisableHeli": "禁用坠机危机破坏",
|
||||
"snsDisableMushroomMixup": "禁用迷幻蘑菇破坏",
|
||||
"snsDisableCloseDoor": "禁用 SnS 关门破坏",
|
||||
"tabGroupSpeedrun": "速通模式 (Speedrun)",
|
||||
"speedrunSettingsOverride": "自动更新设置",
|
||||
"gameAutoEndsAfter": "游戏在此时间后自动结束",
|
||||
"engineerMode": "全员皆为工程师",
|
||||
|
||||
"tabGroupSabotages": "破坏设置",
|
||||
"deadImpostorsCanSabotage": "死亡内鬼可发动破坏",
|
||||
"disableSabotage": "禁用紧急破坏",
|
||||
"disableReactor": "禁用反应堆破坏",
|
||||
"disableOxygen": "禁用氧气破坏",
|
||||
"disableLights": "禁用照明破坏",
|
||||
"disableComms": "禁用通讯破坏",
|
||||
"disableHeli": "禁用坠机危机破坏",
|
||||
"disableMushroomMixup": "禁用迷幻蘑菇破坏",
|
||||
"disableCloseDoor": "禁用关门破坏",
|
||||
|
||||
"tabGroupGameplayGeneral": "常规游戏性",
|
||||
"disableAnnoyingMeetingCalls": "游戏前30秒禁用召开会议",
|
||||
"disableReport": "禁用报告尸体",
|
||||
"changeDecontaminationTime": "覆盖洗消室时间 (仅限标准模式)",
|
||||
"decontaminationTimeOnMiraHQ": "米拉总部 (Mira HQ) 洗消持续时间",
|
||||
"decontaminationDoorOpenTimeOnMiraHQ": "米拉总部 (Mira HQ) 开门持续时间",
|
||||
"decontaminationTimeOnPolus": "波勒斯 (Polus) 洗消持续时间",
|
||||
"decontaminationDoorOpenTimeOnPolus": "波勒斯 (Polus) 开门持续时间",
|
||||
"disableSporeTrigger": "禁用丛林地图 (The Fungle) 的孢子触发",
|
||||
|
||||
"disableDevices": "禁用设备",
|
||||
"disableSkeldDevices": "禁用飞船 (Skeld) 设备",
|
||||
"disableSkeldAdmin": "禁用飞船 (Skeld) 管理室地图",
|
||||
"disableSkeldCamera": "禁用飞船 (Skeld) 监控摄像头",
|
||||
"disableMiraHQDevices": "禁用米拉总部 (Mira HQ) 设备",
|
||||
"disableMiraHQAdmin": "禁用米拉总部 (Mira HQ) 管理室地图",
|
||||
"disableMiraHQDoorLog": "禁用米拉总部 (Mira HQ) 传感器日志",
|
||||
"disablePolusDevices": "禁用波勒斯 (Polus) 设备",
|
||||
"disablePolusAdmin": "禁用波勒斯 (Polus) 管理室地图",
|
||||
"disablePolusCamera": "禁用波勒斯 (Polus) 监控摄像头",
|
||||
"disablePolusVital": "禁用波勒斯 (Polus) 生命体征表",
|
||||
"disableAirshipDevices": "禁用飞艇 (Airship) 设备",
|
||||
"disableAirshipCockpitAdmin": "禁用飞艇 (Airship) 驾驶舱管理室地图",
|
||||
"disableAirshipRecordsAdmin": "禁用飞艇 (Airship) 记录室管理室地图",
|
||||
"disableAirshipCamera": "禁用飞艇 (Airship) 监控摄像头",
|
||||
"disableAirshipVital": "禁用飞艇 (Airship) 生命体征表",
|
||||
"disableFungleDevices": "禁用丛林 (Fungle) 设备",
|
||||
"disableFungleVital": "禁用丛林 (Fungle) 生命体征表",
|
||||
|
||||
"tabGroupTasks": "任务设置",
|
||||
"allPlayersSameTasks": "所有人拥有相同的任务",
|
||||
"overrideTaskSettings": "禁用任务",
|
||||
"taskPercentNeededToWin": "船员获胜所需的任务完成百分比",
|
||||
|
||||
"disableMiraTasks": "禁用米拉总部 (Mira HQ) 任务",
|
||||
"disableBuyBeverage": "禁用“购买饮料”",
|
||||
"disableMeasureWeather": "禁用“测量天气”",
|
||||
"disableProcessData": "禁用“处理数据”",
|
||||
"disableRunDiagnostics": "禁用“运行诊断”",
|
||||
"disableSortSamples": "禁用“整理样品”",
|
||||
|
||||
"disablePolusTasks": "禁用波勒斯 (Polus) 任务",
|
||||
"disableActivateWeatherNodes": "禁用“激活天气节点”",
|
||||
"disableAlignTelescope": "禁用“校准望远镜”",
|
||||
"disableFillCanisters": "禁用“加注气罐”",
|
||||
"disableInsertKeys": "禁用“插入钥匙”",
|
||||
"disableOpenWaterways": "禁用“打开水路”",
|
||||
"disableRebootWifi": "禁用“重启无线网络”",
|
||||
"disableRepairDrill": "禁用“修理钻机”",
|
||||
"disableScanBoardingPass": "禁用“扫描登机牌”",
|
||||
|
||||
"disableAirshipTasks": "禁用飞艇 (Airship) 任务",
|
||||
"disableCleanToilet": "禁用“清理厕所”",
|
||||
"disableDecontaminate": "禁用“洗消净化”",
|
||||
"disableDevelopPhotos": "禁用“冲洗照片”",
|
||||
"disableDressMannequin": "禁用“给假人穿衣服”",
|
||||
"disableFixShower": "禁用“修理淋浴喷头”",
|
||||
"disableMakeBurger": "禁用“做汉堡”",
|
||||
"disablePickUpTowels": "禁用“捡起毛巾”",
|
||||
"disablePolishRuby": "禁用“打磨红宝石”",
|
||||
"disablePutAwayPistols": "禁用“放回手枪”",
|
||||
"disablePutAwayRifles": "禁用“放回步枪”",
|
||||
"disableRewindTapes": "禁用“倒带”",
|
||||
"disableResetBreaker": "禁用“重置断路器”",
|
||||
"disableSortRecords": "禁用“整理记录”",
|
||||
"disableStartFans": "禁用“启动风扇”",
|
||||
"disableUnlockSafe": "禁用“开保险箱”",
|
||||
|
||||
"disableFungleTasks": "禁用丛林 (Fungle) 任务",
|
||||
"disableBuildSandcastle": "禁用“堆沙堡”",
|
||||
"disableCatchFish": "禁用“钓鱼”",
|
||||
"disableCollectSamples": "禁用“采集样品”",
|
||||
"disableCollectShells": "禁用“收集贝壳”",
|
||||
"disableCollectVegetables": "禁用“采摘蔬菜”",
|
||||
"disableCrankGenerator": "禁用“摇动发电机”",
|
||||
"disableExtractFuel": "禁用“提取燃料”",
|
||||
"disableFixAntenna": "禁用“修理天线”",
|
||||
"disableHelpCritter": "禁用“帮助小动物”",
|
||||
"disableHoistSupplies": "禁用“吊起物资”",
|
||||
"disableLiftWeights": "禁用“举重”",
|
||||
"disableMineOres": "禁用“开采矿石”",
|
||||
"disablePlayVideoGame": "禁用“玩电子游戏”",
|
||||
"disablePolishGem": "禁用“打磨宝石”",
|
||||
"disableReplaceParts": "禁用“更换零件”",
|
||||
"disableRoastMarshmallow": "禁用“烤棉花糖”",
|
||||
"disableThrowFisbee": "禁用“扔飞盘”",
|
||||
"disableFindSignal": "禁用“寻找信号”",
|
||||
|
||||
"disableMiscCommonTasks": "禁用全局常规任务",
|
||||
"disableEnterIdCode": "禁用“输入账号密码”",
|
||||
"disableFixWiring": "禁用“修理电线”",
|
||||
"disableSwipeCard": "禁用“刷卡”",
|
||||
|
||||
"disableMiscShortTasks": "禁用全局短任务",
|
||||
"disableAssembleArtifact": "禁用“组装文物”",
|
||||
"disableChartCourse": "禁用“设定航线”",
|
||||
"disableCleanO2Filter": "禁用“清理氧气过滤网”",
|
||||
"disableCleanVent": "禁用“清理通风口”",
|
||||
"disableMonitorMushroom": "禁用“监控蘑菇”",
|
||||
"disableMonitorTree": "禁用“监控树木”",
|
||||
"disablePrimeShields": "禁用“填装护盾”",
|
||||
"disableRecordTemperature": "禁用“记录温度”",
|
||||
"disableStabilizeSteering": "禁用“稳定转向”",
|
||||
"disableStoreArtifacts": "禁用“存放文物”",
|
||||
"disableUnlockManifolds": "禁用“解锁分流管”",
|
||||
|
||||
"disableMiscLongTasks": "禁用全局长任务",
|
||||
"disableAlignEngineOutput": "禁用“校准引擎输出”",
|
||||
"disableClearAsteroids": "禁用“清理小行星”",
|
||||
"disableEmptyChute": "禁用“清空垃圾通道”",
|
||||
"disableInspectSample": "禁用“检查样品”",
|
||||
"disableReplaceWaterJug": "禁用“更换水桶”",
|
||||
"disableStartReactor": "禁用“启动反应堆”",
|
||||
"disableWaterPlants": "禁用“浇花”",
|
||||
|
||||
"disableMiscMixedTasks": "禁用全局混合任务",
|
||||
"disableCalibrateDistributor": "禁用“校准配电盘”",
|
||||
"disableDivertPower": "禁用“分流电力”",
|
||||
"disableEmptyGarbage": "禁用“倒垃圾”",
|
||||
"disableFuelEngines": "禁用“给引擎加燃料”",
|
||||
"disableSubmitScan": "禁用“提交扫描”",
|
||||
"disableUploadData": "禁用“上传数据”",
|
||||
|
||||
"allCommandsFull": "<b>所有命令:</b>\n\n<b>/help</b>\n显示此帮助信息。\n<b>/aur, /socials</b>\n发送 Among Us Revamped 的社交链接。\n\n<b>/r, /gm</b>\n发送当前模式介绍或技能列表。\n<b>/l, /lastgame</b>\n发送上一局获胜者的信息。\n\n<b>/0kc, /0killcooldown</b>\n发送 0秒击杀冷却 模式介绍。\n<b>/sns, /shiftandseek</b>\n发送 变形与搜寻 模式介绍。\n<b>/sp, /speedrun</b>\n发送 速通 模式介绍。\n\n/<b>kick, /ban</b>\n通过名字踢出或封禁玩家。\n<b>/ckick, /cban</b>\n通过颜色踢出或封禁玩家。\n\n<b>/vip /moderator /admin</b>\n将玩家设为 VIP、管理员(Moderator) 或 超级管理员(Admin)。\n<b>/removevip, /removemoderator, /removeadmin</b>\n移除玩家的 VIP、管理员 或 超级管理员权限。\n\n<b>/eg, /endgame</b>\n结束当前游戏。\n<b>/em, /endmeeting</b>\n结束当前会议。\n<b>/s, /start</b>\n开始游戏开局倒计时。\n\n<b>/t {template}</b>\n发送 AUR-DATA/templates.txt 中的指定模板。\n\n<b>/col, /color, /colour</b>\n设置您的颜色,可用于绕过限制。",
|
||||
|
||||
"translationReloaded": "您的文件已成功重置。\n要应用所有更改,请重启游戏。",
|
||||
|
||||
"templateWelcome": "# 在此文件中,您可以添加模板,以便快捷复制粘贴。\n# 要创建新模板,请另起一行并使用与下方测试模板相同的格式。\n# 请注意,模板长度不能超过 120 个字符,且不能包含特殊字符,否则您会被踢出房间。\n\ntest: 这是一个示例模板。输入 '/t test' 即可查看。\n\nwelcome: 欢迎!本大厅使用的是由 MV 制作的 Among Us Revamped {ModVersion}。祝您玩得开心!",
|
||||
"moderatorWelcome": "# 在此文件中,您可以通过好友代码添加管理员 (Moderator)。\n# 添加后,他们在游戏内的名字将变为紫色。\n# 请前往游戏内的“系统设置”自定义管理员权限。下方为好友代码示例。\n\nfriendcode#0000",
|
||||
"vipWelcome": "# 在此文件中,您可以通过好友代码添加 VIP。\n# 添加后,他们在游戏内的名字将变为黄色。\n# 请前往游戏内的“系统设置”自定义 VIP 权限。下方为好友代码示例。\n\nfriendcode#0000\n",
|
||||
"adminWelcome": "# 在此文件中,您可以通过好友代码添加超级管理员 (Admin)。\n# 添加后,他们在游戏内的名字将变为红色。\n# 请前往游戏内的“系统设置”自定义超级管理员权限。下方为好友代码示例。\n\nfriendcode#0000\n",
|
||||
"banlistWelcome": "# 在此文件中,您可以通过好友代码将玩家从您的大厅中封禁。\n# 在游戏内封禁某人也会自动将其同步到此处。下方为好友代码示例。\n\nfriendcode#0000\n",
|
||||
"banwordWelcome": "# 在此文件中,您可以设置违禁词,任何在游戏内发送此处所列词汇的玩家将被自动踢出。\n# 请务必使用换行来分隔不同的词汇。",
|
||||
"bannameWelcome": "# 在此文件中,您可以设置违禁名字,任何在游戏内使用此处所列名字的玩家将被自动踢出。\n# 请务必使用换行来分隔不同的名字。",
|
||||
|
||||
"noGameEndWarning": "警告:“游戏永不结束”已启用",
|
||||
|
||||
"tooLongTemplate": "您的模板超过了 120 个字符,发送时会导致您被踢出。请缩减长度。",
|
||||
|
||||
"vipAdd": "成功将 {0} 添加为 VIP。",
|
||||
"moderatorAdd": "成功将 {0} 添加为管理员 (Moderator)。",
|
||||
"adminAdd": "成功将 {0} 添加为超级管理员 (Admin)。",
|
||||
"vipRemove": "已成功移除 {0} 的 VIP 权限。",
|
||||
"moderatorRemove": "已成功移除 {0} 的管理员 (Moderator) 权限。",
|
||||
"adminRemove": "已成功移除 {0} 的超级管理员 (Admin) 权限。",
|
||||
"permFail": "找不到用户 '{0}'。请检查拼写是否正确?",
|
||||
|
||||
"helpDesc": "显示所有命令及其功能。",
|
||||
"snsDesc": "发送 变形与搜寻 (Shift and Seek) 游戏模式介绍。",
|
||||
"0kcDesc": "发送 0秒击杀冷却 (0 Kill Cooldown) 游戏模式介绍。",
|
||||
"SrDesc": "发送 速通 (Speedrun) 游戏模式介绍。",
|
||||
"egDesc": "结束当前游戏。",
|
||||
"emDesc": "结束当前会议。",
|
||||
"aurDesc": "发送 Among Us Revamped 社交链接。",
|
||||
"sDesc": "开始游戏倒计时。",
|
||||
"rDesc": "/r 发送活跃技能或当前模式。",
|
||||
"rolesDesc": "发送所有技能/游戏模式总览。",
|
||||
"kickDesc": "通过名字踢出玩家。",
|
||||
"ckickDesc": "通过颜色踢出玩家。",
|
||||
"banDesc": "通过名字封禁玩家。",
|
||||
"cbanDesc": "通过颜色封禁玩家。",
|
||||
"dumpDesc": "将 LogOutput(日志输出)复制到独立文件中。",
|
||||
"colDesc": "设置您的颜色。",
|
||||
"reloadDesc": "重新加载语言文件。",
|
||||
"vipDesc": "将用户添加为 VIP。",
|
||||
"moderatorDesc": "将用户添加为管理员 (Moderator)。",
|
||||
"adminDesc": "将用户添加为超级管理员 (Admin)。",
|
||||
"cremoveVipDesc": "移除用户的 VIP 权限。",
|
||||
"removeModeratorDesc": "移除用户的管理员 (Moderator) 权限。",
|
||||
"removeAdminDesc": "移除用户的超级管理员 (Admin) 权限。",
|
||||
"lastgameDesc": "发送上一局游戏信息。",
|
||||
"templateDesc": "发送 AUR-DATA/templates.txt 中指定的模板。",
|
||||
|
||||
"banWordKick": "{0} 因发送违禁词被踢出,累计次数:{1} 次",
|
||||
|
||||
"pluginWarning": "<color=red><size=5><b>警告:</color></b></size>\n<size=3><b>检测到您启用了 2 个或更多插件。</size></b>\nAmong Us Revamped 与大多数模组不兼容。\n如果遇到 Bug,极有可能是因为冲突所致。",
|
||||
|
||||
"systemSettings": "系统设置",
|
||||
"gameplaySettings": "游戏设置",
|
||||
"gamemodeSettings": "模式设置",
|
||||
|
||||
"systemSettingsDesc": "用于提升舒适度与测试的画质/系统设置。",
|
||||
"gameplaySettingsDesc": "用于改善游戏内体验的设置。",
|
||||
"gamemodeSettingsDesc": "适用于特定游戏模式的情境设置。",
|
||||
|
||||
"everyone": "所有人",
|
||||
"vipAndAbove": "<color=yellow>VIP</color> 及以上",
|
||||
"moderatorAndAbove": "<color=purple>管理员</color> 及以上",
|
||||
"admin": "<color=red>管理员</color>",
|
||||
"onlyYou": "仅自己"
|
||||
}
|
||||
@@ -0,0 +1,257 @@
|
||||
{
|
||||
"LanguageID": "3",
|
||||
"gameMaster": "Maestro del Juego",
|
||||
"showFPS": "Mostrar FPS",
|
||||
"autoStart": "Inicio automático",
|
||||
"enableDarkTheme": "Activar tema oscuro",
|
||||
"enableLobbyMusic": "Música de la sala",
|
||||
"disableInfoWhenDead": "Ocultar información al morir",
|
||||
"disableCommandHelper": "Desactivar ayuda para comandos",
|
||||
"disableCompatibilityWarning": "Desactivar advertencia de compatibilidad",
|
||||
"gameMasterWarning": "Ahora observarás las partidas hasta que se desactive el Maestro del Juego. ADVERTENCIA: No se enviarán mensajes de habilidades y la asignación de roles podría ser inexacta si esta opción está activada.",
|
||||
"cancelStartCountdown": "La cuenta regresiva de inicio fue cancelada",
|
||||
"invalidFriendCodeKick": "{0} fue expulsado por tener un código de amigo no válido",
|
||||
"invalidFriendCodeBan": "{0} fue bloqueado por tener un código de amigo no válido",
|
||||
"language": "Idioma (requiere reiniciar)",
|
||||
"gamemode": "Modo de juego",
|
||||
"tabGroupMain": "Moderación",
|
||||
"kickLowLevelPlayer": "Expulsar jugadores cuyo nivel sea menor que",
|
||||
"tempBanLowLevelPlayer": "Bloquear en lugar de expulsar",
|
||||
"dontKickLevelOnes": "No expulsar jugadores Nv.1 por salas bugueadas",
|
||||
"kickInvalidFriendCodes": "Expulsar códigos de amigo no válidos (vacíos)",
|
||||
"tempBanInvalidFriendCodes": "Bloquear en lugar de expulsar",
|
||||
"deniedWordsToKick": "Palabras prohibidas para expulsar jugadores",
|
||||
"moderatorCanUseCommand": "Los moderadores pueden usar comandos",
|
||||
"autoKickStart": "Expulsar jugadores que digan \"start\"",
|
||||
"autoKickStartAsBan": "Bloquear en lugar de expulsar",
|
||||
"autoKickStartTimes": "Mensajes de \"start\" necesarios para expulsar",
|
||||
"autoKickStartStrength": "Modo de detección estricto",
|
||||
"tabGroupAutomation": "Automatización",
|
||||
"autoSendGameInfo": "Enviar automáticamente información del ganador",
|
||||
"autoRejoinLobby": "Volver automáticamente a la sala",
|
||||
"autoStartTimer": "Cuenta regresiva para inicio automático",
|
||||
"waitAutoStart": "Inicio automático después de",
|
||||
"playerAutoStart": "Jugadores mínimos para inicio automático",
|
||||
"enableJoinMessages": "Activar mensajes de bienvenida",
|
||||
"messagePerPlayerNum": "Mensaje cada X jugadores que entren",
|
||||
"tabGroupMisc": "Varios",
|
||||
"startCountdown": "Cuenta regresiva inicial predeterminada",
|
||||
"colorCommandLevel": "Quién puede usar comandos de color",
|
||||
"allowFortegreen": "Permitir color Fortegreen",
|
||||
"noGameEnd": "Sin fin de partida",
|
||||
"tabGroupAccess": "Niveles de acceso",
|
||||
"slashColorCmd": "Quién puede usar /color",
|
||||
"slashRolesAndGamemodeCmd": "Quién puede usar /r y plantillas",
|
||||
"slashLastGameCmd": "Quién puede usar /l y /aur",
|
||||
"slashKickCmd": "Quién puede usar /kick y /ckick",
|
||||
"slashBanCmd": "Quién puede usar /ban y /cban",
|
||||
"slashEndMeetingCmd": "Quién puede usar /endmeeting",
|
||||
"slashStartAndEndGameCmd": "Quién puede usar /startgame y /endgame",
|
||||
"tabGroupCrewmate": "Roles de tripulante",
|
||||
"tabGroupNeutral": "Roles neutrales",
|
||||
"tabGroupImpostor": "Roles de impostor",
|
||||
"tabGroupStandard": "Estándar",
|
||||
"tabGroupHNS": "Escondite",
|
||||
"numSeekers": "# Buscadores",
|
||||
"tabGroup0Kcd": "0 de enfriamiento para matar",
|
||||
"noKcdSettingsOverride": "Actualizar configuración automáticamente",
|
||||
"tabGroupSNS": "Shift and Seek",
|
||||
"snsChatInGame": "Chat durante la partida (experimental)",
|
||||
"snsSettingsOverride": "Actualizar configuración automáticamente",
|
||||
"cantKillTime": "Después de fallar, no puede matar durante",
|
||||
"misfiresToSuicide": "Suicidarse después de cierta cantidad de fallos",
|
||||
"crewAutoWinsGameAfter": "Los tripulantes ganan automáticamente después de",
|
||||
"snsDisableSabotage": "Desactivar sabotajes críticos de SnS",
|
||||
"snsDisableReactor": "Desactivar sabotaje del reactor",
|
||||
"snsDisableOxygen": "Desactivar sabotaje de O2",
|
||||
"snsDisableLights": "Desactivar sabotaje de luces",
|
||||
"snsDisableComms": "Desactivar sabotaje de comunicaciones",
|
||||
"snsDisableHeli": "Desactivar sabotaje de Crash Course",
|
||||
"snsDisableMushroomMixup": "Desactivar sabotaje de mezcla de hongos",
|
||||
"snsDisableCloseDoor": "Desactivar sabotajes de puertas de SnS",
|
||||
"tabGroupSpeedrun": "Speedrun",
|
||||
"speedrunSettingsOverride": "Actualizar configuración automáticamente",
|
||||
"gameAutoEndsAfter": "La partida termina automáticamente después de",
|
||||
"engineerMode": "Todos son ingenieros",
|
||||
"tabGroupSabotages": "Sabotajes",
|
||||
"deadImpostorsCanSabotage": "Los impostores muertos pueden sabotear",
|
||||
"disableSabotage": "Desactivar sabotajes críticos",
|
||||
"disableReactor": "Desactivar sabotaje del reactor",
|
||||
"disableOxygen": "Desactivar sabotaje de O2",
|
||||
"disableLights": "Desactivar sabotaje de luces",
|
||||
"disableComms": "Desactivar sabotaje de comunicaciones",
|
||||
"disableHeli": "Desactivar sabotaje de Crash Course",
|
||||
"disableMushroomMixup": "Desactivar sabotaje de mezcla de hongos",
|
||||
"disableCloseDoor": "Desactivar sabotajes de puertas",
|
||||
"tabGroupGameplayGeneral": "General",
|
||||
"disableAnnoyingMeetingCalls": "Desactivar reuniones durante los primeros 30 s",
|
||||
"disableReport": "Desactivar reportes de cuerpos",
|
||||
"changeDecontaminationTime": "Cambiar tiempo de descontaminación (solo estándar)",
|
||||
"decontaminationTimeOnMiraHQ": "Duración de descontaminación en Mira HQ",
|
||||
"decontaminationDoorOpenTimeOnMiraHQ": "Duración de apertura de puerta en Mira HQ",
|
||||
"decontaminationTimeOnPolus": "Duración de descontaminación en Polus",
|
||||
"decontaminationDoorOpenTimeOnPolus": "Duración de apertura de puerta en Polus",
|
||||
"disableSporeTrigger": "Desactivar esporas en The Fungle",
|
||||
"disableDevices": "Desactivar dispositivos",
|
||||
"disableSkeldDevices": "Desactivar dispositivos de Skeld",
|
||||
"disableSkeldAdmin": "Desactivar Admin de Skeld",
|
||||
"disableSkeldCamera": "Desactivar cámaras de Skeld",
|
||||
"disableMiraHQDevices": "Desactivar dispositivos de Mira HQ",
|
||||
"disableMiraHQAdmin": "Desactivar Admin de Mira HQ",
|
||||
"disableMiraHQDoorLog": "Desactivar registro de puertas de Mira HQ",
|
||||
"disablePolusDevices": "Desactivar dispositivos de Polus",
|
||||
"disablePolusAdmin": "Desactivar Admin de Polus",
|
||||
"disablePolusCamera": "Desactivar cámaras de Polus",
|
||||
"disablePolusVital": "Desactivar vitales de Polus",
|
||||
"disableAirshipDevices": "Desactivar dispositivos de Airship",
|
||||
"disableAirshipCockpitAdmin": "Desactivar Admin de cabina de Airship",
|
||||
"disableAirshipRecordsAdmin": "Desactivar Admin de archivos de Airship",
|
||||
"disableAirshipCamera": "Desactivar cámaras de Airship",
|
||||
"disableAirshipVital": "Desactivar vitales de Airship",
|
||||
"disableFungleDevices": "Desactivar dispositivos de Fungle",
|
||||
"disableFungleVital": "Desactivar vitales de Fungle",
|
||||
"tabGroupTasks": "Tareas",
|
||||
"allPlayersSameTasks": "Todos tienen las mismas tareas",
|
||||
"overrideTaskSettings": "Desactivar tareas",
|
||||
"taskPercentNeededToWin": "% de tareas completadas para que ganen los tripulantes",
|
||||
"disableMiraTasks": "Desactivar tareas de Mira HQ",
|
||||
"disableBuyBeverage": "Desactivar Tarea Comprar Bebida",
|
||||
"disableMeasureWeather": "Desactivar Tarea Medir Clima",
|
||||
"disableProcessData": "Desactivar Tarea Procesar Datos",
|
||||
"disableRunDiagnostics": "Desactivar Tarea Realizar Diagnóstico",
|
||||
"disableSortSamples": "Desactivar Tarea Ordenar Muestras",
|
||||
"disablePolusTasks": "Desactivar tareas de Polus",
|
||||
"disableActivateWeatherNodes": "Desactivar Tarea Reparar Nodo de Clima",
|
||||
"disableAlignTelescope": "Desactivar Tarea Alinear Telescopio",
|
||||
"disableFillCanisters": "Desactivar Tarea Llenar Bombonas",
|
||||
"disableInsertKeys": "Desactivar Tarea Insertar Llaves",
|
||||
"disableOpenWaterways": "Desactivar Tarea Abrir Canales de Agua",
|
||||
"disableRebootWifi": "Desactivar Tarea Reiniciar Wi-Fi",
|
||||
"disableRepairDrill": "Desactivar Tarea Reparar Taladro",
|
||||
"disableScanBoardingPass": "Desactivar Tarea Escanear Tarjeta de Embarque",
|
||||
"disableAirshipTasks": "Desactivar tareas de Airship",
|
||||
"disableCleanToilet": "Desactivar Tarea Limpiar Inodoro",
|
||||
"disableDecontaminate": "Desactivar Tarea Descontaminar",
|
||||
"disableDevelopPhotos": "Desactivar Tarea Revelar Fotos",
|
||||
"disableDressMannequin": "Desactivar Tarea Vestir Maniquí",
|
||||
"disableFixShower": "Desactivar Tarea Arreglar Duchas",
|
||||
"disableMakeBurger": "Desactivar Tarea Preparar Hamburguesa",
|
||||
"disablePickUpTowels": "Desactivar Tarea Recoger Toallas",
|
||||
"disablePolishRuby": "Desactivar Tarea Pulir Rubí",
|
||||
"disablePutAwayPistols": "Desactivar Tarea Guardar Pistolas",
|
||||
"disablePutAwayRifles": "Desactivar Tarea Guardar Rifles",
|
||||
"disableRewindTapes": "Desactivar Tarea Rebobinar Cintas",
|
||||
"disableResetBreaker": "Desactivar Tarea Reiniciar Interruptores",
|
||||
"disableSortRecords": "Desactivar Tarea Ordenar Registros",
|
||||
"disableStartFans": "Desactivar Tarea Encender Ventiladores",
|
||||
"disableUnlockSafe": "Desactivar Tarea Abrir Caja Fuerte",
|
||||
"disableFungleTasks": "Desactivar tareas de Fungle",
|
||||
"disableBuildSandcastle": "Desactivar Construir Castillo de Arena",
|
||||
"disableCatchFish": "Desactivar Atrapar Peces",
|
||||
"disableCollectSamples": "Desactivar Recolectar Muestras",
|
||||
"disableCollectShells": "Desactivar Recolectar Caracoles",
|
||||
"disableCollectVegetables": "Desactivar Recolectar Vegetales",
|
||||
"disableCrankGenerator": "Desactivar Activar Generador",
|
||||
"disableExtractFuel": "Desactivar Extraer Combustible",
|
||||
"disableFixAntenna": "Desactivar Arreglar Antena",
|
||||
"disableHelpCritter": "Desactivar Ayudar a la Criatura",
|
||||
"disableHoistSupplies": "Desactivar Llevar Suministros",
|
||||
"disableLiftWeights": "Desactivar Levantar Pesas",
|
||||
"disableMineOres": "Desactivar Extraer Minerales",
|
||||
"disablePlayVideoGame": "Desactivar Jugar Videojuegos",
|
||||
"disablePolishGem": "Desactivar Pulir Gema",
|
||||
"disableReplaceParts": "Desactivar Reemplazar Partes",
|
||||
"disableRoastMarshmallow": "Desactivar Asar Malvavisco",
|
||||
"disableThrowFisbee": "Desactivar Lanzar Frisbee",
|
||||
"disableFindSignal": "Desactivar Encontrar Señal",
|
||||
"disableMiscCommonTasks": "Desactivar tareas comunes globales",
|
||||
"disableEnterIdCode": "Desactivar Tarea Introducir ID",
|
||||
"disableFixWiring": "Desactivar Tarea Arreglar Cableado",
|
||||
"disableSwipeCard": "Desactivar Tarea Pasar Tarjeta",
|
||||
"disableMiscShortTasks": "Desactivar tareas cortas globales",
|
||||
"disableAssembleArtifact": "Desactivar Tarea Montar Artefacto",
|
||||
"disableChartCourse": "Desactivar Tarea Trazar Ruta",
|
||||
"disableCleanO2Filter": "Desactivar Tarea Limpiar Filtro de O2",
|
||||
"disableCleanVent": "Desactivar Tarea Limpiar Ventila",
|
||||
"disableMonitorMushroom": "Desactivar monitorear hongo",
|
||||
"disableMonitorTree": "Desactivar Tarea Monitorizar Árbol",
|
||||
"disablePrimeShields": "Desactivar Tarea Preparar Escudos",
|
||||
"disableRecordTemperature": "Desactivar Tarea Registrar Temperatura",
|
||||
"disableStabilizeSteering": "Desactivar Tarea Estabilizar Dirección",
|
||||
"disableStoreArtifacts": "Desactivar Tarea Almacenar Artefactos",
|
||||
"disableUnlockManifolds": "Desactivar Tarea Desbloquear Colectores",
|
||||
"disableMiscLongTasks": "Desactivar tareas largas globales",
|
||||
"disableAlignEngineOutput": "Desactivar Tarea Alinear la Salida del Motor",
|
||||
"disableClearAsteroids": "Desactivar Tarea Destruir Asteroides",
|
||||
"disableEmptyChute": "Desactivar Tarea Vaciar Contenedor",
|
||||
"disableInspectSample": "Desactivar Tarea Examinar Muestras",
|
||||
"disableReplaceWaterJug": "Desactivar Tarea Reemplazar Bidón de Agua",
|
||||
"disableStartReactor": "Desactivar Tarea Arrancar Reactor",
|
||||
"disableWaterPlants": "Desactivar Tarea Regar Plantas",
|
||||
"disableMiscMixedTasks": "Desactivar tareas mixtas globales",
|
||||
"disableCalibrateDistributor": "Desactivar Tarea Calibrar Distribuidor",
|
||||
"disableDivertPower": "Desactivar Tarea Desviar Energía",
|
||||
"disableEmptyGarbage": "Desactivar Tarea Vaciar Basurero",
|
||||
"disableFuelEngines": "Desactivar Tarea Recargar Motores",
|
||||
"disableSubmitScan": "Desactivar Tarea Enviar Escaneo",
|
||||
"disableUploadData": "Desactivar Tarea Subir Datos",
|
||||
"allCommandsFull": "<b>TODOS LOS COMANDOS:</b>\n\n<b>/help</b>\nMuestra este mensaje.\n<b>/aur, /socials</b>\nEnviar los enlaces sociales de Among Us Revamped.\n\n<b>/r, /gm</b>\nEnviar la descripción del modo actual o la lista de habilidades.\n<b>/l, /lastgame</b>\nEnviar la información del ganador anterior.\n\n<b>/0kc, /0killcooldown</b>\nEnviar la descripción del modo 0 de enfriamiento para matar.\n<b>/sns, /shiftandseek</b>\nEnviar la descripción del modo Shift and Seek.\n<b>/sp, /speedrun</b>\nEnviar la descripción del modo Speedrun.\n\n/<b>kick, /ban</b>\nExpulsa o bloquea a un jugador por nombre.\n<b>/ckick, /cban</b>\nExpulsa o bloquea a un jugador por color.\n\n<b>/vip /moderator /admin</b>\nAgrega a un jugador como VIP, moderador o administrador.\n<b>/removevip, /removemoderator, /removeadmin</b>\nElimina VIP, moderador o administrador de un jugador.\n\n<b>/eg, /endgame</b>\nTermina la partida actual.\n<b>/em, /endmeeting</b>\nTermina la reunión actual.\n<b>/s, /start</b>\nInicia la cuenta regresiva de la partida.\n\n<b>/t {template}</b>\nEnviar una plantilla de AUR-DATA/templates.txt.\n\n<b>/col, /color, /colour</b>\nCambia tu color; puede usarse para evitar límites.",
|
||||
"translationReloaded": "Tu archivo se reinició correctamente.\nPara aplicar todos los cambios, reinicia el juego.",
|
||||
"templateWelcome": "# En este archivo puedes agregar plantillas, que sirven como alternativas fáciles de copiar y pegar.\n# Para crear una plantilla, escribe una nueva línea con el mismo formato que la plantilla de prueba de abajo.\n# Ten en cuenta que las plantillas no pueden tener más de 120 caracteres ni contener caracteres especiales. Si los tienen, te expulsarán.\n\ntest: esta es una plantilla de ejemplo. Escribe '/t test' para verla.\n\nwelcome: ¡Bienvenido! Esta sala usa Among Us Revamped {ModVersion} por MV. ¡Diviértete!",
|
||||
"moderatorWelcome": "# En este archivo puedes agregar moderadores por código de amigo.\n# Si agregas a alguien, tendrá un nombre morado dentro del juego.\n# Ve a \"Configuración del sistema\" dentro del juego para personalizar los permisos de moderador. Abajo hay un ejemplo de código de amigo.\n\nfriendcode#0000",
|
||||
"vipWelcome": "# En este archivo puedes agregar VIPs por código de amigo.\n# Si agregas a alguien, tendrá un nombre amarillo dentro del juego.\n# Ve a \"Configuración del sistema\" dentro del juego para personalizar los permisos de VIP. Abajo hay un ejemplo de código de amigo.\n\nfriendcode#0000\n",
|
||||
"adminWelcome": "# En este archivo puedes agregar administradores por código de amigo.\n# Si agregas a alguien, tendrá un nombre rojo dentro del juego.\n# Ve a \"Configuración del sistema\" dentro del juego para personalizar los permisos de administrador. Abajo hay un ejemplo de código de amigo.\n\nfriendcode#0000\n",
|
||||
"banlistWelcome": "# En este archivo puedes bloquear a jugadores en tu sala por código de amigo.\n# Bloquear a alguien dentro del juego también lo agregará aquí automáticamente. Abajo hay un ejemplo de código de amigo.\n\nfriendcode#0000\n",
|
||||
"banwordWelcome": "# En este archivo puedes establecer palabras prohibidas para expulsar automáticamente a cualquiera que las envíe dentro del juego.\n# Asegúrate de separar las palabras usando líneas nuevas.",
|
||||
"bannameWelcome": "# En este archivo puedes establecer nombres prohibidos para expulsar automáticamente a cualquiera que los use dentro del juego.\n# Asegúrate de separar los nombres usando líneas nuevas.",
|
||||
"noGameEndWarning": "ADVERTENCIA: Sin fin de partida está activado",
|
||||
"tooLongTemplate": "Tu plantilla tiene más de 120 caracteres y te expulsaría al enviarla. Reduce su longitud.",
|
||||
"vipAdd": "Se agregó correctamente a {0} como VIP.",
|
||||
"moderatorAdd": "Se agregó correctamente a {0} como moderador.",
|
||||
"adminAdd": "Se agregó correctamente a {0} como administrador.",
|
||||
"vipRemove": "Se eliminó correctamente el VIP de {0}.",
|
||||
"moderatorRemove": "Se eliminó correctamente el moderador de {0}.",
|
||||
"adminRemove": "Se eliminó correctamente el administrador de {0}.",
|
||||
"permFail": "No se pudo encontrar al usuario '{0}'. ¿Lo escribiste correctamente?",
|
||||
"helpDesc": "Muestra todos los comandos y lo que hacen.",
|
||||
"snsDesc": "Enviar la descripción del modo de juego Shift and Seek.",
|
||||
"0kcDesc": "Enviar la descripción del modo de juego 0 de enfriamiento para matar.",
|
||||
"SrDesc": "Enviar la descripción del modo de juego Speedrun.",
|
||||
"egDesc": "Termina la partida actual.",
|
||||
"emDesc": "Termina la reunión actual.",
|
||||
"aurDesc": "Envía los enlaces sociales de Among Us Revamped.",
|
||||
"sDesc": "Inicia la cuenta regresiva de la partida.",
|
||||
"rDesc": "/r envía las habilidades activas o el modo de juego actual.",
|
||||
"rolesDesc": "Enviar el resumen de todas las habilidades/modo de juego.",
|
||||
"kickDesc": "Expulsa a un jugador por nombre.",
|
||||
"ckickDesc": "Expulsa a un jugador por color.",
|
||||
"banDesc": "Bloquea a un jugador por nombre.",
|
||||
"cbanDesc": "Bloquea a un jugador por color.",
|
||||
"dumpDesc": "Copia LogOutput en un archivo separado.",
|
||||
"colDesc": "Cambia tu color.",
|
||||
"reloadDesc": "Recarga el archivo de idioma.",
|
||||
"vipDesc": "Agrega al usuario como VIP.",
|
||||
"moderatorDesc": "Agrega al usuario como moderador.",
|
||||
"adminDesc": "Agrega al usuario como administrador.",
|
||||
"cremoveVipDesc": "Elimina VIP del usuario.",
|
||||
"removeModeratorDesc": "Elimina moderador del usuario.",
|
||||
"removeAdminDesc": "Elimina administrador del usuario.",
|
||||
"lastgameDesc": "Enviar información de la última partida.",
|
||||
"templateDesc": "Enviar una plantilla especificada de AUR-DATA/templates.txt.",
|
||||
"banWordKick": "{0} fue expulsado porque envió una palabra prohibida {1} veces",
|
||||
"pluginWarning": "<color=red><size=5><b>ADVERTENCIA:</color></b></size>\n<size=3><b>Se han detectado 2 o más plugins.</size></b>\nAmong Us Revamped no es compatible con la mayoría de mods.\nSi encuentras errores, probablemente se deban a incompatibilidad.",
|
||||
|
||||
"systemSettings": "Configuración del sistema",
|
||||
"gameplaySettings": "Configuración de la partida",
|
||||
"gamemodeSettings": "Configuración del modo de juego",
|
||||
|
||||
"systemSettingsDesc": "Ajustes de calidad para mejorar la comodidad y facilitar las pruebas.",
|
||||
"gameplaySettingsDesc": "Ajustes de la partida para mejorar la experiencia de juego.",
|
||||
"gamemodeSettingsDesc": "Ajustes específicos para determinados modos de juego.",
|
||||
|
||||
"everyone": "Todos",
|
||||
"vipAndAbove": "<color=yellow>VIP</color> o superior",
|
||||
"moderatorAndAbove": "<color=purple>Moderador</color> o superior",
|
||||
"admin": "<color=red>Administrador</color>",
|
||||
"onlyYou": "Solo tú"
|
||||
}
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
var target = Argument("target", "Build");
|
||||
|
||||
var workflow = BuildSystem.GitHubActions.Environment.Workflow;
|
||||
var buildId = workflow.RunNumber;
|
||||
var tag = workflow.RefType == GitHubActionsRefType.Tag ? workflow.RefName : null;
|
||||
|
||||
Task("Build")
|
||||
.Does(() =>
|
||||
{
|
||||
var settings = new DotNetBuildSettings
|
||||
{
|
||||
Configuration = "Release",
|
||||
MSBuildSettings = new DotNetMSBuildSettings()
|
||||
};
|
||||
|
||||
if (tag != null)
|
||||
{
|
||||
settings.MSBuildSettings.Version = tag;
|
||||
}
|
||||
else if (buildId != 0)
|
||||
{
|
||||
settings.MSBuildSettings.VersionSuffix = "ci." + buildId;
|
||||
}
|
||||
|
||||
DotNetBuild(".", settings);
|
||||
});
|
||||
|
||||
RunTarget(target);
|
||||
Reference in new issue
Block a user