コード例 #1
0
 public ActivitySendHelp(ServerInfo server, ContactInfo selfInfo, ContactInfo targetInfo)
     : base(server, selfInfo, targetInfo)
 {
     netPacketProcessor.SubscribeNetSerializable <ExchangeSOSState>((state) => OfferedMail          = state.State);
     netPacketProcessor.SubscribeNetSerializable <ExchangeRescueReadyState>((state) => CurrentState = state.State);
     CurrentState = ExchangeRescueState.Communicating;
 }
コード例 #2
0
        public SendHelpMenu()
            : base()
        {
            yourSummary = new SummaryMenu(Rect.FromPoints(new Loc(Bounds.Start.X, Bounds.End.Y),
                                                          new Loc(Bounds.End.X, Bounds.End.Y + LINE_SPACE + GraphicsManager.MenuBG.TileHeight * 2)));
            yourStatus = new MenuText("",
                                      new Loc((yourSummary.Bounds.X + yourSummary.Bounds.End.X) / 2, yourSummary.Bounds.Y + GraphicsManager.MenuBG.TileHeight), DirH.None);
            yourStatus.Color = TextTan;
            yourSummary.Elements.Add(yourStatus);

            CurrentState = ExchangeRescueState.Communicating;
        }
コード例 #3
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();
            }
        }
コード例 #4
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)
                {
                    //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();
            }
        }
コード例 #5
0
 public void SetReady(ExchangeRescueState state)
 {
     netPacketProcessor.SendNetSerializable(partner, new ExchangeRescueReadyState {
         State = state
     }, DeliveryMethod.ReliableOrdered);
 }