![]() |
|
IL-2 Sturmovik: Cliffs of Dover Latest instalment in the acclaimed IL-2 Sturmovik series from award-winning developer Maddox Games. |
|
Thread Tools | Display Modes |
#11
|
|||
|
|||
![]()
Furbs, you should be ashamed. Below is a small sample script of getting co-op to work.It is actually much larger but there is a 50,000 character limit here.
As you can clearly see, it practically writes itself! Not sure why this would discourage any newcomers to the COD family. #region Settings private int missionPendingTime = 5; private int missionCycleTime = 15; private int missionDuration = 60; private bool forceRandom = false; /// <summary> /// The names of the players that have hosting permissions. /// </summary> /// <remarks> /// Add the names of the player that have admin rights. /// </remarks> private List<string> hostPlayers = new List<string> { //"41Sqn_Skipper", }; /// <summary> /// The sub folder that contains the available missions. /// </summary> /// <remarks> /// The folder must be below "C:\Users\*username*\Documents\1C SoftClub\il-2 sturmovik cliffs of dover\missions". /// </remarks> /// <example> /// Set "" to make all missions available. /// </example> private const string missionsSubFolder = @""; // e.g. "\Custom\Server\Kanalkampf" /// <summary> /// The name of the map of the lobby mission. /// </summary> /// <remarks> /// Only missions that stage on the same map can be loaded from the lobby mission. /// </remarks> private string mapName = "Land$English_Channel_1940"; #endregion /// <summary> /// The ids of the different OrderMissionMenus. /// </summary> private enum MainMenuID { HostMainMenu, ClientMainMenu, OpenMissionMenu, CloseMissionMenu, StartMissionMenu, SelectMissionMenu, SelectAircraftMenu, PlayerMenu, } private class CoopMission { public enum MissionState { None, Pending, Running, Finished, } public CoopMission(string missionFileName) { this.MissionFileName = missionFileName; this.State = MissionState.None; } public MissionState State { get; set; } public int MissionNumber { get; set; } public string MissionFileName { get; set; } public string DisplayName { get { if (State == MissionState.None) { return createMissionFileDisplayName(this.MissionFileName) ; } else { return createMissionFileDisplayName(this.MissionFileName) + " (" + State.ToString() + ")"; } } } public List<string> ForcedIdleAirGroups { get { return this.forcedIdleAirGroups; } } private List<string> forcedIdleAirGroups = new List<string>(); public Dictionary<string, Player> AircraftPlaceSelections { get { return this.aircraftPlaceSelections; } } Dictionary<string, Player> aircraftPlaceSelections = new Dictionary<string, Player>(); public List<AiActor> AiActors { get { return this.aiActors; } } List<AiActor> aiActors = new List<AiActor>(); } private Random rand = new Random(); private List<CoopMission> missions = new List<CoopMission>(); private Dictionary<Player, CoopMission> missionSelections = new Dictionary<Player, CoopMission>(); private Dictionary<Player, int> menuOffsets = new Dictionary<Player, int>(); private static string createMissionFileDisplayName(string missionFileName) { return missionFileName.Replace(Environment.GetFolderPath( Environment.SpecialFolder.MyDocuments) + @"\1C SoftClub\il-2 sturmovik cliffs of dover\missions" + missionsSubFolder, ""); } private List<string> getMissionFileNames() { string missionsFolderPath = Environment.GetFolderPath(Environment.SpecialFolde r.MyDocuments) + @"\1C SoftClub\il-2 sturmovik cliffs of dover\missions" + missionsSubFolder; string[] tempMissionFileNames = Directory.GetFiles(missionsFolderPath, "*.mis", SearchOption.AllDirectories); List<string> missionFileNames = new List<string>(); foreach (string tempMissionFileName in tempMissionFileNames) { if (tempMissionFileName.EndsWith(".mis")) { ISectionFile tempMissionFile = GamePlay.gpLoadSectionFile(tempMissionFileName); if (tempMissionFile.get("MAIN", "MAP") == mapName) { missionFileNames.Add(tempMissionFileName); } } } return missionFileNames; } private List<string> getAircraftPlaceDisplayNames(Player player) { List<string> aircraftPlaceDisplayNames = new List<string>(); if(missionSelections.ContainsKey(player)) { CoopMission mission = missionSelections[player]; if (mission.State == CoopMission.MissionState.Pending) { ISectionFile selectedMissionFile = GamePlay.gpLoadSectionFile(mission.MissionFileName ); for (int airGroupIndex = 0; airGroupIndex < selectedMissionFile.lines("AirGroups"); airGroupIndex++) { string key; string value; selectedMissionFile.get("AirGroups", airGroupIndex, out key, out value); string aircraftType = selectedMissionFile.get(key, "Class"); // Remove the flight mask string airGroupName = key.Substring(0, key.Length - 1); for (int flightIndex = 0; flightIndex < 4; flightIndex++) { if (selectedMissionFile.exist(key, "Flight" + flightIndex.ToString(System.Globalization.CultureI nfo.InvariantCulture.NumberFormat))) { string acNumberLine = selectedMissionFile.get(key, "Flight" + flightIndex.ToString(System.Globalization.CultureI nfo.InvariantCulture.NumberFormat)); string[] acNumberList = acNumberLine.Split(new char[] { ' ' }); if (acNumberList != null && acNumberList.Length > 0) { for (int aircraftIndex = 0; aircraftIndex < acNumberList.Length; aircraftIndex++) { string aircraft = airGroupName + flightIndex.ToString(System.Globalization.CultureI nfo.InvariantCulture.NumberFormat) + aircraftIndex.ToString(System.Globalization.Cultur eInfo.InvariantCulture.NumberFormat); if (getPlaces(aircraftType) != null) { int placeIndex = 0; foreach (string place in getPlaces(aircraftType)) { string aircraftPlaceDisplayName = key + " " + aircraftType + " " + place; placeIndex++; aircraftPlaceDisplayNames.Add(aircraftPlaceDisplay Name); } } } } } } } } else if (mission.State == CoopMission.MissionState.Running) { if (GamePlay.gpArmies() != null && GamePlay.gpArmies().Length > 0) { foreach (int armyIndex in GamePlay.gpArmies()) { if (GamePlay.gpAirGroups(armyIndex) != null && GamePlay.gpAirGroups(armyIndex).Length > 0) { foreach (AiAirGroup airGroup in GamePlay.gpAirGroups(armyIndex)) { if (airGroup.Name().StartsWith(mission.MissionNumber + ":")) { if (airGroup.GetItems() != null && airGroup.GetItems().Length > 0) { foreach (AiActor actor in airGroup.GetItems()) { if (actor is AiAircraft) { AiAircraft aircraft = actor as AiAircraft; if (aircraft.Places() > 0) { for (int placeIndex = 0; placeIndex < aircraft.Places(); placeIndex++) { if (aircraft.ExistCabin(placeIndex)) { string aircraftPlaceDisplayName = airGroup.Name().Replace(mission.MissionNumber + ":", "") + " " + aircraft.InternalTypeName() + " " + aircraft.CrewFunctionPlace(placeIndex).ToString(); aircraftPlaceDisplayNames.Add(aircraftPlaceDisplay Name); } } } } } } } } } } } } } return aircraftPlaceDisplayNames; } private string getAircraftPlaceDisplayName(Player player, string aircraftPlace) { if (missionSelections.ContainsKey(player)) { CoopMission mission = missionSelections[player]; if (mission.State == CoopMission.MissionState.Pending) { ISectionFile selectedMissionFile = GamePlay.gpLoadSectionFile(mission.MissionFileName ); for (int airGroupIndex = 0; airGroupIndex < selectedMissionFile.lines("AirGroups"); airGroupIndex++) { string key; string value; selectedMissionFile.get("AirGroups", airGroupIndex, out key, out value); string aircraftType = selectedMissionFile.get(key, "Class"); // Remove the flight mask string airGroupName = key.Substring(0, key.Length - 1); for (int flightIndex = 0; flightIndex < 4; flightIndex++) { if (selectedMissionFile.exist(key, "Flight" + flightIndex.ToString(System.Globalization.CultureI nfo.InvariantCulture.NumberFormat))) { string acNumberLine = selectedMissionFile.get(key, "Flight" + flightIndex.ToString(System.Globalization.CultureI nfo.InvariantCulture.NumberFormat)); string[] acNumberList = acNumberLine.Split(new char[] { ' ' }); if (acNumberList != null && acNumberList.Length > 0) { for (int aircraftIndex = 0; aircraftIndex < acNumberList.Length; aircraftIndex++) { string aircraft = airGroupName + flightIndex.ToString(System.Globalization.CultureI nfo.InvariantCulture.NumberFormat) + aircraftIndex.ToString(System.Globalization.Cultur eInfo.InvariantCulture.NumberFormat); if (getPlaces(aircraftType) != null) { uint placeIndex = 0; foreach (string place in getPlaces(aircraftType)) { if (aircraftPlace == aircraft + "@" + placeIndex) { return key + " " + aircraftType + " " + place; } placeIndex++; } } } } } } } } else if (mission.State == CoopMission.MissionState.Running) { if (GamePlay.gpArmies() != null && GamePlay.gpArmies().Length > 0) { foreach (int armyIndex in GamePlay.gpArmies()) { if (GamePlay.gpAirGroups(armyIndex) != null && GamePlay.gpAirGroups(armyIndex).Length > 0) { foreach (AiAirGroup airGroup in GamePlay.gpAirGroups(armyIndex)) { if (airGroup.Name().StartsWith(mission.MissionNumber + ":")) { if (airGroup.GetItems() != null && airGroup.GetItems().Length > 0) { foreach (AiActor actor in airGroup.GetItems()) { if (actor is AiAircraft) { AiAircraft aircraft = actor as AiAircraft; if (aircraft.Places() > 0) { for (int placeIndex = 0; placeIndex < aircraft.Places(); placeIndex++) { if (aircraft.ExistCabin(placeIndex)) { if (aircraftPlace == aircraft.Name().Replace(mission.MissionNumber + ":", "") + "@" + placeIndex) { return airGroup.Name().Replace(mission.MissionNumber + ":", "") + " " + aircraft.InternalTypeName().Replace("bob:", "") + " " + aircraft.CrewFunctionPlace(placeIndex).ToString(); } } } } } } } } } } } } } } return ""; } private List<string> getAircraftPlaces(Player player) { List<string> aircraftPlaces = new List<string>(); if (missionSelections.ContainsKey(player)) { CoopMission mission = missionSelections[player]; if (mission.State == CoopMission.MissionState.Pending) { ISectionFile selectedMissionFile = GamePlay.gpLoadSectionFile(mission.MissionFileName ); for (int airGroupIndex = 0; airGroupIndex < selectedMissionFile.lines("AirGroups"); airGroupIndex++) { string key; string value; selectedMissionFile.get("AirGroups", airGroupIndex, out key, out value); string aircraftType = selectedMissionFile.get(key, "Class"); // Remove the flight mask string airGroupName = key.Substring(0, key.Length - 1); for (int flightIndex = 0; flightIndex < 4; flightIndex++) { if (selectedMissionFile.exist(key, "Flight" + flightIndex.ToString(System.Globalization.CultureI nfo.InvariantCulture.NumberFormat))) { string acNumberLine = selectedMissionFile.get(key, "Flight" + flightIndex.ToString(System.Globalization.CultureI nfo.InvariantCulture.NumberFormat)); string[] acNumberList = acNumberLine.Split(new char[] { ' ' }); if (acNumberList != null && acNumberList.Length > 0) { for (int aircraftIndex = 0; aircraftIndex < acNumberList.Length; aircraftIndex++) { string aircraft = airGroupName + flightIndex.ToString(System.Globalization.CultureI nfo.InvariantCulture.NumberFormat) + aircraftIndex.ToString(System.Globalization.Cultur eInfo.InvariantCulture.NumberFormat); if (getPlaces(aircraftType) != null) { uint placeIndex = 0; foreach (string place in getPlaces(aircraftType)) { string aircraftPlace = aircraft + "@" + placeIndex; placeIndex++; aircraftPlaces.Add(aircraftPlace); } } } } } } } } else if (mission.State == CoopMission.MissionState.Running) { if (GamePlay.gpArmies() != null && GamePlay.gpArmies().Length > 0) { foreach (int armyIndex in GamePlay.gpArmies()) { if (GamePlay.gpAirGroups(armyIndex) != null && GamePlay.gpAirGroups(armyIndex).Length > 0) { foreach (AiAirGroup airGroup in GamePlay.gpAirGroups(armyIndex)) { if (airGroup.Name().StartsWith(mission.MissionNumber + ":")) { if (airGroup.GetItems() != null && airGroup.GetItems().Length > 0) { foreach (AiActor actor in airGroup.GetItems()) { if (actor is AiAircraft) { AiAircraft aircraft = actor as AiAircraft; if (aircraft.Places() > 0) { for (int placeIndex = 0; placeIndex < aircraft.Places(); placeIndex++) { if (aircraft.ExistCabin(placeIndex)) { string aircraftPlace = aircraft.Name().Replace(mission.MissionNumber + ":", "") + "@" + placeIndex; aircraftPlaces.Add(aircraftPlace); } } } } } } } } } } } } } return aircraftPlaces; } public override void OnBattleStarted() { base.OnBattleStarted(); MissionNumberListener = -1; if (GamePlay.gpIsServerDedicated() == true || forceRandom == true) { openRandomMission(); } } private void openRandomMission() { List<string> missionFileNames = getMissionFileNames(); int missionFileIndex = rand.Next(0, missionFileNames.Count); string missionFileName = missionFileNames[missionFileIndex]; CoopMission coopMission = new CoopMission(missionFileName); missions.Add(coopMission); openMission(coopMission); List<Player> players = new List<Player>(); if (GamePlay.gpPlayer() != null) { players.Add(GamePlay.gpPlayer()); } if (GamePlay.gpRemotePlayers() != null && GamePlay.gpRemotePlayers().Length > 0) { players.AddRange(GamePlay.gpRemotePlayers()); } GamePlay.gpLogServer(players.ToArray(), "New random mission.", null); Timeout((missionPendingTime * 60), () => { startMission(coopMission); }); Timeout((missionDuration * 60), () => { closeMission(coopMission); }); Timeout((missionCycleTime * 60), () => { openRandomMission(); }); } public override void OnActorCreated(int missionNumber, string shortName, AiActor actor) { base.OnActorCreated(missionNumber, shortName, actor); foreach (CoopMission mission in missions) { if (mission.MissionNumber == missionNumber) { foreach (string aircraftSelection in mission.AircraftPlaceSelections.Keys) { string aircraftName = aircraftSelection.Remove(aircraftSelection.IndexOf ("@"), aircraftSelection.Length - aircraftSelection.IndexOf("@")); if (missionNumber.ToString(System.Globalization.Cultu reInfo.InvariantCulture.NumberFormat) + ":" + aircraftName == actor.Name()) { Timeout(3.0, () => { placePlayer(mission.AircraftPlaceSelections[aircraftSelection]); }); } } mission.AiActors.Add(actor); } } } public override void OnOrderMissionMenuSelected(Player player, int ID, int menuItemIndex) { if (ID == (int)MainMenuID.HostMainMenu) { if (menuItemIndex == 1) { setOpenMissionMenu(player); } if (menuItemIndex == 2) { setCloseMissionMenu(player); } else if (menuItemIndex == 3) { setStartMissionMenu(player); } if (menuItemIndex == 4) { setSelectMissionMenu(player); } if (menuItemIndex == 5) { setSelectAircraftMenu(player); } else if (menuItemIndex == 6) { setPlayerMenu(player); } } else if (ID == (int)MainMenuID.ClientMainMenu) { if (menuItemIndex == 1) { setSelectMissionMenu(player); } if (menuItemIndex == 2) { setSelectAircraftMenu(player); } else if (menuItemIndex == 3) { setPlayerMenu(player); } } else if (ID == (int)MainMenuID.SelectMissionMenu) { if (menuItemIndex == 0) { setMainMenu(player); } else { if (menuItemIndex == ![]() { menuOffsets[player] = menuOffsets[player] - 1; setSelectMissionMenu(player); } else if (menuItemIndex == 9) { menuOffsets[player] = menuOffsets[player] + 1; setSelectMissionMenu(player); } else { if (menuItemIndex - 1 + (menuOffsets[player] * 7) < missions.Count) { CoopMission mission = missions[menuItemIndex - 1 + (menuOffsets[player] * 7)]; missionSelections[player] = mission; setMainMenu(player); } else { // No handling needed as menu item is not displayed. } } } } else if (ID == (int)MainMenuID.SelectAircraftMenu) { if (menuItemIndex == 0) { setMainMenu(player); } else { if (menuItemIndex == ![]() { menuOffsets[player] = menuOffsets[player] - 1; setSelectAircraftMenu(player); } else if (menuItemIndex == 9) { menuOffsets[player] = menuOffsets[player] + 1; setSelectAircraftMenu(player); } else { if (menuItemIndex - 1 + (menuOffsets[player] * 7) < getAircraftPlaces(player).Count) { if(missionSelections.ContainsKey(player)) { CoopMission mission = missionSelections[player]; List<string> aircraftPlaces = getAircraftPlaces(player); List<string> aircraftPlaceDisplayNames = getAircraftPlaceDisplayNames(player); if (!mission.AircraftPlaceSelections.ContainsKey(airc raftPlaces[menuItemIndex - 1 + (menuOffsets[player] * 7)])) { foreach(string aircraftPlace in mission.AircraftPlaceSelections.Keys) { if(mission.AircraftPlaceSelections[aircraftPlace] == player) { mission.AircraftPlaceSelections.Remove(aircraftPla ce); break; } } mission.AircraftPlaceSelections[aircraftPlaces[menuItemIndex - 1 + (menuOffsets[player] * 7)]] = player; placePlayer(player); GamePlay.gpLogServer(new Player[] { player }, "Aircraft selected: " + aircraftPlaceDisplayNames[menuItemIndex - 1 + (menuOffsets[player] * 7)], null); setMainMenu(player); } else { GamePlay.gpLogServer(new Player[] { player }, "Aircraft is already occupied.", null); setSelectAircraftMenu(player); } } else { // No handling needed as menu item is not displayed. } } else { // No handling needed as menu item is not displayed. } } } } else if (ID == (int)MainMenuID.PlayerMenu) { if (menuItemIndex == 0) { setMainMenu(player); } else { if (menuItemIndex == ![]() { menuOffsets[player] = menuOffsets[player] - 1; setPlayerMenu(player); } else if (menuItemIndex == 9) { menuOffsets[player] = menuOffsets[player] + 1; setPlayerMenu(player); } else { setPlayerMenu(player); } } } else if (ID == (int)MainMenuID.OpenMissionMenu) { if (menuItemIndex == 0) { setMainMenu(player); } else { if (menuItemIndex == ![]() { menuOffsets[player] = menuOffsets[player] - 1; setOpenMissionMenu(player); } else if (menuItemIndex == 9) { menuOffsets[player] = menuOffsets[player] + 1; setOpenMissionMenu(player); } else { List<string> missionFileNames = getMissionFileNames(); if (menuItemIndex - 1 + (menuOffsets[player] * 7) < missionFileNames.Count) { string missionFileName = missionFileNames[menuItemIndex - 1 + (menuOffsets[player] * 7)]; CoopMission mission = new CoopMission(missionFileName); missions.Add(mission); openMission(mission); GamePlay.gpLogServer(new Player[] { player }, "Mission pending: " + mission.DisplayName, null); setMainMenu(player); } else { // No handling needed as menu item is not displayed. } } } } else if (ID == (int)MainMenuID.CloseMissionMenu) { if (menuItemIndex == 0) { setMainMenu(player); } else { if (menuItemIndex == ![]() { menuOffsets[player] = menuOffsets[player] - 1; setCloseMissionMenu(player); } else if (menuItemIndex == 9) { menuOffsets[player] = menuOffsets[player] + 1; setCloseMissionMenu(player); } else { if (menuItemIndex - 1 + (menuOffsets[player] * 7) < missions.Count) { CoopMission mission = missions[menuItemIndex - 1 + (menuOffsets[player] * 7)]; closeMission(mission); GamePlay.gpLogServer(new Player[] { player }, "Mission closed: " + mission.DisplayName, null); setMainMenu(player); } else { // No handling needed as menu item is not displayed. } } } } else if (ID == (int)MainMenuID.StartMissionMenu) { if (menuItemIndex == 0) { setMainMenu(player); } else { if (menuItemIndex == ![]() { menuOffsets[player] = menuOffsets[player] - 1; setStartMissionMenu(player); } else if (menuItemIndex == 9) { menuOffsets[player] = menuOffsets[player] + 1; setStartMissionMenu(player); } else { if (menuItemIndex - 1 + (menuOffsets[player] * 7) < missions.Count) { CoopMission mission = missions[menuItemIndex - 1 + (menuOffsets[player] * 7)]; startMission(mission); GamePlay.gpLogServer(new Player[] { player }, "Mission started: " + mission.DisplayName, null); setMainMenu(player); } else { // No handling needed as menu item is not displayed. } } } } } public override void OnPlayerDisconnected(Player player, string diagnostic) { base.OnPlayerDisconnected(player, diagnostic); if (missionSelections.ContainsKey(player)) { foreach (string aircraftSelection in missionSelections[player].AircraftPlaceSelections.Keys) { if (missionSelections[player].AircraftPlaceSelections[aircraftSelection] == player) { missionSelections[player].AircraftPlaceSelections.Remove(aircraftSelection) ; break; } } } missionSelections.Remove(player); } public override void OnPlayerArmy(Player player, int army) { base.OnPlayerArmy(player, army); assignToLobbyAircraft(player); } public override void OnActorDestroyed(int missionNumber, string shortName, AiActor actor) { base.OnActorDestroyed(missionNumber, shortName, actor); assignPlayersOfActorToLobbyAircraft(actor); } public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex) { base.OnPlaceEnter(player, actor, placeIndex); setMainMenu(player); } /// <summary> /// Assigns all players that occupy a place of the actor to one of the lobby aircrafts. /// </summary> /// <param name="actor">The actor that might be occupied by players.</param> private void assignPlayersOfActorToLobbyAircraft(AiActor actor) { if (actor is AiAircraft) { AiAircraft aircraft = actor as AiAircraft; for (int placeIndex = 0; placeIndex < aircraft.Places(); placeIndex++) { if (aircraft.Player(placeIndex) != null) { Player player = aircraft.Player(placeIndex); assignToLobbyAircraft(player); } } } } /// <summary> /// Assigns a player to an unoccupied place in one of the lobby aircrafts. /// </summary> /// <param name="player">The player that is assigned to a lobby aircraft.</param> private void assignToLobbyAircraft(Player player) { if (GamePlay.gpAirGroups(player.Army()) != null && GamePlay.gpAirGroups(player.Army()).Length > 0) { foreach (AiAirGroup airGroup in GamePlay.gpAirGroups(player.Army())) { // Lobby aircrafts always have the mission index 0. if (airGroup.Name().StartsWith("0:")) { if (airGroup.GetItems() != null && airGroup.GetItems().Length > 0) { foreach (AiActor actor in airGroup.GetItems()) { if (actor is AiAircraft) { AiAircraft aircraft = actor as AiAircraft; for (int placeIndex = 0; placeIndex < aircraft.Places(); placeIndex++) { if (aircraft.Player(placeIndex) == null) { player.PlaceEnter(aircraft, placeIndex); // Place found. return; } } } } } } } } else { GamePlay.gpLogServer(new Player[] { player }, "No unoccupied place available in the lobby aircrafts.", null); } } /// <summary> /// Sets the main menu for a player. /// </summary> /// <param name="player">The player that gets the main menu set.</param> private void setMainMenu(Player player) { menuOffsets[player] = 0; string aircraftPlaceDisplyName = "None"; if ((GamePlay.gpPlayer() != null && player == GamePlay.gpPlayer()) || (player.Name() != null && player.Name() != "" && hostPlayers.Contains(player.Name()))) { // Set host menu. string[] entry = new string[] { "", "", "", "", "", "" }; bool[] hasSubEntry = new bool[] { true, true, true, true, true, true }; entry[0] = "Open Mission"; entry[1] = "Close Mission"; entry[2] = "Start Mission"; if(!missionSelections.ContainsKey(player)) { entry[3] = "Select Mission (Selected Mission: None)"; } else { CoopMission mission = missionSelections[player]; foreach (string aircraftPlace in missionSelections[player].AircraftPlaceSelections.Keys) { if (missionSelections[player].AircraftPlaceSelections[aircraftPlace] == player) { aircraftPlaceDisplyName = getAircraftPlaceDisplayName(player, aircraftPlace); break; } } entry[3] = "Select Mission (Selected Mission: " + mission.DisplayName + ")"; entry[4] = "Select Aircraft (Selected Aircraft: " + aircraftPlaceDisplyName + ")"; entry[5] = "Players"; } GamePlay.gpSetOrderMissionMenu(player, false, (int)MainMenuID.HostMainMenu, entry, hasSubEntry); } else { // Set client menu. string[] entry = new string[] { "", "", "" }; bool[] hasSubEntry = new bool[] { true, true, true }; if (!missionSelections.ContainsKey(player)) { entry[0] = "Select Mission (Selected Mission: None)"; } else { CoopMission mission = missionSelections[player]; foreach (string aircraftPlace in mission.AircraftPlaceSelections.Keys) { if (missionSelections[player].AircraftPlaceSelections[aircraftPlace] == player) { aircraftPlaceDisplyName = getAircraftPlaceDisplayName(player, aircraftPlace); break; } } entry[0] = "Select Mission (Selected Mission: " + mission.DisplayName + ")"; entry[1] = "Select Aircraft (Selected Aircraft: " + aircraftPlaceDisplyName + ")"; entry[2] = "Players"; } GamePlay.gpSetOrderMissionMenu(player, false, (int)MainMenuID.ClientMainMenu, entry, hasSubEntry); } } private void setSelectMissionMenu(Player player) { if (menuOffsets[player] < 0) { menuOffsets[player] = (int)missions.Count / 7; } else if ((menuOffsets[player] * 7) > missions.Count) { menuOffsets[player] = 0; } int entryCount = 9; string[] entry = new string[entryCount]; bool[] hasSubEntry = new bool[entryCount]; for (int entryIndex = 0; entryIndex < entryCount; entryIndex++) { if (entryIndex == entryCount - 2) { entry[entryIndex] = "Page up"; hasSubEntry[entryIndex] = true; } else if (entryIndex == entryCount - 1) { entry[entryIndex] = "Page down"; hasSubEntry[entryIndex] = true; } else { if (entryIndex + (menuOffsets[player] * 7) < missions.Count) { entry[entryIndex] = createMissionFileDisplayName(missions[entryIndex + (menuOffsets[player] * 7)].DisplayName); hasSubEntry[entryIndex] = true; } else { entry[entryIndex] = ""; hasSubEntry[entryIndex] = true; } } } GamePlay.gpSetOrderMissionMenu(player, true, (int)MainMenuID.SelectMissionMenu, entry, hasSubEntry); } private void setSelectAircraftMenu(Player player) { int entryCount = 9; string[] entry = new string[entryCount]; bool[] hasSubEntry = new bool[entryCount]; if (missionSelections.ContainsKey(player)) { CoopMission mission = missionSelections[player]; List<string> aircraftPlaceDisplayNames = getAircraftPlaceDisplayNames(player); List<string> aircraftPlaces = getAircraftPlaces(player); if (menuOffsets[player] < 0) { menuOffsets[player] = (int)aircraftPlaceDisplayNames.Count / 7; } else if ((menuOffsets[player] * 7) > aircraftPlaceDisplayNames.Count) { menuOffsets[player] = 0; } for (int entryIndex = 0; entryIndex < entryCount; entryIndex++) { if (entryIndex == entryCount - 2) { entry[entryIndex] = "Page up"; hasSubEntry[entryIndex] = true; } else if (entryIndex == entryCount - 1) { entry[entryIndex] = "Page down"; hasSubEntry[entryIndex] = true; } else { if (entryIndex + (menuOffsets[player] * 7) < aircraftPlaceDisplayNames.Count) { if (mission.AircraftPlaceSelections.ContainsKey(aircr aftPlaces[entryIndex + (menuOffsets[player] * 7)])) { entry[entryIndex] = aircraftPlaceDisplayNames[entryIndex + (menuOffsets[player] * 7)] + ": " + mission.AircraftPlaceSelections[aircraftPlaces[entryIndex + (menuOffsets[player] * 7)]].Name(); hasSubEntry[entryIndex] = true; } else { entry[entryIndex] = aircraftPlaceDisplayNames[entryIndex + (menuOffsets[player] * 7)]; hasSubEntry[entryIndex] = true; } } else { entry[entryIndex] = ""; hasSubEntry[entryIndex] = true; } } } } GamePlay.gpSetOrderMissionMenu(player, true, (int)MainMenuID.SelectAircraftMenu, entry, hasSubEntry); } private void setPlayerMenu(Player player) { int entryCount = 9; string[] entry = new string[entryCount]; bool[] hasSubEntry = new bool[entryCount]; if (missionSelections.ContainsKey(player)) { CoopMission playerMission = missionSelections[player]; List<Player> players = new List<Player>(); foreach (Player otherPlayer in missionSelections.Keys) { if (missionSelections[otherPlayer] == missionSelections[player]) { players.Add(otherPlayer); } } if (menuOffsets[player] < 0) { menuOffsets[player] = (int)players.Count / 7; } else if ((menuOffsets[player] * 7) > players.Count) { menuOffsets[player] = 0; } for (int entryIndex = 0; entryIndex < entryCount; entryIndex++) { if (entryIndex == entryCount - 2) { entry[entryIndex] = "Page up"; hasSubEntry[entryIndex] = true; } else if (entryIndex == entryCount - 1) { entry[entryIndex] = "Page down"; hasSubEntry[entryIndex] = true; } else { if (entryIndex + (menuOffsets[player] * 7) < players.Count) { string aircraftPlaceDisplyName = "None"; foreach (string aircraftPlace in missionSelections[player].AircraftPlaceSelections.Keys) { if (missionSelections[player].AircraftPlaceSelections[aircraftPlace] == players[entryIndex + (menuOffsets[player] * 7)]) { aircraftPlaceDisplyName = getAircraftPlaceDisplayName(player, aircraftPlace); break; } } entry[entryIndex] = players[entryIndex + (menuOffsets[player] * 7)].Name() + " (" + aircraftPlaceDisplyName + ")"; hasSubEntry[entryIndex] = true; } else { entry[entryIndex] = ""; hasSubEntry[entryIndex] = true; } } } } GamePlay.gpSetOrderMissionMenu(player, true, (int)MainMenuID.PlayerMenu, entry, hasSubEntry); } private void setOpenMissionMenu(Player player) { List<string> missionFileNames = getMissionFileNames(); if (menuOffsets[player] < 0) { menuOffsets[player] = (int)missionFileNames.Count / 7; } else if ((menuOffsets[player] * 7) > missionFileNames.Count) { menuOffsets[player] = 0; } int entryCount = 9; string[] entry = new string[entryCount]; bool[] hasSubEntry = new bool[entryCount]; for (int entryIndex = 0; entryIndex < entryCount; entryIndex++) { if (entryIndex == entryCount - 2) { entry[entryIndex] = "Page up"; hasSubEntry[entryIndex] = true; } else if (entryIndex == entryCount - 1) { entry[entryIndex] = "Page down"; hasSubEntry[entryIndex] = true; } else { if (entryIndex + (menuOffsets[player] * 7) < missionFileNames.Count) { entry[entryIndex] = createMissionFileDisplayName(missionFileNames[entryIndex + (menuOffsets[player] * 7)]); hasSubEntry[entryIndex] = true; } else { entry[entryIndex] = ""; hasSubEntry[entryIndex] = true; } } } GamePlay.gpSetOrderMissionMenu(player, true, (int)MainMenuID.OpenMissionMenu, entry, hasSubEntry); } private void setCloseMissionMenu(Player player) { if (menuOffsets[player] < 0) { menuOffsets[player] = (int)missions.Count / 7; } else if ((menuOffsets[player] * 7) > missions.Count) { menuOffsets[player] = 0; } int entryCount = 9; string[] entry = new string[entryCount]; bool[] hasSubEntry = new bool[entryCount]; |
Thread Tools | |
Display Modes | |
|
|