public static bool TryParsePyramidKeysUnlock(this Dictionary <string, string> dataKeyStrings, string key, out Requirement requirement)
 {
     try
     {
         requirement = SlotDataParser.GetPyramidKeysGate(dataKeyStrings[key]);
         return(true);
     }
     catch
     {
         requirement = Requirement.None;
         return(false);
     }
 }
示例#2
0
        void OnConnectEntrySelected(PlayerIndex playerIndex)
        {
            var server = "ws://" + values[ServerIndex];

            if (!values[ServerIndex].Contains(":"))
            {
                server += ":38281";
            }
            else if (values[ServerIndex].EndsWith(":"))
            {
                server += "38281";
            }

            var password = string.IsNullOrEmpty(values[PasswordIndex]) ? null : values[PasswordIndex];

            var result = Client.Connect(server, values[UserIndex], password);

            if (!result.Successful)
            {
                var failure = (LoginFailure)result;

                var messageBox = MessageBox.Create(ScreenManager, $"Connecting to server failed: {string.Join(", ", failure.Errors)}");

                ScreenManager.AddScreen(messageBox.Screen, GameScreen.ControllingPlayer);
            }
            else
            {
                if (difficultyMenu != null)
                {
                    var connected = (LoginSuccessful)result;

                    var slotDataParser = new SlotDataParser(connected.SlotData, Client.SeedString);

                    difficultyMenu.SetSeedAndFillingMethod(slotDataParser.GetSeed(), FillingMethod.Archipelago,
                                                           slotDataParser.GetSettings());
                    difficultyMenu.HookOnDifficultySelected(saveGame => {
                        saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSaveServerKey] = server;
                        saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSaveUserKey]   = values[UserIndex];
                        if (!string.IsNullOrEmpty(values[PasswordIndex]))
                        {
                            saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSavePasswordKey] =
                                values[PasswordIndex];
                        }
                        saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSaveConnectionId] =
                            Client.ConnectionId;
                        saveGame.DataKeyInts[ArchipelagoItemLocationMap.GameItemIndex] = 0;
                        saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSavePyramidsKeysUnlock] =
                            slotDataParser.GetPyramidKeysGate().ToString();
                        saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSavePersonalItemIds] =
                            JsonConvert.SerializeObject(slotDataParser.GetPersonalItems());
                    });
                }
                else if (saveSelectScreen != null)
                {
                    saveSelectScreen.UpdateSave(saveGame => {
                        saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSaveServerKey] = server;
                        saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSaveUserKey]   = values[UserIndex];
                        if (!string.IsNullOrEmpty(values[PasswordIndex]))
                        {
                            saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSavePasswordKey] =
                                values[PasswordIndex];
                        }
                    });
                }

                Dynamic.OnCancel(playerIndex);
            }
        }
        public override bool Handle(GameConsole console, string[] parameters)
        {
            string user;
            string password;

            if (parameters.Length == 2)
            {
                user     = parameters[1];
                password = null;
            }
            else if (parameters.Length == 2)
            {
                user     = parameters[1];
                password = parameters[2];
            }
            else
            {
                return(false);
            }

            var saveFileManager = ((object)screenManager.AsDynamic().SaveFileManager).AsDynamic();

            if (saveFileManager.AreSaveFilesFull())
            {
                console.AddLine("No free save slots found", Color.Yellow);
                return(true);
            }

            string server;
            string port;

            var serverUriParts = parameters[0].Split(':');

            if (serverUriParts.Length == 1)
            {
                server = serverUriParts[0];
                port   = "38281";
            }
            else if (serverUriParts.Length == 2)
            {
                server = serverUriParts[0];
                port   = serverUriParts[1];
            }
            else
            {
                return(false);
            }

            var serverUri = new Uri($"ws://{server}:{port}");

            var connectionResult = Client.Connect(serverUri.ToString(), user, password);

            if (!connectionResult.Successful)
            {
                console.AddLine($"Connection Failed: {string.Join(", ", ((LoginFailure)connectionResult).Errors)}", Color.Yellow);
                return(true);
            }

            console.AddLine("Connected!");

            var connected      = (LoginSuccessful)connectionResult;
            var slotDataParser = new SlotDataParser(connected.SlotData, Client.SeedString);

            IsWaitingForDifficulty = true;
            Seed     = slotDataParser.GetSeed();
            Settings = slotDataParser.GetSettings();
            OnDifficultySelectedHook = saveGame => {
                saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSaveServerKey] = serverUri.ToString();
                saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSaveUserKey]   = user;
                if (string.IsNullOrEmpty(password))
                {
                    saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSavePasswordKey] = password;
                }
                saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSaveConnectionId] = Client.ConnectionId;
                saveGame.DataKeyInts[ArchipelagoItemLocationMap.GameItemIndex] = 0;
                saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSavePyramidsKeysUnlock] =
                    slotDataParser.GetPyramidKeysGate().ToString();
                saveGame.DataKeyStrings[ArchipelagoItemLocationRandomizer.GameSavePersonalItemIds] =
                    JsonConvert.SerializeObject(slotDataParser.GetPersonalItems());
            };

            object safeFileManager = screenManager.AsDynamic().SaveFileManager;

            var gameDifficultyMenu =
                (GameScreen)GameDifficultyMenuType.CreateInstance(false, safeFileManager, (Action <GameSave.EGameDifficultyType>)OnDifficultySelected);

            screenManager.AddScreen(gameDifficultyMenu, PlayerIndex.One);

            console.Close();

            return(true);
        }