public static void Postfix(Il2CppReferenceArray <GameData.PlayerInfo> FMAOEJEHPAO) { MessageWriter writer = AmongUsClient.Instance.StartRpcImmediately(PlayerControl.LocalPlayer.NetId, (byte)CustomRPC.ResetVaribles, Hazel.SendOption.None, -1); AmongUsClient.Instance.FinishRpcImmediately(writer); RPCProcedure.resetVariables(); List <PlayerControl> crewmates = PlayerControl.AllPlayerControls.ToArray().ToList(); crewmates.RemoveAll(x => x.Data.IsImpostor); List <PlayerControl> impostors = PlayerControl.AllPlayerControls.ToArray().ToList(); impostors.RemoveAll(x => !x.Data.IsImpostor); // Special roles impostors can be converted to if (impostors.Count >= 3 && (rnd.Next(1, 101) <= BonusRolesPlugin.mafiaSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Godfather, impostors); setRoleToRandomPlayer((byte)RoleId.Janitor, impostors); setRoleToRandomPlayer((byte)RoleId.Mafioso, impostors); } if (impostors.Count >= 1 && (rnd.Next(1, 101) <= BonusRolesPlugin.morphlingSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Morphling, impostors); } if (impostors.Count >= 1 && (rnd.Next(1, 101) <= BonusRolesPlugin.camouflagerSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Camouflager, impostors); } // Special roles that involve crewmates and impostors if (rnd.Next(1, 101) <= BonusRolesPlugin.loversSpawnChance.GetValue()) { if (impostors.Count > 0 && crewmates.Count > 0 && rnd.Next(1, 101) <= 33) { setRoleToRandomPlayer((byte)RoleId.Lover1, impostors); setRoleToRandomPlayer((byte)RoleId.Lover2, crewmates); } else if (crewmates.Count >= 2) { setRoleToRandomPlayer((byte)RoleId.Lover1, crewmates); setRoleToRandomPlayer((byte)RoleId.Lover2, crewmates); } } // Special roles crewmates can be converted to if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.jesterSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Jester, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.mayorSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Mayor, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.engineerSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Engineer, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.sheriffSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Sheriff, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.lighterSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Lighter, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.detectiveSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Detective, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.timeMasterSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.TimeMaster, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.medicSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Medic, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.shifterSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Shifter, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.swapperSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Swapper, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.seerSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Seer, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.spySpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Spy, crewmates); } if (crewmates.Count > 0 && (rnd.Next(1, 101) <= BonusRolesPlugin.childSpawnChance.GetValue())) { setRoleToRandomPlayer((byte)RoleId.Child, crewmates); } }
static void Postfix(byte ACCJCEHMKLN, MessageReader HFPCBBHJIPJ) { byte packetId = ACCJCEHMKLN; MessageReader reader = HFPCBBHJIPJ; switch (packetId) { // Main Controls case (byte)CustomRPC.ResetVaribles: RPCProcedure.resetVariables(); break; case (byte)CustomRPC.ForceEnd: RPCProcedure.forceEnd(); break; case (byte)CustomRPC.SetRole: byte roleId = HFPCBBHJIPJ.ReadByte(); byte playerId = HFPCBBHJIPJ.ReadByte(); RPCProcedure.setRole(roleId, playerId); break; // Role functionality case (byte)CustomRPC.JesterWin: RPCProcedure.jesterWin(); break; case (byte)CustomRPC.EngineerFixLights: RPCProcedure.engineerFixLights(); break; case (byte)CustomRPC.EngineerUsedRepair: RPCProcedure.engineerUsedRepair(); break; case (byte)CustomRPC.JanitorClean: RPCProcedure.janitorClean(HFPCBBHJIPJ.ReadByte()); break; case (byte)CustomRPC.SheriffKill: RPCProcedure.sheriffKill(HFPCBBHJIPJ.ReadByte()); break; case (byte)CustomRPC.TimeMasterRewindTime: RPCProcedure.timeMasterRewindTime(); break; case (byte)CustomRPC.MedicSetShielded: RPCProcedure.medicSetShielded(HFPCBBHJIPJ.ReadByte()); break; case (byte)CustomRPC.ShieldedMurderAttempt: RPCProcedure.shieldedMurderAttempt(); break; case (byte)CustomRPC.TimeMasterRevive: RPCProcedure.timeMasterRevive(HFPCBBHJIPJ.ReadByte()); break; case (byte)CustomRPC.ShifterShift: RPCProcedure.shifterShift(HFPCBBHJIPJ.ReadByte()); break; case (byte)CustomRPC.SwapperSwap: byte playerId1 = HFPCBBHJIPJ.ReadByte(); byte playerId2 = HFPCBBHJIPJ.ReadByte(); RPCProcedure.swapperSwap(playerId1, playerId2); break; case (byte)CustomRPC.SeerReveal: RPCProcedure.seerReveal(HFPCBBHJIPJ.ReadByte()); break; case (byte)CustomRPC.MorphlingMorph: RPCProcedure.morphlingMorph(HFPCBBHJIPJ.ReadByte()); break; case (byte)CustomRPC.CamouflagerCamouflage: RPCProcedure.camouflagerCamouflage(); break; case (byte)CustomRPC.ChildDied: RPCProcedure.childDied(); break; case (byte)CustomRPC.LoverSuicide: RPCProcedure.loverSuicide(HFPCBBHJIPJ.ReadByte()); break; } }