Esempio n. 1
0
        static void Postfix(byte HKHMBLJFLMC, MessageReader ALMCIJKELCP)
        {
            byte          packetId = HKHMBLJFLMC;
            MessageReader reader   = ALMCIJKELCP;

            switch (packetId)
            {
            case (byte)RPC.CustomRPC.SetEngineer:
                byte          engineerId = reader.ReadByte();
                PlayerControl engineer   = PlayerTools.getPlayerFromId(engineerId);
                if (engineer != null)
                {
                    new EngineerPlayer(engineer);
                }
                else
                {
                    System.Console.WriteLine("Invalid engineer id provided inside HandleRpc...");
                }
                break;

            case (byte)RPC.CustomRPC.FixLights:
                SwitchSystem switchSystem = ShipStatus.Instance.Systems[SystemTypes.Electrical].Cast <SwitchSystem>();
                switchSystem.ActualSwitches = switchSystem.ExpectedSwitches;
                break;
            }
        }
Esempio n. 2
0
 // Create all systems
 public void initializeSystems()
 {
     gravSystem         = new GravitySystem(level); systems.Add(gravSystem);
     moveSystem         = new MovementSystem(level); systems.Add(moveSystem);
     playerSystem       = new PlayerMovementSystem(level); systems.Add(playerSystem);
     visSystem          = new VisionOrbSystem(level); systems.Add(visSystem);
     colSystem          = new CollisionDetectionSystem(level); systems.Add(colSystem);
     drawSystem         = new DrawSystem(level.g, level); systems.Add(drawSystem);
     healthSystem       = new HealthSystem(level); systems.Add(healthSystem);
     animSystem         = new AnimationSystem(level); systems.Add(animSystem);
     timerSystem        = new TimerSystem(level); systems.Add(timerSystem);
     timedShooterSystem = new TimedShooterSystem(level); systems.Add(timedShooterSystem);
     squishSystem       = new SquishSystem(level); systems.Add(squishSystem);
     inputSystem        = new InputSystem(level); systems.Add(inputSystem);
     scrEdgeSystem      = new ScreenEdgeSystem(level); systems.Add(scrEdgeSystem);
     slSystem           = new SwitchListenerSystem(level); systems.Add(slSystem);
     switchSystem       = new SwitchSystem(level); systems.Add(switchSystem);
     spSystem           = new SimplePowerUpSystem(level); systems.Add(spSystem);
     simpEnemySystem    = new SimpleEnemyAISystem(level); systems.Add(simpEnemySystem);
     weapSystem         = new PlayerWeaponSystem(level); systems.Add(weapSystem);
     bkgPosSystem       = new BackgroundPositionSystem(level); systems.Add(bkgPosSystem);
     debugSystem        = new DebugSystem(level); systems.Add(debugSystem);
     movPlatSystem      = new MovingPlatformSystem(level); systems.Add(movPlatSystem);
     grapSystem         = new GrappleSystem(level); systems.Add(grapSystem);
     pushSystem         = new PushableSystem(level); systems.Add(pushSystem);
     velZeroSystem      = new VelToZeroSystem(level); systems.Add(velZeroSystem);
     smushSystem        = new SmushSystem(level); systems.Add(smushSystem);
     signSystem         = new SignSystem(level); systems.Add(signSystem);
 }
Esempio n. 3
0
    void Awake()
    {
        worldContainer = GameObject.FindGameObjectWithTag("World");
        playerCamera   = GameObject.FindGameObjectWithTag("PlayerCamera");

        player             = FindObjectOfType <Player>();
        spawner            = GetComponent <Spawner>();
        enemySpawner       = GetComponent <EnemySpawner>();
        switchSystem       = GetComponent <SwitchSystem>();
        collectableManager = GetComponent <CollectableManager>();
    }
Esempio n. 4
0
        private static bool FixLights(SwitchSystem lights)
        {
            var writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId,
                                                                    (byte)CustomRPC.FixLights, SendOption.Reliable, -1);

            AmongUsClient.Instance.FinishRpcImmediately(writer);

            lights.ActualSwitches = lights.ExpectedSwitches;

            return(false);
        }
