Exemplo n.º 1
0
            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)]);
            }
Exemplo n.º 2
0
 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 });
 }
Exemplo n.º 3
0
            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);
            }
Exemplo n.º 4
0
            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);
            }