/// <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); } } }
/// <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(); }