Esempio n. 5
0
        public bool RepairLight()
        {
            if (!CanRepair())
            {
                return(false);
            }

            _repairUsed = true;
            SwitchSystem switchSystem = ShipStatus.Instance.Systems[SystemTypes.Electrical].Cast <SwitchSystem>();

            switchSystem.ActualSwitches = switchSystem.ExpectedSwitches;
            WriteImmediately(RPC.FixLights);
            return(false);
        }
        public static bool Prefix(ref float __result, ShipStatus __instance, [HarmonyArgument(0)] GameData.PlayerInfo player)
        {
            ISystemType systemType = __instance.Systems.ContainsKey(SystemTypes.Electrical) ? __instance.Systems[SystemTypes.Electrical] : null;

            if (systemType == null)
            {
                return(true);
            }
            SwitchSystem switchSystem = systemType.TryCast <SwitchSystem>();

            if (switchSystem == null)
            {
                return(true);
            }

            float num = (float)switchSystem.Value / 255f;

            if (player == null || player.IsDead) // IsDead
            {
                __result = __instance.MaxLightRadius;
            }
            else if (player.IsImpostor) // IsImpostor
            {
                __result = __instance.MaxLightRadius * PlayerControl.GameOptions.ImpostorLightMod;
            }
            else if (Lighter.lighter != null && Lighter.lighter.PlayerId == player.PlayerId && Lighter.lighterTimer > 0f) // if player is Lighter and Lighter has his ability active
            {
                __result = Mathf.Lerp(__instance.MaxLightRadius * Lighter.lighterModeLightsOffVision, __instance.MaxLightRadius * Lighter.lighterModeLightsOnVision, num);
            }
            else if (Trickster.trickster != null && Trickster.lightsOutTimer > 0f)
            {
                float lerpValue = 1f;
                if (Trickster.lightsOutDuration - Trickster.lightsOutTimer < 0.5f)
                {
                    lerpValue = Mathf.Clamp01((Trickster.lightsOutDuration - Trickster.lightsOutTimer) * 2);
                }
                else if (Trickster.lightsOutTimer < 0.5)
                {
                    lerpValue = Mathf.Clamp01(Trickster.lightsOutTimer * 2);
                }
                __result = Mathf.Lerp(__instance.MinLightRadius, __instance.MaxLightRadius, 1 - lerpValue) * PlayerControl.GameOptions.CrewLightMod; // Instant lights out? Maybe add a smooth transition?
            }
            else
            {
                __result = Mathf.Lerp(__instance.MinLightRadius, __instance.MaxLightRadius, num) * PlayerControl.GameOptions.CrewLightMod;
            }
            return(false);
        }
 static bool Prefix(MapRoom __instance)
 {
     if (EngineerSettings.Engineer != null && EngineerSettings.Engineer.PlayerId == PlayerControl.LocalPlayer.PlayerId && !PlayerControl.LocalPlayer.Data.IsDead)
     {
         if (!EngineerSettings.repairUsed && EngineerSettings.sabotageActive)
         {
             EngineerSettings.repairUsed = true;
             SwitchSystem switchSystem = ShipStatus.Instance.Systems[SystemTypes.Electrical].Cast <SwitchSystem>();
             switchSystem.ActualSwitches = switchSystem.ExpectedSwitches;
             MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.FixLights, Hazel.SendOption.None, -1);
             AmongUsClient.Instance.FinishRpcImmediately(writer);
         }
         return(false);
     }
     return(true);
 }
Esempio n. 8
0
 static bool Prefix(MapRoom __instance)
 {
     if (PlayerControl.LocalPlayer.isPlayerRole("Engineer"))
     {
         if (!PlayerControl.LocalPlayer.getModdedControl().UsedAbility&& Main.Logic.sabotageActive && !PlayerControl.LocalPlayer.Data.IsDead)
         {
             PlayerControl.LocalPlayer.getModdedControl().UsedAbility = true;
             SwitchSystem switchSystem = ShipStatus.Instance.Systems[SystemTypes.Electrical].Cast <SwitchSystem>();
             switchSystem.ActualSwitches = switchSystem.ExpectedSwitches;
             MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.FixLights, Hazel.SendOption.None, -1);
             AmongUsClient.Instance.FinishRpcImmediately(writer);
         }
         return(false);
     }
     return(true);
 }
