Start working on Custom Team Assignment

This commit is contained in:
Gurge44 committed 2024-03-27 16:13:47 +01:00
1 parent 8da90a828a
commit 7357debdd1
18 files changed
+1430 -386

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
<Application x:Class="CustomTeamAssigner.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CustomTeamAssigner"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>
+14
View File
@@ -0,0 +1,14 @@
using System.Configuration;
using System.Data;
using System.Windows;
namespace CustomTeamAssigner
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}
+10
View File
@@ -0,0 +1,10 @@
using System.Windows;
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]
+388
View File
@@ -0,0 +1,388 @@
namespace EHR;
public enum CustomRoles
{
//Default
Crewmate = 0,
//Impostors (Vanilla)
Impostor,
Shapeshifter,
// Vanilla Remakes
ImpostorTOHE,
ShapeshifterTOHE,
//Impostors
Hacker, // Anonymous
AntiAdminer,
Sans, // Arrogance
Bard,
Blackmailer,
Bomber,
BountyHunter,
OverKiller, // Butcher
Camouflager,
Capitalism,
Cantankerous,
Changeling,
Chronomancer,
Cleaner,
Commander,
EvilDiviner, // Consigliere
Consort,
Councillor,
Crewpostor,
CursedWolf,
Deathpact,
Devourer,
Disperser,
Duellist,
Dazzler,
Escapee,
Eraser,
EvilGuesser,
EvilTracker,
FireWorks,
Freezer,
Gambler,
Gangster,
Godfather,
Greedier,
Hangman,
Hitman,
Inhibitor,
Kamikaze,
Kidnapper,
Minimalism, // Killing Machine
BallLightning, // Lightning
Librarian,
Lurker,
Mafioso,
Mastermind,
Mafia, // Nemesis
SerialKiller, // Mercenary
Miner,
Morphling,
Assassin, // Ninja
Nuker,
Nullifier,
Parasite,
Penguin,
Puppeteer,
QuickShooter,
Refugee,
RiftMaker,
Saboteur,
Sapper,
Scavenger,
Silencer,
Sniper,
ImperiusCurse, // Soul Catcher
Swapster,
Swiftclaw,
Swooper,
Stealth,
TimeThief,
BoobyTrap, // Trapster
Trickster,
Twister,
Underdog,
Undertaker,
Vampire,
Vindicator,
Visionary,
Warlock,
Wildling,
Witch,
YinYanger,
Zombie,
//Crewmates (Vanilla)
Engineer,
GuardianAngel,
Scientist,
// Vanilla Remakes
CrewmateTOHE,
EngineerTOHE,
GuardianAngelTOHE,
ScientistTOHE,
// Crewmate
Addict,
Aid,
Alchemist,
Altruist,
Analyzer,
Autocrat,
Beacon,
Benefactor,
Bodyguard,
CameraMan,
CyberStar, // Celebrity
Chameleon,
Cleanser,
Convener,
CopyCat,
Bloodhound, // Coroner
Crusader,
Demolitionist,
Deputy,
Detective,
Detour,
Dictator,
Doctor,
DonutDelivery,
Doormaster,
DovesOfNeace,
Drainer,
Druid,
Electric,
Enigma,
Escort,
Express,
Farseer,
Divinator, // Fortune Teller
Gaulois,
Grenadier,
GuessManagerRole,
Guardian,
Ignitor,
Insight,
ParityCop, // Inspector
Jailor,
Judge,
Needy, // Lazy Guy
Lighter,
Lookout,
Luckey,
Markseeker,
Marshall,
Mathematician,
Mayor,
SabotageMaster, // Mechanic
Medic,
Mediumshiper,
Merchant,
Monitor,
Mole,
Monarch,
Mortician,
NiceEraser,
NiceGuesser,
NiceHacker,
NiceSwapper,
Nightmare,
Observer,
Oracle,
Paranoia,
Perceiver,
Philantropist,
Psychic,
Rabbit,
Randomizer,
Ricochet,
Sentinel,
SecurityGuard,
Sheriff,
Shiftguard,
Snitch,
Spiritualist,
Speedrunner,
SpeedBooster,
Spy,
SuperStar,
TaskManager,
Tether,
TimeManager,
TimeMaster,
Tornado,
Tracker,
Transmitter,
Transporter,
Tracefinder,
Tunneler,
Ventguard,
Veteran,
SwordsMan, // Vigilante
Witness,
//Neutrals
Agitater,
Amnesiac,
Arsonist,
Bandit,
BloodKnight,
Bubble,
Collector,
Deathknight,
Gamer, // Demon
Doppelganger,
Doomsayer,
Eclipse,
Enderman,
Executioner,
Totocalcio, // Follower
Glitch,
God,
FFF, // Hater
HeadHunter,
HexMaster,
Hookshot,
Imitator,
Impartial,
Innocent,
Jackal,
Jester,
Jinx,
Juggernaut,
Konan,
Lawyer,
Magician,
Mario,
Maverick,
Medusa,
Mycologist,
Necromancer,
Opportunist,
Pelican,
Pestilence,
Phantom,
Pickpocket,
PlagueBearer,
PlagueDoctor,
Poisoner,
Postman,
Predator,
Provocateur,
Pursuer,
Pyromaniac,
Reckless,
Revolutionist,
Ritualist,
Romantic,
RuthlessRomantic,
NSerialKiller, // Serial Killer
Sidekick,
SoulHunter,
Spiritcaller,
Sprayer,
DarkHide, // Stalker
Succubus,
Sunnyboy,
Terrorist,
Tiger,
Traitor,
Vengeance,
VengefulRomantic,
Virus,
Vulture,
Wraith,
Werewolf,
WeaponMaster,
Workaholic,
//SoloKombat
KB_Normal,
//FFA
Killer,
//MoveAndStop
Tasker,
//HotPotato
Potato,
//H&S
Hider,
Seeker,
Fox,
Troll,
//GM
GM,
// ????
Convict,
// Sub-role after 500
NotAssigned = 500,
Antidote,
Asthmatic,
Autopsy,
Avanger,
Bait,
Busy,
Trapper, // Beartrap
Bewilder,
Bloodlust,
Charmed,
Circumvent,
Cleansed,
Clumsy,
Contagious,
Damocles,
DeadlyQuota,
Disco,
Diseased,
Unreportable, // Disregarded
DoubleShot,
Egoist,
EvilSpirit,
Flashman,
Fool,
Giant,
Glow,
Gravestone,
Guesser,
Haste,
Haunter, // Ghost role
Knighted,
LastImpostor,
Lazy,
Lovers,
Loyal,
Lucky,
Madmate,
Magnet,
Mare,
Mimic,
Minion, // Ghost role
Mischievous,
Necroview,
Ntr, // Neptune
Nimble,
Oblivious,
Onbound,
Specter, // Ghost role
Physicist,
Rascal,
Reach,
Recruit,
Rogue,
DualPersonality, // Schizophrenic
Seer,
Sleuth,
Stained,
Taskcounter,
TicketsStealer, // Stealer
Stressed,
Swift,
Sunglasses,
Brakar, // Tiebreaker
Torch,
Truant,
Undead,
Unlucky,
Warden, // Ghost role
Watcher,
Workhorse,
Youtuber
}
@@ -0,0 +1,21 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<None Remove="bg.jpg" />
</ItemGroup>
<ItemGroup>
<Resource Include="bg.jpg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Resource>
</ItemGroup>
</Project>
@@ -0,0 +1,25 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.10.34707.107
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CustomTeamAssigner", "CustomTeamAssigner.csproj", "{B0932EFD-5233-4DF0-BB93-1C9AE176B3B9}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B0932EFD-5233-4DF0-BB93-1C9AE176B3B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B0932EFD-5233-4DF0-BB93-1C9AE176B3B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B0932EFD-5233-4DF0-BB93-1C9AE176B3B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B0932EFD-5233-4DF0-BB93-1C9AE176B3B9}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7D0AF6B5-F7EA-440B-BEFF-CA295AF3CA1D}
EndGlobalSection
EndGlobal
+76
View File
@@ -0,0 +1,76 @@
<Window x:Class="CustomTeamAssigner.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="Custom Team Assigner" Height="720" Width="1280" FontSize="20" ResizeMode="CanMinimize" WindowStyle="None">
<!--Create a default style for the buttons (modern style)-->
<Window.Resources>
<Style TargetType="Button">
<Setter Property="Background" Value="LightGray"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontSize" Value="30"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="10"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="Width" Value="440"/>
<Setter Property="Height" Value="100"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Gray"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="DarkGray"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<Grid Name="MainGrid">
<Grid.Background>
<ImageBrush ImageSource="bg.jpg"/>
</Grid.Background>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition Width="2*"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<!--Create a Frame for navigating between Pages-->
<Frame Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="3" Grid.RowSpan="10" Name="Navigator" NavigationUIVisibility="Hidden"/>
<Label Content="Custom Team Assigner" Grid.Column="0" Grid.Row="0" Grid.ColumnSpan="3" Grid.RowSpan="2" FontSize="70" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Foreground="LightGray"/>
<Button Content="Create New Play-Set" Grid.Column="1" Grid.Row="3" Click="CreateNewPlaySet"/>
<Button Content="Import Play-Set" Grid.Column="1" Grid.Row="5" Click="ImportPlaySet"/>
<Button Content="Exit" Grid.Column="1" Grid.Row="8" Click="Exit"/>
</Grid>
</Window>
+49
View File
@@ -0,0 +1,49 @@
using System.IO;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Microsoft.Win32;
namespace CustomTeamAssigner
{
public partial class MainWindow : Window
{
public static MainWindow Instance { get; private set; } = null!;
public MainWindow()
{
InitializeComponent();
Instance = this;
}
void ImportPlaySet(object sender, RoutedEventArgs e)
{
OpenFileDialog ofd = new()
{
Filter = "Text files (*.txt)|*.txt",
RestoreDirectory = true
};
if (ofd.ShowDialog() == true)
{
File.ReadAllLines(ofd.FileName).Do(line => new Team(line.Split(';')[0]).Import(line));
Navigator.NavigationService.Navigate(new PlaySetListerPage());
MainGrid.Visibility = Visibility.Collapsed;
}
}
void CreateNewPlaySet(object sender, RoutedEventArgs e)
{
}
void Exit(object sender, RoutedEventArgs e) => Close();
}
}
@@ -0,0 +1,146 @@
<Page x:Class="CustomTeamAssigner.PlaySetListerPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800"
Title="Play-Set Lister">
<Page.Resources>
<Style TargetType="Button">
<Setter Property="Background" Value="LightGray"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontSize" Value="30"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="10"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="Width" Value="440"/>
<Setter Property="Height" Value="100"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Gray"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="DarkGray"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="DarkGray"/>
<Setter Property="Foreground" Value="Gray"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="ListBoxItem">
<Setter Property="Background" Value="Black"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontSize" Value="30"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="10"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="Width" Value="440"/>
<Setter Property="Height" Value="100"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBoxItem">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Gray"/>
</Trigger>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="DarkGray"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="ScrollViewer">
<Setter Property="Background" Value="DarkGray"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="0"/>
<Setter Property="Margin" Value="0"/>
<Setter Property="HorizontalAlignment" Value="Left"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ScrollViewer">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10">
<ScrollContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style TargetType="ListBox">
<Setter Property="Background" Value="LightGray"/>
<Setter Property="Foreground" Value="White"/>
<Setter Property="FontSize" Value="30"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListBox">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10">
<ItemsPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Page.Resources>
<Grid>
<Grid.Background>
<ImageBrush ImageSource="bg.jpg"/>
</Grid.Background>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="3*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<ScrollViewer Grid.RowSpan="7">
<ListBox Name="TeamListBox" d:ItemsSource="{d:SampleData ItemCount=20}"/>
</ScrollViewer>
<Button Grid.Row="1" Grid.Column="1" Content="Add Team" Click="AddNewTeam"/>
<Button Grid.Row="2" Grid.Column="1" Content="Edit Team" Click="EditTeam" IsEnabled="False"/>
<Button Grid.Row="3" Grid.Column="1" Content="Delete Team" Click="DeleteTeam" IsEnabled="False"/>
<Button Grid.Row="4" Grid.Column="1" Content="Save" Click="SavePlaySet"/>
<Button Grid.Row="6" Grid.Column="1" Content="Go Back" Click="Back"/>
</Grid>
</Page>
@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace CustomTeamAssigner
{
public partial class PlaySetListerPage : Page
{
public PlaySetListerPage()
{
InitializeComponent();
TeamListBox.ItemsSource = Utils.Teams.Select(x => x.TeamName);
}
void Back(object sender, RoutedEventArgs e) => MainWindow.Instance.Navigator.NavigationService.GoBack();
}
}
+84
View File
@@ -0,0 +1,84 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using EHR;
namespace CustomTeamAssigner
{
internal class Team(string teamName)
{
public string RoleRevealScreenTitle { get; set; } = "*";
public string RoleRevealScreenSubtitle { get; set; } = "*";
public string RoleRevealScreenBackgroundColor { get; set; } = "*";
public string TeamName
{
get => teamName;
set => teamName = value;
}
public List<CustomRoles> TeamMembers { get; set; } = [];
public void Import(string line)
{
try
{
string[] parts = line.Split(';')[1..];
string title = parts[0];
string subtitle = parts[1];
string bgColor = parts[2];
TeamMembers = parts[3].Split(',').Select(member => Enum.Parse<CustomRoles>(member, true)).ToList();
RoleRevealScreenTitle = title;
RoleRevealScreenSubtitle = subtitle;
RoleRevealScreenBackgroundColor = bgColor;
}
catch (Exception e)
{
switch (e)
{
case NullReferenceException:
MessageBox.Show("The file is empty.", "Error while importing", MessageBoxButton.OK, MessageBoxImage.Error);
break;
case InvalidOperationException:
case IndexOutOfRangeException:
MessageBox.Show("The file is not formatted correctly.", "Error while importing", MessageBoxButton.OK, MessageBoxImage.Error);
break;
case ArgumentException:
MessageBox.Show("A team member role could not be recognized from the given string.", "Error while importing", MessageBoxButton.OK, MessageBoxImage.Error);
break;
default:
MessageBox.Show(e.Message, "Error while importing", MessageBoxButton.OK, MessageBoxImage.Error);
break;
}
}
finally
{
Utils.Teams.Add(this);
}
}
public string Export
{
get
{
StringBuilder sb = new();
sb.Append(RoleRevealScreenTitle);
sb.Append(';');
sb.Append(RoleRevealScreenSubtitle);
sb.Append(';');
sb.Append(RoleRevealScreenBackgroundColor);
sb.Append(';');
sb.Append(string.Join(",", TeamMembers));
return sb.ToString();
}
}
}
}
+127
View File
@@ -0,0 +1,127 @@
<Page x:Class="CustomTeamAssigner.TeamEditorPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800" FontSize="18"
Title="Team Editor">
<Page.Resources>
<Style TargetType="Button">
<Setter Property="Background" Value="LightGray"/>
<Setter Property="Foreground" Value="Black"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Padding" Value="10"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="Width" Value="440"/>
<Setter Property="Height" Value="100"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" CornerRadius="10">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="Gray"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="DarkGray"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="DarkGray"/>
<Setter Property="Foreground" Value="Gray"/>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="CheckBox">
<Setter Property="Foreground" Value="LightGray"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style TargetType="TextBlock">
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style TargetType="TextBox">
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style TargetType="ComboBox">
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
<Style TargetType="Label">
<Setter Property="Foreground" Value="LightGray"/>
<Setter Property="FontFamily" Value="Arial"/>
<Setter Property="FontWeight" Value="Bold"/>
<Setter Property="Margin" Value="10"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
<Setter Property="VerticalAlignment" Value="Center"/>
</Style>
</Page.Resources>
<Grid>
<Grid.Background>
<ImageBrush ImageSource="bg.jpg"/>
</Grid.Background>
<Grid.RowDefinitions>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
<RowDefinition Height="1*"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="3*"/>
</Grid.ColumnDefinitions>
<!-- Team Name -->
<Label Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" Content="Team Name" FontWeight="Bold" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center"/>
<TextBox Grid.Row="0" Grid.Column="2" x:Name="TeamNameTextBox" Text="Really Cool Team" Width="512" FontWeight="Bold" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" MaxLines="1"/>
<!-- Team Color (with a CheckBox deciding whether to override this) -->
<CheckBox Grid.Row="1" Grid.Column="0" Grid.ColumnSpan="2" x:Name="OverrideColorCheckBox" Content=" Override Team Color" FontWeight="Bold" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" Checked="OverrideColorCheck" Unchecked="OverrideColorCheck"/>
<TextBox Grid.Row="1" Grid.Column="2" x:Name="TeamColorTextBox" Text="#00ffa5" Width="128" FontWeight="Bold" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" IsEnabled="False" MaxLength="9" MaxLines="1"/>
<!-- Team Display Title (with a CheckBox deciding whether to override this) -->
<CheckBox Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" x:Name="OverrideTitleCheckBox" Content=" Override Team Display Title" FontWeight="Bold" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" Checked="OverrideTitleCheck" Unchecked="OverrideTitleCheck"/>
<TextBox Grid.Row="2" Grid.Column="2" x:Name="TeamTitleTextBox" Text="Teamed" Width="512" FontWeight="Bold" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" IsEnabled="False" MaxLines="1"/>
<!-- Team Display SubTitle (with a CheckBox deciding whether to override this) -->
<CheckBox Grid.Row="3" Grid.Column="0" Grid.ColumnSpan="2" x:Name="OverrideSubTitleCheckBox" Content=" Override Team Display Subtitle" FontWeight="Bold" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" Checked="OverrideSubTitleCheck" Unchecked="OverrideSubTitleCheck"/>
<TextBox Grid.Row="3" Grid.Column="2" x:Name="TeamSubTitleTextBox" Text="You're in a Custom Team!" Width="512" FontWeight="Bold" Margin="10" HorizontalAlignment="Left" VerticalAlignment="Center" IsEnabled="False" MaxLines="1"/>
</Grid>
</Page>
@@ -0,0 +1,29 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace CustomTeamAssigner
{
public partial class TeamEditorPage : Page
{
public TeamEditorPage()
{
InitializeComponent();
}
void OverrideColorCheck(object sender, RoutedEventArgs e) => TeamColorTextBox.IsEnabled = OverrideColorCheckBox.IsChecked == true;
void OverrideTitleCheck(object sender, RoutedEventArgs e) => TeamTitleTextBox.IsEnabled = OverrideTitleCheckBox.IsChecked == true;
void OverrideSubTitleCheck(object sender, RoutedEventArgs e) => TeamSubTitleTextBox.IsEnabled = OverrideSubTitleCheckBox.IsChecked == true;
}
}
+27
View File
@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
namespace CustomTeamAssigner
{
internal static class Utils
{
public static HashSet<Team> Teams = [];
public const string OutputFileName = "CTA_Data.txt";
public static Color ToColor(this string htmlColor) => (Color)ColorConverter.ConvertFromString(htmlColor);
public static void Do<T>(this IEnumerable<T> enumerable, Action<T> action)
{
foreach (var item in enumerable)
{
action(item);
}
}
}
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

+388
View File
@@ -0,0 +1,388 @@
namespace EHR;
public enum CustomRoles
{
//Default
Crewmate = 0,
//Impostors (Vanilla)
Impostor,
Shapeshifter,
// Vanilla Remakes
ImpostorTOHE,
ShapeshifterTOHE,
//Impostors
Hacker, // Anonymous
AntiAdminer,
Sans, // Arrogance
Bard,
Blackmailer,
Bomber,
BountyHunter,
OverKiller, // Butcher
Camouflager,
Capitalism,
Cantankerous,
Changeling,
Chronomancer,
Cleaner,
Commander,
EvilDiviner, // Consigliere
Consort,
Councillor,
Crewpostor,
CursedWolf,
Deathpact,
Devourer,
Disperser,
Duellist,
Dazzler,
Escapee,
Eraser,
EvilGuesser,
EvilTracker,
FireWorks,
Freezer,
Gambler,
Gangster,
Godfather,
Greedier,
Hangman,
Hitman,
Inhibitor,
Kamikaze,
Kidnapper,
Minimalism, // Killing Machine
BallLightning, // Lightning
Librarian,
Lurker,
Mafioso,
Mastermind,
Mafia, // Nemesis
SerialKiller, // Mercenary
Miner,
Morphling,
Assassin, // Ninja
Nuker,
Nullifier,
Parasite,
Penguin,
Puppeteer,
QuickShooter,
Refugee,
RiftMaker,
Saboteur,
Sapper,
Scavenger,
Silencer,
Sniper,
ImperiusCurse, // Soul Catcher
Swapster,
Swiftclaw,
Swooper,
Stealth,
TimeThief,
BoobyTrap, // Trapster
Trickster,
Twister,
Underdog,
Undertaker,
Vampire,
Vindicator,
Visionary,
Warlock,
Wildling,
Witch,
YinYanger,
Zombie,
//Crewmates (Vanilla)
Engineer,
GuardianAngel,
Scientist,
// Vanilla Remakes
CrewmateTOHE,
EngineerTOHE,
GuardianAngelTOHE,
ScientistTOHE,
// Crewmate
Addict,
Aid,
Alchemist,
Altruist,
Analyzer,
Autocrat,
Beacon,
Benefactor,
Bodyguard,
CameraMan,
CyberStar, // Celebrity
Chameleon,
Cleanser,
Convener,
CopyCat,
Bloodhound, // Coroner
Crusader,
Demolitionist,
Deputy,
Detective,
Detour,
Dictator,
Doctor,
DonutDelivery,
Doormaster,
DovesOfNeace,
Drainer,
Druid,
Electric,
Enigma,
Escort,
Express,
Farseer,
Divinator, // Fortune Teller
Gaulois,
Grenadier,
GuessManagerRole,
Guardian,
Ignitor,
Insight,
ParityCop, // Inspector
Jailor,
Judge,
Needy, // Lazy Guy
Lighter,
Lookout,
Luckey,
Markseeker,
Marshall,
Mathematician,
Mayor,
SabotageMaster, // Mechanic
Medic,
Mediumshiper,
Merchant,
Monitor,
Mole,
Monarch,
Mortician,
NiceEraser,
NiceGuesser,
NiceHacker,
NiceSwapper,
Nightmare,
Observer,
Oracle,
Paranoia,
Perceiver,
Philantropist,
Psychic,
Rabbit,
Randomizer,
Ricochet,
Sentinel,
SecurityGuard,
Sheriff,
Shiftguard,
Snitch,
Spiritualist,
Speedrunner,
SpeedBooster,
Spy,
SuperStar,
TaskManager,
Tether,
TimeManager,
TimeMaster,
Tornado,
Tracker,
Transmitter,
Transporter,
Tracefinder,
Tunneler,
Ventguard,
Veteran,
SwordsMan, // Vigilante
Witness,
//Neutrals
Agitater,
Amnesiac,
Arsonist,
Bandit,
BloodKnight,
Bubble,
Collector,
Deathknight,
Gamer, // Demon
Doppelganger,
Doomsayer,
Eclipse,
Enderman,
Executioner,
Totocalcio, // Follower
Glitch,
God,
FFF, // Hater
HeadHunter,
HexMaster,
Hookshot,
Imitator,
Impartial,
Innocent,
Jackal,
Jester,
Jinx,
Juggernaut,
Konan,
Lawyer,
Magician,
Mario,
Maverick,
Medusa,
Mycologist,
Necromancer,
Opportunist,
Pelican,
Pestilence,
Phantom,
Pickpocket,
PlagueBearer,
PlagueDoctor,
Poisoner,
Postman,
Predator,
Provocateur,
Pursuer,
Pyromaniac,
Reckless,
Revolutionist,
Ritualist,
Romantic,
RuthlessRomantic,
NSerialKiller, // Serial Killer
Sidekick,
SoulHunter,
Spiritcaller,
Sprayer,
DarkHide, // Stalker
Succubus,
Sunnyboy,
Terrorist,
Tiger,
Traitor,
Vengeance,
VengefulRomantic,
Virus,
Vulture,
Wraith,
Werewolf,
WeaponMaster,
Workaholic,
//SoloKombat
KB_Normal,
//FFA
Killer,
//MoveAndStop
Tasker,
//HotPotato
Potato,
//H&S
Hider,
Seeker,
Fox,
Troll,
//GM
GM,
// ????
Convict,
// Sub-role after 500
NotAssigned = 500,
Antidote,
Asthmatic,
Autopsy,
Avanger,
Bait,
Busy,
Trapper, // Beartrap
Bewilder,
Bloodlust,
Charmed,
Circumvent,
Cleansed,
Clumsy,
Contagious,
Damocles,
DeadlyQuota,
Disco,
Diseased,
Unreportable, // Disregarded
DoubleShot,
Egoist,
EvilSpirit,
Flashman,
Fool,
Giant,
Glow,
Gravestone,
Guesser,
Haste,
Haunter, // Ghost role
Knighted,
LastImpostor,
Lazy,
Lovers,
Loyal,
Lucky,
Madmate,
Magnet,
Mare,
Mimic,
Minion, // Ghost role
Mischievous,
Necroview,
Ntr, // Neptune
Nimble,
Oblivious,
Onbound,
Specter, // Ghost role
Physicist,
Rascal,
Reach,
Recruit,
Rogue,
DualPersonality, // Schizophrenic
Seer,
Sleuth,
Stained,
Taskcounter,
TicketsStealer, // Stealer
Stressed,
Swift,
Sunglasses,
Brakar, // Tiebreaker
Torch,
Truant,
Undead,
Unlucky,
Warden, // Ghost role
Watcher,
Workhorse,
Youtuber
}
+9
View File
@@ -17,6 +17,12 @@
<EmbeddedResource Include=".\Resources\**" />
</ItemGroup>
<ItemGroup>
<Compile Remove="CTA\**" />
<EmbeddedResource Remove="CTA\**" />
<None Remove="CTA\**" />
</ItemGroup>
<ItemGroup>
<None Remove="Modules\zqihthf4.eqf~" />
<None Remove="resources\modnews\english\EHR.v1.2.0.txt" />
@@ -47,4 +53,7 @@
<Target Name="Copy" AfterTargets="Build" Condition="'$(AmongUs)' != ''">
<Copy SourceFiles="$(OutputPath)$(AssemblyName).dll" DestinationFolder="$(AmongUs)/BepInEx/plugins/" />
</Target>
<Target Name="Copy" AfterTargets="Build">
<Copy SourceFiles="CustomRoles.cs" DestinationFolder="CTA/CustomTeamAssigner/" />
</Target>
</Project>
-386
View File
@@ -626,392 +626,6 @@ public enum Team
Crewmate = 4
}
public enum CustomRoles
{
//Default
Crewmate = 0,
//Impostors (Vanilla)
Impostor,
Shapeshifter,
// Vanilla Remakes
ImpostorTOHE,
ShapeshifterTOHE,
//Impostors
Hacker, // Anonymous
AntiAdminer,
Sans, // Arrogance
Bard,
Blackmailer,
Bomber,
BountyHunter,
OverKiller, // Butcher
Camouflager,
Capitalism,
Cantankerous,
Changeling,
Chronomancer,
Cleaner,
Commander,
EvilDiviner, // Consigliere
Consort,
Councillor,
Crewpostor,
CursedWolf,
Deathpact,
Devourer,
Disperser,
Duellist,
Dazzler,
Escapee,
Eraser,
EvilGuesser,
EvilTracker,
FireWorks,
Freezer,
Gambler,
Gangster,
Godfather,
Greedier,
Hangman,
Hitman,
Inhibitor,
Kamikaze,
Kidnapper,
Minimalism, // Killing Machine
BallLightning, // Lightning
Librarian,
Lurker,
Mafioso,
Mastermind,
Mafia, // Nemesis
SerialKiller, // Mercenary
Miner,
Morphling,
Assassin, // Ninja
Nuker,
Nullifier,
Parasite,
Penguin,
Puppeteer,
QuickShooter,
Refugee,
RiftMaker,
Saboteur,
Sapper,
Scavenger,
Silencer,
Sniper,
ImperiusCurse, // Soul Catcher
Swapster,
Swiftclaw,
Swooper,
Stealth,
TimeThief,
BoobyTrap, // Trapster
Trickster,
Twister,
Underdog,
Undertaker,
Vampire,
Vindicator,
Visionary,
Warlock,
Wildling,
Witch,
YinYanger,
Zombie,
//Crewmates (Vanilla)
Engineer,
GuardianAngel,
Scientist,
// Vanilla Remakes
CrewmateTOHE,
EngineerTOHE,
GuardianAngelTOHE,
ScientistTOHE,
// Crewmate
Addict,
Aid,
Alchemist,
Altruist,
Analyzer,
Autocrat,
Beacon,
Benefactor,
Bodyguard,
CameraMan,
CyberStar, // Celebrity
Chameleon,
Cleanser,
Convener,
CopyCat,
Bloodhound, // Coroner
Crusader,
Demolitionist,
Deputy,
Detective,
Detour,
Dictator,
Doctor,
DonutDelivery,
Doormaster,
DovesOfNeace,
Drainer,
Druid,
Electric,
Enigma,
Escort,
Express,
Farseer,
Divinator, // Fortune Teller
Gaulois,
Grenadier,
GuessManagerRole,
Guardian,
Ignitor,
Insight,
ParityCop, // Inspector
Jailor,
Judge,
Needy, // Lazy Guy
Lighter,
Lookout,
Luckey,
Markseeker,
Marshall,
Mathematician,
Mayor,
SabotageMaster, // Mechanic
Medic,
Mediumshiper,
Merchant,
Monitor,
Mole,
Monarch,
Mortician,
NiceEraser,
NiceGuesser,
NiceHacker,
NiceSwapper,
Nightmare,
Observer,
Oracle,
Paranoia,
Perceiver,
Philantropist,
Psychic,
Rabbit,
Randomizer,
Ricochet,
Sentinel,
SecurityGuard,
Sheriff,
Shiftguard,
Snitch,
Spiritualist,
Speedrunner,
SpeedBooster,
Spy,
SuperStar,
TaskManager,
Tether,
TimeManager,
TimeMaster,
Tornado,
Tracker,
Transmitter,
Transporter,
Tracefinder,
Tunneler,
Ventguard,
Veteran,
SwordsMan, // Vigilante
Witness,
//Neutrals
Agitater,
Amnesiac,
Arsonist,
Bandit,
BloodKnight,
Bubble,
Collector,
Deathknight,
Gamer, // Demon
Doppelganger,
Doomsayer,
Eclipse,
Enderman,
Executioner,
Totocalcio, // Follower
Glitch,
God,
FFF, // Hater
HeadHunter,
HexMaster,
Hookshot,
Imitator,
Impartial,
Innocent,
Jackal,
Jester,
Jinx,
Juggernaut,
Konan,
Lawyer,
Magician,
Mario,
Maverick,
Medusa,
Mycologist,
Necromancer,
Opportunist,
Pelican,
Pestilence,
Phantom,
Pickpocket,
PlagueBearer,
PlagueDoctor,
Poisoner,
Postman,
Predator,
Provocateur,
Pursuer,
Pyromaniac,
Reckless,
Revolutionist,
Ritualist,
Romantic,
RuthlessRomantic,
NSerialKiller, // Serial Killer
Sidekick,
SoulHunter,
Spiritcaller,
Sprayer,
DarkHide, // Stalker
Succubus,
Sunnyboy,
Terrorist,
Tiger,
Traitor,
Vengeance,
VengefulRomantic,
Virus,
Vulture,
Wraith,
Werewolf,
WeaponMaster,
Workaholic,
//SoloKombat
KB_Normal,
//FFA
Killer,
//MoveAndStop
Tasker,
//HotPotato
Potato,
//H&S
Hider,
Seeker,
Fox,
Troll,
//GM
GM,
// ????
Convict,
// Sub-role after 500
NotAssigned = 500,
Antidote,
Asthmatic,
Autopsy,
Avanger,
Bait,
Busy,
Trapper, // Beartrap
Bewilder,
Bloodlust,
Charmed,
Circumvent,
Cleansed,
Clumsy,
Contagious,
Damocles,
DeadlyQuota,
Disco,
Diseased,
Unreportable, // Disregarded
DoubleShot,
Egoist,
EvilSpirit,
Flashman,
Fool,
Giant,
Glow,
Gravestone,
Guesser,
Haste,
Haunter, // Ghost role
Knighted,
LastImpostor,
Lazy,
Lovers,
Loyal,
Lucky,
Madmate,
Magnet,
Mare,
Mimic,
Minion, // Ghost role
Mischievous,
Necroview,
Ntr, // Neptune
Nimble,
Oblivious,
Onbound,
Specter, // Ghost role
Physicist,
Rascal,
Reach,
Recruit,
Rogue,
DualPersonality, // Schizophrenic
Seer,
Sleuth,
Stained,
Taskcounter,
TicketsStealer, // Stealer
Stressed,
Swift,
Sunglasses,
Brakar, // Tiebreaker
Torch,
Truant,
Undead,
Unlucky,
Warden, // Ghost role
Watcher,
Workhorse,
Youtuber
}
#pragma warning disable IDE0079 // Remove unnecessary suppression
[SuppressMessage("ReSharper", "UnusedMember.Global")]
#pragma warning restore IDE0079 // Remove unnecessary suppression