Esempio n. 1
0
        private void Add(RoleSlot roleSlot)
        {
            var panel         = GetPanel(roleSlot);
            var roleSlotLabel = new RoleSlotLabel(roleSlot)
            {
                Top = panel.Controls.Count * 26
            };

            panel.Controls.Add(roleSlotLabel);
            _roleSlotLabels.Add(roleSlotLabel);
        }
 public RoleSlotLabel(RoleSlot roleSlot)
 {
     InitializeComponent();
     lblRoleSlot.Text = roleSlot.Name;
     _roleSlot        = roleSlot;
 }
Esempio n. 3
0
        public static IEnumerable <RoleSlot> GetRoleSlots()
        {
            var roleSlots = new RoleSlot[RoleSlots.Length];

            for (var i = 0; i < roleSlots.Length; i++)
            {
                switch (RoleSlots[i].GetValue())
                {
                case 0:
                    roleSlots[i] = new RoleSlot(Faction.Crew);
                    break;

                case 1:
                    roleSlots[i] = new RoleSlot(Faction.Crew, Alignment.Investigative);
                    break;

                case 2:
                    roleSlots[i] = new RoleSlot(Faction.Crew, Alignment.Killing);
                    break;

                case 3:
                    roleSlots[i] = new RoleSlot(Faction.Crew, Alignment.Protective);
                    break;

                case 4:
                    roleSlots[i] = new RoleSlot(Faction.Crew, Alignment.Support);
                    break;

                case 5:
                    roleSlots[i] = new RoleSlot(Faction.Mafia);
                    break;

                case 6:
                    roleSlots[i] = new RoleSlot(Faction.Mafia, Alignment.Deception);
                    break;

                case 7:
                    roleSlots[i] = new RoleSlot(Faction.Mafia, Alignment.Killing);
                    break;

                case 8:
                    roleSlots[i] = new RoleSlot(Faction.Mafia, Alignment.Support);
                    break;

                case 9:
                    roleSlots[i] = new RoleSlot(Faction.Neutral);
                    break;

                case 10:
                    roleSlots[i] = new RoleSlot(Faction.Neutral, Alignment.Benign);
                    break;

                case 11:
                    roleSlots[i] = new RoleSlot(Faction.Neutral, Alignment.Chaos);
                    break;

                case 12:
                    roleSlots[i] = new RoleSlot(Faction.Neutral, Alignment.Evil);
                    break;

                case 13:
                    roleSlots[i] = new RoleSlot(Faction.Neutral, Alignment.Killing);
                    break;
                }
            }

            return(roleSlots);
        }
        public static void Prefix([HarmonyArgument(0)] out Il2CppReferenceArray <GameData.PlayerInfo> playerInfos)
        {
            List <Role> assignedRoles = AssignedRoles.Values.ToList();

            foreach (Role r in assignedRoles)
            {
                r.ClearSettings();
            }

            var infected = new List <GameData.PlayerInfo>();
            var roles    = new List <Role>();

            List <Role> availableRoles = Main.Roles.ToList();

            List <RoleSlot>      roleSlots        = Main.GetRoleSlots().ToList();
            List <PlayerControl> availablePlayers = AllPlayers.ToList();

            for (var i = 0; i < roleSlots.Count && availablePlayers.Count > 0; i++)
            {
                RoleSlot           roleSlot         = roleSlots[i];
                var                spawnChance      = 0;
                IEnumerable <Role> possibleRoles    = roleSlot.GetFittingRoles(availableRoles);
                var                roleSpawnChances = new List <RoleSpawnChancePair>();
                foreach (Role possibleRole in possibleRoles)
                {
                    roleSpawnChances.Add(new RoleSpawnChancePair(possibleRole,
                                                                 spawnChance += (int)Main.GetRoleSpawnChance(possibleRole.GetType())));
                }

                // IEnumerable<RoleSpawnChancePair> roleSpawnChances = roleSlot.GetFittingRoles(availableRoles).Select(role => new RoleSpawnChancePair(role, spawnChance += (int) Main.GetRoleSpawnChance(role.GetType())));
                int spawnValue = Rng.Next(spawnChance);
                foreach (RoleSpawnChancePair roleSpawnChance in roleSpawnChances)
                {
                    if (roleSpawnChance.spawnChance > spawnValue)
                    {
                        roles.Add(roleSpawnChance.role);
                        PlayerControl player = availablePlayers[Rng.Next(availablePlayers.Count)];
                        Role.RpcSetRole(roleSpawnChance.role, player);

                        availableRoles.Remove(roleSpawnChance.role);
                        availablePlayers.Remove(player);
                        if (roleSlots[i].IsInfected)
                        {
                            infected.Add(player.Data);
                        }

                        break;
                    }
                }

                /*
                 * Role role = roleSlots[i].GetRole(ref availableRoles);
                 * PlayerControl player = availablePlayers[Rng.Next(availablePlayers.Count)];
                 * Role.SetRole(role, player);
                 *
                 * availableRoles.Remove(role);
                 * availablePlayers.Remove(player);
                 * if (roleSlots[i].IsInfected)
                 * {
                 *  infected.Add(player.Data);
                 * }
                 */
            }

            foreach (Role role in roles)
            {
                role.InitializeRole();
            }

            int killAbilitiesToAdd = (int)Main.OptionMafiaKillStart - roles.Count(role =>
                                                                                  role.Faction == Faction.Mafia && role.GetAbility <AbilityKill>() != null);

            // TODO: Randomize order of adding killAbilities, so you don't have an advantage if you log into lobby earlier than another one
            for (var i = 0; i < roles.Count && killAbilitiesToAdd > 0; i++)
            {
                Role role = roles[i];
                if (role.Faction != Faction.Mafia || role.GetAbility <AbilityKill>() != null)
                {
                    continue;
                }

                role.AddAbility <Mafioso, AbilityKill>(true);
                WriteRPC(RPC.AddKillAbility, role.Owner.PlayerId);
                killAbilitiesToAdd--;
            }

            playerInfos = new Il2CppReferenceArray <GameData.PlayerInfo>(infected.ToArray());
        }
Esempio n. 5
0
 private Panel GetPanel(RoleSlot roleSlot)
 {
     return(roleSlot.Team == Team.Town ? roleSlot.ShortName == "RT" ? pRandomTown : pTown : pEvil);
 }