Esempio n. 9
0
        public static bool Prefix(ShipStatus __instance, [HarmonyArgument(0)] GameData.PlayerInfo player,
                                  ref float __result)
        {
            if (player == null || player.IsDead)
            {
                __result = __instance.MaxLightRadius;
                return(false);
            }

            if (player.IsImpostor || player._object.Is(RoleEnum.Glitch))
            {
                __result = __instance.MaxLightRadius * PlayerControl.GameOptions.ImpostorLightMod;
                if (player.Object.Is(ModifierEnum.ButtonBarry))
                {
                    if (Modifier.GetModifier <ButtonBarry>(PlayerControl.LocalPlayer).ButtonUsed)
                    {
                        __result *= 0.5f;
                    }
                }
                return(false);
            }

            SwitchSystem switchSystem    = __instance.Systems[SystemTypes.Electrical].Cast <SwitchSystem>();
            float        lightPercentage = switchSystem.Value / 255f;

            if (player._object.Is(ModifierEnum.Torch))
            {
                lightPercentage = 1;
            }
            __result = Mathf.Lerp(__instance.MinLightRadius, __instance.MaxLightRadius, lightPercentage) *
                       PlayerControl.GameOptions.CrewLightMod;

            if (player.Object.Is(ModifierEnum.ButtonBarry))
            {
                if (Modifier.GetModifier <ButtonBarry>(PlayerControl.LocalPlayer).ButtonUsed)
                {
                    __result *= 0.5f;
                }
            }

            if (player.Object.Is(RoleEnum.Covert) && Role.GetRole <Covert>(PlayerControl.LocalPlayer).IsCovert)
            {
                __result *= 0.5f;
            }
            return(false);
        }
Esempio n. 10
0
        public static float GetNeutralLightRadius(ShipStatus shipStatus, bool isImpostor)
        {
            if (SubmergedCompatibility.Loaded && shipStatus.Type == SubmergedCompatibility.SUBMERGED_MAP_TYPE)
            {
                return(SubmergedCompatibility.GetSubmergedNeutralLightRadius(isImpostor));
            }

            if (isImpostor)
            {
                return(shipStatus.MaxLightRadius * PlayerControl.GameOptions.ImpostorLightMod);
            }

            SwitchSystem switchSystem = shipStatus.Systems[SystemTypes.Electrical].TryCast <SwitchSystem>();
            float        lerpValue    = switchSystem.Value / 255f;

            return(Mathf.Lerp(shipStatus.MinLightRadius, shipStatus.MaxLightRadius, lerpValue) * PlayerControl.GameOptions.CrewLightMod);
        }
 static bool Prefix(MapRoom __instance)
 {
     if (EngineerPlayer.IsPlayerEngineer(PlayerControl.LocalPlayer) && EngineerPlayer.GetEngineerFromPlayer(PlayerControl.LocalPlayer).canRepair&& EngineerRole.sabotageActive)
     {
         System.Console.WriteLine(EngineerPlayer.GetEngineerFromPlayer(PlayerControl.LocalPlayer).canRepair);
         EngineerPlayer.GetEngineerFromPlayer(PlayerControl.LocalPlayer).lastRepair = DateTime.UtcNow;
         SwitchSystem switchSystem = ShipStatus.Instance.Systems[SystemTypes.Electrical].Cast <SwitchSystem>();
         switchSystem.ActualSwitches = switchSystem.ExpectedSwitches;
         MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)RPC.CustomRPC.FixLights, Hazel.SendOption.None, -1);
         AmongUsClient.Instance.FinishRpcImmediately(writer);
         return(false);
     }
     else if (EngineerPlayer.IsPlayerEngineer(PlayerControl.LocalPlayer))
     {
         return(false);
     }
     return(true);
 }
