Пример #1
0
        /// <summary>
        /// Update the current type of Boat to use for this Team
        /// </summary>
        internal void PromoteBoat()
        {
            var extraMembers = Boat.PositionCount;
            var newType      = PromotionTriggerCheck();

            if (string.IsNullOrEmpty(newType))
            {
                return;
            }
            Boat.Promote(newType);
            //store that the boat type has been changed
            Manager.UpdateSingleBelief(NPCBelief.BoatType, Boat.Type);
            if (Boat.Type == "Finish")
            {
                Finished = true;
                return;
            }
            //calculate how many new members should be created
            extraMembers = (Boat.PositionCount - extraMembers) * 2;
            //reset the positions on the boat to those for the new type
            for (var i = 0; i < extraMembers; i++)
            {
                var currentNames = crewMembers.Keys.ToList();
                currentNames.Add(ManagerName);
                //only create a new CrewMember if the crew limit can support it
                if (CanAddToCrew())
                {
                    var position  = Boat.GetWeakestPosition(CrewMembers.Values.Concat(Recruits.Values).ToList());
                    var newMember = new CrewMember(position, Nationality);
                    UniqueNameCheck(newMember);
                    newMember.CreateTeamMemberFile(iat, storageLocation, currentNames, TeamColorsPrimary, TeamColorsSecondary);
                    foreach (var cm in crewMembers.Values)
                    {
                        cm.CreateInitialOpinions(new List <string> {
                            newMember.Name
                        });
                    }
                    //if the boat is under-staffed for the current boat size, this new CrewMember is not counted
                    if (!CanRemoveFromCrew())
                    {
                        i--;
                    }
                    AddCrewMember(newMember);
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Add a recruit into crewMembers
        /// </summary>
        internal void AddRecruit(CrewMember member)
        {
            //remove recruit from the current list of characters in the game
            var path = Path.Combine(storageLocation, member.RolePlayCharacter.VoiceName + ".rpc").Replace("\\", "/");

            iat.RemoveCharacters(new List <int> {
                iat.GetAllCharacterSources().First(c => c.Source.Replace("\\", "/") == path).Id
            });
            //set up recruit as a 'proper' character in the game
            var currentNames = crewMembers.Keys.ToList();

            currentNames.Add(ManagerName);
            member.CreateTeamMemberFile(iat, storageLocation, currentNames, TeamColorsPrimary, TeamColorsSecondary);
            foreach (var cm in crewMembers.Values)
            {
                cm.CreateInitialOpinions(new List <string> {
                    member.Name
                }, true);
            }
            AddCrewMember(member);
            Recruits.Remove(member.Name);
            iat.Save();
        }