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; }
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()); }
private Panel GetPanel(RoleSlot roleSlot) { return(roleSlot.Team == Team.Town ? roleSlot.ShortName == "RT" ? pRandomTown : pTown : pEvil); }