Esempio n. 12
0
    /// <summary>
    /// 初始化
    /// </summary>
    public void Initinal()
    {
        //辅助系统
        m_TipsSystem    = new TipsSystem(this);
        m_SwitchSystem  = new SwitchSystem(this);
        m_arsenalSystem = new ArsenalSystem(this);
        //界面
        m_tipsPanel = new TipsPanel();



        m_TipsSystem.Initialize();
        m_arsenalSystem.Initialize();


        //第一次打开才进行加载以下界面
        if (m_player == null)
        {
            m_mainPanel           = new MainPanel(this);
            m_mainMenuPanel       = new MainMenuPanel(this);
            m_mainMenuRightPanel  = new MainMenuRightPanel(this);
            m_readAssetPanel      = new ReadAssetPanel(this);
            m_readAssetRightPanel = new ReadAssetRightPanel(this);
            m_ChooseRolePanel     = new ChooseRolePanel(this);
            m_gameMenuRightPanel  = new GameMenuRightPanel(this);

            //界面状态系统初始化
            m_SwitchSystem.Initialize();
            //注册界面状态
            AddUIState();

            //主界面初始化
            m_mainPanel.Begin();
        }
        else
        {
            //进入游戏后加载兵营系统 以及  UI
            m_campSystem = new CampSystem(this);
            m_statePanel = new GameStatePanel(this);
            //初始化
            m_campSystem.Initialize();
            m_statePanel.Begin();
        }
    }
