private void awaitRescue() { //check for an AOK file from file rescue string aokPath = DataManager.FindRescueMail(PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.AOK_FOLDER), DataManager.Instance.Save.Rescue.SOS, DataManager.AOK_EXTENSION); if (aokPath != null) { AOKMail aok = (AOKMail)DataManager.LoadRescueMail(aokPath); SetAOK(aok); //an AOK mail has been found! MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(() => loadAOK(aokPath, aok), Text.FormatKey("DLG_AWAIT_RESCUE_AOK_FOUND")), true); } else { //if there's no AOK, generate the SOS mail from the save data if (!File.Exists(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.SOS_FOLDER + DataManager.Instance.Save.UUID + DataManager.SOS_EXTENSION))) { DataManager.SaveRescueMail(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.SOS_FOLDER), DataManager.Instance.Save.Rescue.SOS, true); } List <DialogueChoice> choices = new List <DialogueChoice>(); choices.Add(new DialogueChoice(Text.FormatKey("MENU_RESCUE_GET_HELP"), contactForHelp)); choices.Add(new DialogueChoice(Text.FormatKey("MENU_RESCUE_CONFIGURE_SERVER"), configureServer)); choices.Add(new DialogueChoice(Text.FormatKey("MENU_RESCUE_OFFER_REWARD"), offerReward)); choices.Add(new DialogueChoice(Text.FormatKey("MENU_REST_QUIT"), giveUp)); choices.Add(new DialogueChoice(Text.FormatKey("MENU_CANCEL"), () => { MenuManager.Instance.RemoveMenu(); })); MenuManager.Instance.AddMenu(MenuManager.Instance.CreateMultiQuestion(Text.FormatKey("DLG_AWAIT_RESCUE_ASK"), false, choices, 0, choices.Count - 1), true); } }
public bool HasAOKMail() { string parentPath = PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER); string[] files = System.IO.Directory.GetFiles(parentPath, "*" + DataManager.AOK_EXTENSION); return(files.Length > 0); }
private void completeAOK() { //if the mail worked, mark the save file as complete //and then return to the top menu //notify if it is found and working //notify if it failed to work //delete the mail either way GameState state = DataManager.Instance.LoadMainGameState(); state.Save.Rescue.SOS.RescuedBy = testingMail.RescuingTeam; state.Save.Rescue.SOS.RescuingNames = testingMail.RescuingNames; state.Save.Rescue.SOS.RescuingTeam = testingMail.RescuingProfile; state.Save.Rescue.SOS.RescuingPersonalities = testingMail.RescuingPersonalities; state.Save.Rescue.SOS.FinalStatement = testingMail.FinalStatement; DataManager.Instance.SaveGameState(state); //delete the SOS and AOK files if applicable if (File.Exists(testingPath)) { File.Delete(testingPath); } if (File.Exists(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.SOS_FOLDER + state.Save.UUID + DataManager.SOS_EXTENSION))) { File.Delete(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.SOS_FOLDER + state.Save.UUID + DataManager.SOS_EXTENSION)); } MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(MenuManager.Instance.ClearMenus, Text.FormatKey("DLG_AWAIT_RESCUE_RESUME")), true); }
public override IEnumerator <YieldInstruction> BeginGame(int zoneID, ulong seed, DungeonStakes stakes, bool recorded, bool noRestrict) { MidAdventure = true; Stakes = stakes; if (recorded) { DataManager.Instance.BeginPlay(PathMod.NoMod(DataManager.ROGUE_PATH + DataManager.Instance.Save.StartDate + DataManager.QUICKSAVE_EXTENSION), zoneID, true, Seeded); } yield break; }
public RogueMenu() { List <MenuTextChoice> choices = new List <MenuTextChoice>(); choices.Add(new MenuTextChoice(Text.FormatKey("MENU_TOP_NEW"), () => { MenuManager.Instance.AddMenu(new RogueDestMenu(), false); })); if (Data.DataManager.Instance.FoundRecords(PathMod.NoMod(Data.DataManager.ROGUE_PATH))) { choices.Add(new MenuTextChoice(Text.FormatKey("MENU_TOP_LOAD"), () => { MenuManager.Instance.AddMenu(new QuicksaveMenu(), false); })); } choices.Add(new MenuTextChoice(Text.FormatKey("MENU_INFO"), () => { MenuManager.Instance.AddMenu(new RogueInfoMenu(), false); })); Initialize(new Loc(16, 16), CalculateChoiceLength(choices, 72), choices.ToArray(), 0); }
public void AddAOKRemark(int remarkIndex) { AOKMail aok = null; if (DataManager.Instance.Save.GeneratedAOK != null) { aok = DataManager.LoadRescueMail(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER + DataManager.Instance.Save.GeneratedAOK)) as AOKMail; } if (aok != null) { aok.FinalStatement = remarkIndex; DataManager.SaveRescueMail(DataManager.Instance.Save.GeneratedAOK, aok); } }
private void DeleteAction() { if (File.Exists(recordDir)) { File.Delete(recordDir); } MenuManager.Instance.RemoveMenu(); if (DataManager.Instance.FoundRecords(PathMod.NoMod(DataManager.ROGUE_PATH))) { MenuManager.Instance.ReplaceMenu(new QuicksaveMenu()); } else { MenuManager.Instance.RemoveMenu(); MenuManager.Instance.ReplaceMenu(new TopMenu()); } }
private void DeleteAction(string fileName) { File.Delete(fileName); MenuManager.Instance.RemoveMenu(); string parentPath = sosMode ? PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.SOS_FOLDER) : PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER); files = Directory.GetFiles(parentPath, "*" + (sosMode ? DataManager.SOS_EXTENSION : DataManager.AOK_EXTENSION)); if (files.Length > 0) { MenuManager.Instance.ReplaceMenu(new MailMenu(sosMode, action)); } else { MenuManager.Instance.RemoveMenu(); } }
public QuicksaveMenu() { List <RecordHeaderData> records = DataManager.Instance.GetRecordHeaders(PathMod.NoMod(DataManager.ROGUE_PATH), DataManager.QUICKSAVE_EXTENSION); List <MenuChoice> flatChoices = new List <MenuChoice>(); foreach (RecordHeaderData record in records) { string fileName = Path.GetFileNameWithoutExtension(record.Path); if (record.Name != "") { LocalText zoneName = DataManager.Instance.DataIndices[DataManager.DataType.Zone].Entries[record.Zone].Name; string rogueSign = ""; if (record.IsRogue) { if (record.IsSeeded) { rogueSign = "\uE10D"; } else { rogueSign = "\uE10C"; } } //also include an indicator of the floors traversed, if possible flatChoices.Add(new MenuTextChoice(rogueSign + record.Name + ": " + zoneName.ToLocal(), () => { choose(record.Path); })); } else { flatChoices.Add(new MenuTextChoice(fileName, () => { choose(record.Path); })); } } List <MenuChoice[]> choices = SortIntoPages(flatChoices, SLOTS_PER_PAGE); Initialize(new Loc(0, 0), 240, Text.FormatKey("MENU_SAVE_TITLE"), choices.ToArray(), 0, 0, SLOTS_PER_PAGE); }
public MailMenu(bool sosMode, OnChoosePath action) { this.sosMode = sosMode; this.action = action; string parentPath = sosMode ? PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.SOS_FOLDER) : PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER); files = Directory.GetFiles(parentPath, "*" + (sosMode ? DataManager.SOS_EXTENSION : DataManager.AOK_EXTENSION)); List <MenuChoice> flatChoices = new List <MenuChoice>(); for (int ii = 0; ii < files.Length; ii++) { string filename = files[ii]; flatChoices.Add(new MenuTextChoice(files[ii].Substring(files[ii].LastIndexOf('/') + 1), () => { choose(filename); })); } List <MenuChoice[]> choices = SortIntoPages(flatChoices, SLOTS_PER_PAGE); summaryMenu = new MailMiniSummary(Rect.FromPoints(new Loc(8, GraphicsManager.ScreenHeight - 8 - GraphicsManager.MenuBG.TileHeight * 2 - VERT_SPACE * 4), new Loc(GraphicsManager.ScreenWidth - 8, GraphicsManager.ScreenHeight - 8))); Initialize(new Loc(8, 8), 196, Text.FormatKey(sosMode ? "MENU_MAIL_SOS_TITLE" : "MENU_MAIL_AOK_TITLE"), choices.ToArray(), 0, 0, SLOTS_PER_PAGE); }
public override void Update(InputManager input) { Visible = true; NetworkManager.Instance.Update(); if (NetworkManager.Instance.Status == OnlineStatus.Offline) { //give offline message in a dialogue MenuManager.Instance.RemoveMenu(); if (CurrentState != ExchangeRescueState.Completed) { MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(NetworkManager.Instance.ExitMsg), false); } } else { if (CurrentState == ExchangeRescueState.Communicating) { //first send the SOS SOSMail mail = DataManager.Instance.Save.Rescue.SOS; CurrentState = ExchangeRescueState.SOSReady; ActivityGetHelp getHelp = NetworkManager.Instance.Activity as ActivityGetHelp; getHelp.OfferMail(mail); getHelp.SetReady(CurrentState); } else if (CurrentState == ExchangeRescueState.SOSReady) { //wait for other party's ready to receive SOS or ready to send AOK ActivityGetHelp getHelp = NetworkManager.Instance.Activity as ActivityGetHelp; if (getHelp.CurrentState == ExchangeRescueState.SOSReady) { //ready to receive SOS DialogueBox dialog = MenuManager.Instance.CreateQuestion(Text.FormatKey("DLG_RESCUE_SEND_SOS_ASK", getHelp.TargetInfo.Data.TeamName), () => { CurrentState = ExchangeRescueState.SOSTrading; getHelp.SetReady(CurrentState); }, () => { //just disconnect MenuManager.Instance.RemoveMenu(); NetworkManager.Instance.Disconnect(); }); MenuManager.Instance.AddMenu(dialog, true); } else if (getHelp.CurrentState == ExchangeRescueState.AOKReady) { //ready to receive AOK SetAOK(getHelp.OfferedMail); CurrentState = ExchangeRescueState.AOKReady; getHelp.SetReady(CurrentState); string baseAskString = (getHelp.OfferedMail.OfferedItem.Value > -1) ? "DLG_RESCUE_GET_AOK_ASK_REWARD" : "DLG_RESCUE_GET_AOK_ASK"; DialogueBox dialog = MenuManager.Instance.CreateQuestion(Text.FormatKey(baseAskString, getHelp.TargetInfo.Data.TeamName), () => { CurrentState = ExchangeRescueState.AOKTrading; getHelp.SetReady(CurrentState); }, () => { //just disconnect MenuManager.Instance.RemoveMenu(); NetworkManager.Instance.Disconnect(); }); MenuManager.Instance.AddMenu(dialog, true); } else if (getHelp.CurrentState == ExchangeRescueState.Completed) { //TODO: signal that an SOS has already been sent //MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_SEND_SOS_ALREADY", getHelp.TargetInfo.Data.TeamName)), false); CurrentState = ExchangeRescueState.Completed; getHelp.SetReady(CurrentState); } } else if (CurrentState == ExchangeRescueState.SOSTrading) { //wait for the other party to also be SOSTrading or Completed ActivityGetHelp getHelp = NetworkManager.Instance.Activity as ActivityGetHelp; if (getHelp.CurrentState == ExchangeRescueState.SOSTrading || getHelp.CurrentState == ExchangeRescueState.Completed) { MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_SEND_SOS", getHelp.TargetInfo.Data.TeamName)), false); CurrentState = ExchangeRescueState.Completed; getHelp.SetReady(CurrentState); } //the other possible outcome is that they just disconnect } else if (CurrentState == ExchangeRescueState.AOKTrading) { //wait for the other party to also be AOKTrading or Completed ActivityGetHelp getHelp = NetworkManager.Instance.Activity as ActivityGetHelp; if (getHelp.CurrentState == ExchangeRescueState.AOKTrading || getHelp.CurrentState == ExchangeRescueState.Completed) { //save the AOK file DataManager.SaveRescueMail(PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.AOK_FOLDER), getHelp.OfferedMail, false); if (getHelp.OfferedMail.OfferedItem.Value > -1) { //deduct your reward and save it to the base file GameState state = DataManager.Instance.LoadMainGameState(); state.Save.Rescue.SOS.OfferedItem = getHelp.OfferedMail.OfferedItem; DataManager.Instance.SaveGameState(state); MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_GOT_AOK", getHelp.TargetInfo.Data.TeamName), Text.FormatKey("DLG_RESCUE_GOT_AOK_REWARD")), false); } else { MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_GOT_AOK", getHelp.TargetInfo.Data.TeamName)), false); } CurrentState = ExchangeRescueState.Completed; getHelp.SetReady(CurrentState); } //the other possible outcome is that they just disconnect } else if (CurrentState == ExchangeRescueState.Completed) { ActivityGetHelp getHelp = NetworkManager.Instance.Activity as ActivityGetHelp; //wait for the other party to also be Completed to leave the transaction if (getHelp.CurrentState == ExchangeRescueState.Completed) { MenuManager.Instance.RemoveMenu(); NetworkManager.Instance.Disconnect(); } } UpdateStatus(); } }
public override void Update(InputManager input) { Visible = true; NetworkManager.Instance.Update(); if (NetworkManager.Instance.Status == OnlineStatus.Offline) { //give offline message in a dialogue MenuManager.Instance.RemoveMenu(); if (CurrentState != ExchangeRescueState.Completed) { MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(NetworkManager.Instance.ExitMsg), false); } } else { if (CurrentState == ExchangeRescueState.Communicating) { //wait for an SOS ActivitySendHelp sendHelp = NetworkManager.Instance.Activity as ActivitySendHelp; if (sendHelp.CurrentState == ExchangeRescueState.SOSReady) { SOSMail sos = sendHelp.OfferedMail; aokPath = DataManager.FindRescueMail(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER), sos, DataManager.AOK_EXTENSION); if (aokPath == null) { //no aok found; ask to receive SOS //TODO: check to see if SOS has already been sent //it needs to check if the reward is the same. SetSOS(sendHelp.OfferedMail); CurrentState = ExchangeRescueState.SOSReady; sendHelp.SetReady(CurrentState); DialogueBox dialog = MenuManager.Instance.CreateQuestion(Text.FormatKey("DLG_RESCUE_RECEIVE_SOS_ASK", sendHelp.TargetInfo.Data.TeamName), () => { CurrentState = ExchangeRescueState.SOSTrading; sendHelp.SetReady(CurrentState); }, () => { //just disconnect MenuManager.Instance.RemoveMenu(); NetworkManager.Instance.Disconnect(); }); MenuManager.Instance.AddMenu(dialog, true); } else { //aok found; ask to send AOK aok = (AOKMail)DataManager.LoadRescueMail(aokPath); SetAOK(aok); CurrentState = ExchangeRescueState.AOKReady; sendHelp.OfferMail(aok); sendHelp.SetReady(CurrentState); } } } else if (CurrentState == ExchangeRescueState.SOSTrading) { //wait for the other party to also be SOSTrading or Completed ActivitySendHelp sendHelp = NetworkManager.Instance.Activity as ActivitySendHelp; if (sendHelp.CurrentState == ExchangeRescueState.SOSTrading || sendHelp.CurrentState == ExchangeRescueState.Completed) { //save the SOS mail DataManager.SaveRescueMail(PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.SOS_FOLDER), sendHelp.OfferedMail, false); MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_RECEIVE_SOS", sendHelp.TargetInfo.Data.TeamName)), false); CurrentState = ExchangeRescueState.Completed; sendHelp.SetReady(CurrentState); } //the other possible outcome is that they just disconnect } else if (CurrentState == ExchangeRescueState.AOKReady) { //wait for other party's ready to receive SOS or ready to send AOK ActivitySendHelp sendHelp = NetworkManager.Instance.Activity as ActivitySendHelp; if (sendHelp.CurrentState == ExchangeRescueState.AOKReady) { //ready to receive SOS string baseAskString = (aok.OfferedItem.Value > -1) ? "DLG_RESCUE_SEND_AOK_ASK_REWARD" : "DLG_RESCUE_SEND_AOK_ASK"; DialogueBox dialog = MenuManager.Instance.CreateQuestion(Text.FormatKey(baseAskString, sendHelp.TargetInfo.Data.TeamName), () => { CurrentState = ExchangeRescueState.AOKTrading; sendHelp.SetReady(CurrentState); }, () => { //just disconnect MenuManager.Instance.RemoveMenu(); NetworkManager.Instance.Disconnect(); }); MenuManager.Instance.AddMenu(dialog, true); } //the other possible outcome is that they just disconnect } else if (CurrentState == ExchangeRescueState.AOKTrading) { //wait for the other party to also be AOKTrading or Completed ActivitySendHelp sendHelp = NetworkManager.Instance.Activity as ActivitySendHelp; if (sendHelp.CurrentState == ExchangeRescueState.AOKTrading || sendHelp.CurrentState == ExchangeRescueState.Completed) { //delete the AOK file File.Delete(aokPath); if (aok.OfferedItem.Value > -1) { if (aok.OfferedItem.IsMoney) { DataManager.Instance.Save.ActiveTeam.Bank += aok.OfferedItem.Value; } else { List <InvItem> itemsToStore = new List <InvItem>(); itemsToStore.Add(aok.OfferedItem.MakeInvItem()); DataManager.Instance.Save.ActiveTeam.StoreItems(itemsToStore); } DataManager.Instance.SaveMainGameState(); MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_SEND_AOK", sendHelp.TargetInfo.Data.TeamName), Text.FormatKey("DLG_RESCUE_SEND_AOK_REWARD")), false); } else { MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_RESCUE_SEND_AOK", sendHelp.TargetInfo.Data.TeamName)), false); } CurrentState = ExchangeRescueState.Completed; sendHelp.SetReady(CurrentState); } //the other possible outcome is that they just disconnect } else if (CurrentState == ExchangeRescueState.Completed) { ActivitySendHelp sendHelp = NetworkManager.Instance.Activity as ActivitySendHelp; //wait for the other party to also be Completed to leave the transaction if (sendHelp.CurrentState == ExchangeRescueState.Completed) { MenuManager.Instance.RemoveMenu(); NetworkManager.Instance.Disconnect(); } } UpdateStatus(); } }
public override IEnumerator <YieldInstruction> EndGame(ResultType result, ZoneLoc nextArea, bool display, bool fanfare) { Outcome = result; bool recorded = DataManager.Instance.RecordingReplay; string recordFile = null; if (result == ResultType.Rescue) { Location = ZoneManager.Instance.CurrentZone.GetDisplayName(); DataManager.Instance.MsgLog.Clear(); //end the game with a recorded ending recordFile = DataManager.Instance.EndPlay(this, StartDate); SOSMail sos = Rescue.SOS; string dateRescued = String.Format("{0:yyyy-MM-dd}", DateTime.Now); ReplayData replay = DataManager.Instance.LoadReplay(PathMod.ModSavePath(DataManager.REPLAY_PATH, recordFile), false); AOKMail aok = new AOKMail(sos, DataManager.Instance.Save, dateRescued, replay); GeneratedAOK = DataManager.SaveRescueMail(PathMod.NoMod(DataManager.RESCUE_OUT_PATH + DataManager.AOK_FOLDER), aok, false); string deletePath = DataManager.FindRescueMail(PathMod.NoMod(DataManager.RESCUE_IN_PATH + DataManager.SOS_FOLDER), sos, sos.Extension); if (deletePath != null) { File.Delete(deletePath); } if (nextArea.IsValid()) // if an exit is specified, go to the exit. { NextDest = nextArea; } else { NextDest = new ZoneLoc(1, new SegLoc(-1, 1)); } } else if (result != ResultType.Cleared) { if (GameManager.Instance.CurrentScene == GroundScene.Instance) { Location = ZoneManager.Instance.CurrentGround.GetColoredName(); } else if (GameManager.Instance.CurrentScene == DungeonScene.Instance) { Location = ZoneManager.Instance.CurrentMap.GetColoredName(); } DataManager.Instance.MsgLog.Clear(); //end the game with a recorded ending recordFile = DataManager.Instance.EndPlay(this, StartDate); if (Outcome != ResultType.Escaped && Stakes == DungeonStakes.Risk) //remove all items { LossPenalty(this); } if (nextArea.IsValid()) // if an exit is specified, go to the exit. { NextDest = nextArea; } else { NextDest = new ZoneLoc(1, new SegLoc(-1, 1)); } } else { int completedZone = ZoneManager.Instance.CurrentZoneID; DungeonUnlocks[completedZone] = UnlockState.Completed; Location = ZoneManager.Instance.CurrentZone.GetDisplayName(); DataManager.Instance.MsgLog.Clear(); //end the game with a recorded ending recordFile = DataManager.Instance.EndPlay(this, StartDate); if (nextArea.IsValid()) // if an exit is specified, go to the exit. { NextDest = nextArea; } else { NextDest = new ZoneLoc(1, new SegLoc(-1, 1)); } } TotalAdventures++; foreach (Character character in ActiveTeam.EnumerateChars()) { character.Dead = false; character.FullRestore(); } foreach (Character character in ActiveTeam.Assembly) { character.Dead = false; character.FullRestore(); } MidAdventure = false; ClearDungeonItems(); //clear rescue status Rescue = null; //merge back the team if the dungeon was level-limited yield return(CoroutineManager.Instance.StartCoroutine(RestoreLevel())); GameState state = DataManager.Instance.LoadMainGameState(); MainProgress mainSave = state?.Save as MainProgress; //save the result to the main file if (Stakes != DungeonStakes.None) { if (mainSave != null) { mainSave.MergeDataTo(this); } DataManager.Instance.SaveMainGameState(); } else { if (mainSave != null) { DataManager.Instance.SetProgress(mainSave); } DataManager.Instance.Save.NextDest = NextDest; } MenuBase.Transparent = false; if (recorded && display) { GameProgress ending = DataManager.Instance.GetRecord(PathMod.ModSavePath(DataManager.REPLAY_PATH, recordFile)); if (fanfare) { if (result != ResultType.Cleared && result != ResultType.Escaped && result != ResultType.Rescue) { GameManager.Instance.Fanfare("Fanfare/MissionFail"); } else { GameManager.Instance.Fanfare("Fanfare/MissionClear"); } } else { GameManager.Instance.SE("Menu/Skip"); } FinalResultsMenu menu = new FinalResultsMenu(ending); yield return(CoroutineManager.Instance.StartCoroutine(MenuManager.Instance.ProcessMenuCoroutine(menu))); } yield return(new WaitForFrames(20)); }