protected Item FindRandomContainer(ICollection <Traitor> traitors, ItemPrefab targetPrefabCandidate, bool includeNew, bool includeExisting) { List <Item> suitableItems = new List <Item>(); foreach (Item item in Item.ItemList) { if (item.Submarine == null || traitors.All(traitor => item.Submarine.TeamID != traitor.Character.TeamID)) { continue; } if (item.GetComponent <ItemContainer>() != null && allowedContainerIdentifiers.Contains(item.prefab.Identifier)) { if ((includeNew && !item.OwnInventory.IsFull()) || (includeExisting && item.OwnInventory.FindItemByIdentifier(targetPrefabCandidate.Identifier) != null)) { suitableItems.Add(item); } } } if (suitableItems.Count == 0) { return(null); } return(suitableItems[TraitorMission.Random(suitableItems.Count)]); }
public Traitor(TraitorMission mission, string role, Character character) { Mission = mission; Role = role; Character = character; Character.IsTraitor = true; GameMain.NetworkMember.CreateEntityEvent(Character, new object[] { NetEntityEvent.Type.Status }); }
public bool Start(Traitor traitor) { Traitor = traitor; activeGoals.Clear(); pendingGoals.Clear(); completedGoals.Clear(); var allGoalsCount = allGoals.Count; var indices = allGoals.Select((goal, index) => index).ToArray(); if (shuffleGoalsCount > 0) { for (var i = allGoalsCount; i > 1;) { int j = TraitorMission.Random(i--); var temp = indices[j]; indices[j] = indices[i]; indices[i] = temp; } } for (var i = 0; i < allGoalsCount; ++i) { var goal = allGoals[indices[i]]; if (goal.Start(traitor)) { activeGoals.Add(goal); pendingGoals.Add(goal); if (shuffleGoalsCount > 0 && pendingGoals.Count >= shuffleGoalsCount) { break; } } else { completedGoals.Add(goal); } } if (pendingGoals.Count <= 0) { return(false); } IsStarted = true; traitor.SendChatMessageBox(StartMessageText); traitor.UpdateCurrentObjective(GoalInfos); return(true); }
protected Item FindRandomContainer(bool includeNew, bool includeExisting) { int itemsCount = Item.ItemList.Count; int startIndex = TraitorMission.Random(itemsCount); Item fallback = null; for (int i = 0; i < itemsCount; ++i) { var item = Item.ItemList[(i + startIndex) % itemsCount]; if (item.Submarine == null || item.Submarine.TeamID != Traitor.Character.TeamID) { continue; } if (item.GetComponent <ItemContainer>() != null && allowedContainerIdentifiers.Contains(item.prefab.Identifier)) { if ((includeNew && !item.OwnInventory.IsFull()) || (includeExisting && item.OwnInventory.FindItemByIdentifier(targetPrefab.Identifier) != null)) { return(item); } } } return(null); }