Esempio n. 13
0
        static void Postfix(byte HKHMBLJFLMC, MessageReader ALMCIJKELCP)
        {
            MessageReader reader = ALMCIJKELCP;
            
            switch (HKHMBLJFLMC /*Packet ID*/)
            {
                // ---------------------- Set special roles ----------------------
                case (byte) RPC.SetRole:
                    byte roleId = reader.ReadByte();
                    byte playerId = reader.ReadByte();
                    foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                        if (player.PlayerId == playerId)
                            switch (roleId)
                            {
                                case var value when value == Detective.RoleID:
                                    AddSpecialRole(new Detective(player));
                                    break;
                                
                                case var value when value == Doctor.RoleID:
                                    AddSpecialRole(new Doctor(player));
                                    break;
                                
                                case var value when value == Engineer.RoleID:
                                    AddSpecialRole(new Engineer(player));
                                    break;
                                
                                case var value when value == Maniac.RoleID:
                                    AddSpecialRole(new Maniac(player));
                                    break;
                                
                                case var value when value == Seer.RoleID:
                                    AddSpecialRole(new Seer(player));
                                    break;

                                case var value when value == Tracker.RoleID:
                                    AddSpecialRole(new Tracker(player));
                                    break;
                                
                                case var value when value == Ninja.RoleID:
                                    AddSpecialRole(new Ninja(player));
                                    break;

                                case var value when value == Nocturnal.RoleID:
                                    AddSpecialRole(new Nocturnal(player));
                                    break;

                                case var value when value == Pathfinder.RoleID:
                                    AddSpecialRole(new Pathfinder(player));
                                    break;
                            }
                    break;
                // -------------- Happenings related to special roles --------------
                
                case (byte)RPC.SetProtected:
                    byte protectedId = reader.ReadByte();
                    foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                        if (player.PlayerId == protectedId)
                            GetSpecialRole<Doctor>().protectedPlayer = player;
                    break;
                case (byte)RPC.ShieldBreak:
                    Doctor doctor = GetSpecialRole<Doctor>();
                    PlayerControl protectedPlayer = doctor.protectedPlayer;
                    if (protectedPlayer != null)
                    {
                        protectedPlayer.myRend.material.SetColor("_VisorColor", Palette.VisorColor);
                        protectedPlayer.myRend.material.SetFloat("_Outline", 0f);
                    }    
                    doctor.protectedPlayer = null;
                    break;
                case (byte) RPC.AttemptShield:
                    Doctor doctorShieldAttempt = GetSpecialRole<Doctor>();
                    if (doctorShieldAttempt.player != null)
                    {
                        doctorShieldAttempt.AttemptKillShielded();
                    }
                    break;
                case (byte) RPC.DetectiveKill:
                    var killerid = reader.ReadByte();
                    var targetid = reader.ReadByte();
                    PlayerControl killer = PlayerTools.GetPlayerById(killerid);
                    PlayerControl target = PlayerTools.GetPlayerById(targetid);
                    killer.MurderPlayer(target);
                    break;
                case (byte)RPC.ManiacWin:
                    Maniac maniac = GetSpecialRole<Maniac>();
                    foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                    {
                        if (player == maniac.player) continue;
                        player.RemoveInfected();
                        player.Die(DeathReason.Exile);
                        player.Data.IsDead = true;
                        player.Data.IsImpostor = false;
                    }

                    maniac.player.Revive();
                    maniac.player.Data.IsDead = false;
                    maniac.player.Data.IsImpostor = true;
                    break;
                case (byte) RPC.NinjaDoubleKill:
                    var ninjaId = reader.ReadByte();
                    var doubleKillId = reader.ReadByte();
                    PlayerControl ninjaDoubleKill = PlayerTools.GetPlayerById(ninjaId);
                    PlayerControl targetDoubleKill = PlayerTools.GetPlayerById(doubleKillId);
                    ninjaDoubleKill.MurderPlayer(targetDoubleKill);
                    break;
                case (byte)RPC.SetTrackerMark:
                    Tracker tracker1 = GetSpecialRole<Tracker>();
                    SystemTypes system = (SystemTypes) reader.ReadInt32();
                    tracker1.markedSystem = system;
                    break;
                case (byte)RPC.TrapSuccessful:
                    if (TryGetSpecialRole(PlayerControl.LocalPlayer.PlayerId, out Tracker tracker2))
                    {
                        byte roomId = reader.ReadByte();
                        tracker2.TrapSuccessful((SystemTypes) roomId);
                    }
                    break;

                // --------------------------- Other ---------------------------

                case (byte)RPC.FixLights:
                    SwitchSystem switchSystem = ShipStatus.Instance.Systems[SystemTypes.Electrical].Cast<SwitchSystem>();
                    switchSystem.ActualSwitches = switchSystem.ExpectedSwitches;
                    break;
                case (byte)RPC.SetLocalPlayers:
                    Crew.Clear();
                    localPlayer = PlayerControl.LocalPlayer;
                    var localPlayerBytes = reader.ReadBytesAndSize();

                    foreach (byte id in localPlayerBytes)
                        foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                            if (player.PlayerId == id)
                                Crew.Add(player);
                    break;
                case (byte) RPC.SetInfected:
                    break;
                case (byte) RPC.ResetVariables:
                    List<Role> assignedRoles = AssignedSpecialRoles.Values.ToList();
                    foreach (Role r in assignedRoles)
                    {
                        r.ClearSettings();
                    }
                    ResetValues();
                    break;
            }
        }
Esempio n. 14
0
        public static void engineerFixLights()
        {
            SwitchSystem switchSystem = ShipStatus.Instance.Systems[SystemTypes.Electrical].Cast <SwitchSystem>();

            switchSystem.ActualSwitches = switchSystem.ExpectedSwitches;
        }
Esempio n. 15
0
 void Awake()
 {
     activateSwitchListener = new UnityAction(SwitchActivateded);
     switchSystem           = GetComponent <SwitchSystem>();
 }
