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