コード例 #1
0
ファイル: RescueMenu.cs プロジェクト: Parakoopa/RogueEssence
        private void awaitRescue()
        {
            //check for an AOK file from file rescue
            string aokPath = DataManager.FindRescueMail(DataManager.RESCUE_IN_PATH + DataManager.AOK_PATH, 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(DataManager.RESCUE_OUT_PATH + DataManager.SOS_PATH + DataManager.Instance.Save.UUID + DataManager.SOS_EXTENSION))
                {
                    DataManager.SaveRescueMail(DataManager.RESCUE_OUT_PATH + DataManager.SOS_PATH, 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);
            }
        }
コード例 #2
0
ファイル: RescueMenu.cs プロジェクト: Parakoopa/RogueEssence
        private void loadAOK(string aokPath, AOKMail aok)
        {
            //cut to black and verify the mail behind the scenes
            //If the replay succeeds, set the rescue state to true and take them back to the title.

            //check the AOK mail
            ReRandom rerand = new ReRandom(aok.Seed);

            for (int ii = 0; ii < aok.RescueSeed; ii++)
            {
                rerand.NextUInt64();
            }
            ulong rolledSeed = rerand.NextUInt64();

            if (aok.RescueReplay.States[0].Save.Rand.FirstSeed == rolledSeed)
            {
                //when starting, we must persist the AOK data so we know what data to put into the SOS
                //and the path so we know which path to delete if we fail to verify.
                //let's store it in this menu
                //when the replay ends, it will look for this menu and inject the result: pass, or fail
                testingPath = aokPath;
                testingMail = aok;

                TitleScene.TitleMenuSaveState = MenuManager.Instance.SaveMenuState();
                MenuManager.Instance.ClearMenus();
                GameManager.Instance.SceneOutcome = validateReplay(aok.RescueReplay);
            }
            else
            {
                File.Delete(aokPath);
                MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(MenuManager.Instance.RemoveMenu, Text.FormatKey("DLG_AWAIT_RESCUE_AOK_FAIL")), true);
            }
        }
コード例 #3
0
ファイル: ScriptGame.cs プロジェクト: Parakoopa/RogueEssence
        public void AddAOKRemark(int remarkIndex)
        {
            AOKMail aok = null;

            if (DataManager.Instance.Save.GeneratedAOK != null)
            {
                aok = DataManager.LoadRescueMail(DataManager.RESCUE_OUT_PATH + DataManager.AOK_PATH + DataManager.Instance.Save.GeneratedAOK) as AOKMail;
            }
            if (aok != null)
            {
                aok.FinalStatement = remarkIndex;
                DataManager.SaveRescueMail(DataManager.Instance.Save.GeneratedAOK, aok);
            }
        }
コード例 #4
0
 public void SetAOK(AOKMail aok)
 {
     Title.SetText(Text.FormatKey("MENU_AOK_TITLE"));
     Portraits = new SpeakerPortrait[aok.RescuingProfile.Length];
     for (int ii = 0; ii < aok.RescuingProfile.Length; ii++)
     {
         Portraits[ii] = new SpeakerPortrait(aok.RescuingProfile[ii], new EmoteStyle(GraphicsManager.AOKEmotion, true),
                                             new Loc(Bounds.X + Bounds.Width / 2 - (GraphicsManager.PortraitSize * aok.RescuingProfile.Length + (aok.RescuingProfile.Length - 1) * 2) / 2 + ii * (GraphicsManager.PortraitSize + 2),
                                                     Bounds.Y + GraphicsManager.MenuBG.TileHeight + TitledStripMenu.TITLE_OFFSET), false);
     }
     Name.SetText(Text.FormatKey("MENU_AOK_TEAM", aok.RescuingTeam));
     LastSeen.SetText(Text.FormatKey("MENU_SOS_DATE", aok.DateRescued));
     Goal.SetText(Text.FormatKey("MENU_SOS_GOAL", aok.GoalText.ToLocal().Replace('\n', ' ')));
     Reward.SetText(aok.OfferedItem.Value > 0 ? Text.FormatKey("MENU_SOS_REWARD", aok.OfferedItem.GetDungeonName()) : "");
 }
コード例 #5
0
 public void SetAOK(AOKMail mail)
 {
     if (mail != null)
     {
         Name.Text     = mail.TeamName;
         Reward.Text   = Text.FormatKey("MENU_SOS_REWARD", mail.OfferedItem.Value > -1 ? mail.OfferedItem.GetDungeonName() : "---");
         LastSeen.Text = Text.FormatKey("MENU_SOS_DATE", mail.DateDefeated);
         Goal.Text     = Text.FormatKey("MENU_SOS_GOAL", mail.GoalText.ToLocal().Replace('\n', ' '));
         Portraits     = new SpeakerPortrait[mail.TeamProfile.Length];
         for (int ii = 0; ii < mail.TeamProfile.Length; ii++)
         {
             Portraits[ii] = new SpeakerPortrait(mail.TeamProfile[ii], new EmoteStyle(0, true),
                                                 new Loc(Bounds.End.X - GraphicsManager.MenuBG.TileWidth + (GraphicsManager.PortraitSize + 2) * (ii - mail.TeamProfile.Length),
                                                         Bounds.Y + GraphicsManager.MenuBG.TileHeight), false);
         }
     }
     else
     {
         setError();
     }
 }
コード例 #6
0
        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(DataManager.RESCUE_OUT_PATH + DataManager.AOK_PATH, 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);

                            QuestionDialog 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(DataManager.RESCUE_IN_PATH + DataManager.SOS_PATH, 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";
                        QuestionDialog 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();
            }
        }
コード例 #7
0
 public void OfferMail(AOKMail mail)
 {
     netPacketProcessor.SendNetSerializable(partner, new ExchangeAOKState {
         State = mail
     }, DeliveryMethod.ReliableOrdered);
 }