Esempio n. 16
0
        static void Postfix(byte HKHMBLJFLMC, MessageReader ALMCIJKELCP)
        {
            byte          packetId = HKHMBLJFLMC;
            MessageReader reader   = ALMCIJKELCP;

            switch (packetId)
            {
            case (byte)CustomRPC.AttemptSound:
                BreakShield(false);
                break;

            case (byte)CustomRPC.FixLights:
                SwitchSystem switchSystem = ShipStatus.Instance.Systems[SystemTypes.Electrical].Cast <SwitchSystem>();
                switchSystem.ActualSwitches = switchSystem.ExpectedSwitches;
                break;

            case (byte)CustomRPC.SetLocalPlayers:
                localPlayers.Clear();
                localPlayer = PlayerControl.LocalPlayer;
                var localPlayerBytes = ALMCIJKELCP.ReadBytesAndSize();
                foreach (byte id in localPlayerBytes)
                {
                    foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                    {
                        if (player.PlayerId == id)
                        {
                            localPlayers.Add(player);
                        }
                    }
                }
                break;

            case (byte)CustomRPC.ResetVaribles:
                Main.Config.SetConfigSettings();
                Main.Logic.AllModPlayerControl.Clear();
                killedPlayers.Clear();
                List <PlayerControl> crewmates = PlayerControl.AllPlayerControls.ToArray().ToList();
                foreach (PlayerControl plr in crewmates)
                {
                    Main.Logic.AllModPlayerControl.Add(new ModPlayerControl {
                        PlayerControl = plr, Role = "Impostor", UsedAbility = false, LastAbilityTime = null, Immortal = false
                    });
                }
                crewmates.RemoveAll(x => x.Data.IsImpostor);
                foreach (PlayerControl plr in crewmates)
                {
                    plr.getModdedControl().Role = "Crewmate";
                }
                break;

            case (byte)CustomRPC.SetMedic:
                byte MedicId = ALMCIJKELCP.ReadByte();
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    if (player.PlayerId == MedicId)
                    {
                        player.getModdedControl().Role = "Medic";
                    }
                }
                break;

            case (byte)CustomRPC.SetProtected:
                byte ProtectedId = ALMCIJKELCP.ReadByte();
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    if (player.PlayerId == ProtectedId)
                    {
                        player.getModdedControl().Immortal = true;
                    }
                }
                break;

            case (byte)CustomRPC.SetOfficer:
                byte OfficerId = ALMCIJKELCP.ReadByte();
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    if (player.PlayerId == OfficerId)
                    {
                        player.getModdedControl().Role = "Officer";
                    }
                }
                break;

            case (byte)CustomRPC.OfficerKill:
                var           killerid = ALMCIJKELCP.ReadByte();
                var           targetid = ALMCIJKELCP.ReadByte();
                PlayerControl killer   = PlayerTools.getPlayerById(killerid);
                PlayerControl target   = PlayerTools.getPlayerById(targetid);
                killer.MurderPlayer(target);
                if (target.isPlayerImmortal())
                {
                    BreakShield(false);
                }
                break;

            case (byte)CustomRPC.SetEngineer:
                byte EngineerId = ALMCIJKELCP.ReadByte();
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    if (player.PlayerId == EngineerId)
                    {
                        player.getModdedControl().Role = "Engineer";
                    }
                }
                break;

            case (byte)CustomRPC.SetJoker:
                byte JokerId = ALMCIJKELCP.ReadByte();
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    if (player.PlayerId == JokerId)
                    {
                        player.getModdedControl().Role = "Joker";
                    }
                }
                break;

            case (byte)CustomRPC.JokerWin:
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    if (!player.isPlayerRole("Joker"))
                    {
                        player.RemoveInfected();
                        player.Die(DeathReason.Exile);
                        player.Data.IsDead     = true;
                        player.Data.IsImpostor = false;
                    }
                }
                PlayerControl joker = Main.Logic.getRolePlayer("Joker").PlayerControl;
                joker.Revive();
                joker.Data.IsDead     = false;
                joker.Data.IsImpostor = true;
                break;
            }
        }
Esempio n. 17
0
        static void Postfix(byte HKHMBLJFLMC, MessageReader ALMCIJKELCP)
        {
            byte          packetId = HKHMBLJFLMC;
            MessageReader reader   = ALMCIJKELCP;

            switch (packetId)
            {
            case (byte)CustomRPC.ShieldBreak:
                if (MedicSettings.Protected != null)
                {
                    MedicSettings.Protected.myRend.material.SetColor("_VisorColor", Palette.VisorColor);
                    MedicSettings.Protected.myRend.material.SetFloat("_Outline", 0f);
                }
                MedicSettings.Protected = null;
                break;

            case (byte)CustomRPC.FixLights:
                SwitchSystem switchSystem = ShipStatus.Instance.Systems[SystemTypes.Electrical].Cast <SwitchSystem>();
                switchSystem.ActualSwitches = switchSystem.ExpectedSwitches;
                break;

            case (byte)CustomRPC.SetLocalPlayers:
                ConsoleTools.Info("Setting Local Players...");
                localPlayers.Clear();
                localPlayer = PlayerControl.LocalPlayer;
                var localPlayerBytes = ALMCIJKELCP.ReadBytesAndSize();

                foreach (byte id in localPlayerBytes)
                {
                    foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                    {
                        if (player.PlayerId == id)
                        {
                            localPlayers.Add(player);
                        }
                    }
                }
                break;

            case (byte)RPC.SetInfected:
            {
                ConsoleTools.Info("set infected.");
                break;
            }

            case (byte)CustomRPC.ResetVaribles:
            {
                MedicSettings.ClearSettings();
                OfficerSettings.ClearSettings();
                EngineerSettings.ClearSettings();
                JokerSettings.ClearSettings();
                MedicSettings.SetConfigSettings();
                OfficerSettings.SetConfigSettings();
                EngineerSettings.SetConfigSettings();
                JokerSettings.SetConfigSettings();
                killedPlayers.Clear();
                break;
            }

            case (byte)CustomRPC.SetMedic:
            {
                ConsoleTools.Info("Medic Set Through RPC!");
                byte MedicId = ALMCIJKELCP.ReadByte();
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    if (player.PlayerId == MedicId)
                    {
                        MedicSettings.Medic = player;
                    }
                }
                break;
            }

            case (byte)CustomRPC.SetProtected:
            {
                byte ProtectedId = ALMCIJKELCP.ReadByte();
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    if (player.PlayerId == ProtectedId)
                    {
                        MedicSettings.Protected = player;
                    }
                }
                break;
            }

            case (byte)CustomRPC.SetOfficer:
            {
                ConsoleTools.Info("Officer Set Through RPC!");
                byte OfficerId = ALMCIJKELCP.ReadByte();
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    if (player.PlayerId == OfficerId)
                    {
                        OfficerSettings.Officer = player;
                    }
                }
                break;
            }

            case (byte)CustomRPC.OfficerKill:
            {
                var           killerid = ALMCIJKELCP.ReadByte();
                var           targetid = ALMCIJKELCP.ReadByte();
                PlayerControl killer   = PlayerTools.getPlayerById(killerid);
                PlayerControl target   = PlayerTools.getPlayerById(targetid);
                killer.MurderPlayer(target);
                break;
            }

            case (byte)CustomRPC.SetEngineer:
            {
                ConsoleTools.Info("Engineer Set Through RPC!");
                byte EngineerId = ALMCIJKELCP.ReadByte();
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    if (player.PlayerId == EngineerId)
                    {
                        EngineerSettings.Engineer = player;
                    }
                }
                break;
            }

            case (byte)CustomRPC.SetJoker:
            {
                ConsoleTools.Info("Joker Set Through RPC!");
                byte JokerId = ALMCIJKELCP.ReadByte();
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    if (player.PlayerId == JokerId)
                    {
                        JokerSettings.Joker = player;
                    }
                }
                break;
            }

            case (byte)CustomRPC.JokerWin:
                foreach (PlayerControl player in PlayerControl.AllPlayerControls)
                {
                    player.RemoveInfected();
                    player.Die(DeathReason.Exile);
                    player.Data.IsDead     = true;
                    player.Data.IsImpostor = false;
                }
                JokerSettings.Joker.Revive();
                JokerSettings.Joker.Data.IsDead     = false;
                JokerSettings.Joker.Data.IsImpostor = true;
                break;
            }
        }