private void attemptCancel() { DialogueBox dialog = MenuManager.Instance.CreateQuestion(Text.FormatKey("DLG_ONLINE_TRADE_END_ASK"), () => { MenuManager.Instance.RemoveMenu(); NetworkManager.Instance.Disconnect(); }, () => { }); MenuManager.Instance.AddMenu(dialog, true); }
public DialogueBox CreateDialogue(MonsterID speaker, string speakerName, EmoteStyle emotion, bool sound, Action finishAction, int waitTime, params string[] msgs) { if (msgs.Length > 0) { DialogueBox box = null; for (int ii = msgs.Length - 1; ii >= 0; ii--) { DialogueBox prevBox = box; box = CreateBox(speaker, speakerName, emotion, sound, (prevBox == null) ? finishAction : () => { AddMenu(prevBox, false); }, waitTime, msgs[ii]); } return(box); } return(null); }
public IEnumerator <YieldInstruction> SetSign(params string[] msgs) { if (msgs.Length > 0) { DialogueBox box = null; Action emptyAction = () => { }; for (int ii = msgs.Length - 1; ii >= 0; ii--) { DialogueBox prevBox = box; box = new ClickedDialog(msgs[ii], false, (prevBox == null) ? emptyAction : () => { AddMenu(prevBox, false); }); box.Text.FinishText(); } yield return(CoroutineManager.Instance.StartCoroutine(ProcessMenuCoroutine(box))); } }
public DialogueBox CreateBox(MonsterID speaker, string speakerName, EmoteStyle emotion, bool sound, Action finishAction, int waitTime, string msg) { DialogueBox box = null; if (waitTime > -1) { box = new TimedDialog(msg, sound, waitTime, finishAction); } else { box = new ClickedDialog(msg, sound, finishAction); } box.SetSpeaker(speaker, speakerName, emotion); return(box); }
public DialogueBox CreateDialogue(MonsterID speaker, string speakerName, EmoteStyle emotion, bool sound, Action finishAction, int waitTime, params string[] msgs) { if (msgs.Length > 0) { List <string> sep_msgs = new List <string>(); for (int ii = 0; ii < msgs.Length; ii++) { string[] break_str = Regex.Split(msgs[ii], "\\[br\\]", RegexOptions.IgnoreCase); sep_msgs.AddRange(break_str); } DialogueBox box = null; for (int ii = sep_msgs.Count - 1; ii >= 0; ii--) { DialogueBox prevBox = box; box = CreateBox(speaker, speakerName, emotion, sound, (prevBox == null) ? finishAction : () => { AddMenu(prevBox, false); }, waitTime, sep_msgs[ii]); } return(box); } return(null); }
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(); MenuManager.Instance.RemoveMenu(); MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(NetworkManager.Instance.ExitMsg), false); } else { ActivityTradeTeam tradeTeam = NetworkManager.Instance.Activity as ActivityTradeTeam; if (baseMenu.CurrentState == ExchangeState.Viewing) { if (input.JustPressed(FrameInput.InputType.Confirm)) { baseMenu.CurrentState = ExchangeState.Ready; tradeTeam.SetReady(baseMenu.CurrentState); } else if (input.JustPressed(FrameInput.InputType.Cancel)) { GameManager.Instance.SE("Menu/Cancel"); MenuManager.Instance.RemoveMenu(); baseMenu.CurrentState = ExchangeState.Selecting; tradeTeam.OfferChar(null); tradeTeam.SetReady(baseMenu.CurrentState); } } else if (baseMenu.CurrentState == ExchangeState.Ready) { if (tradeTeam.CurrentState == ExchangeState.Ready) { DialogueBox dialog = MenuManager.Instance.CreateQuestion(Text.FormatKey("DLG_TRADE_TEAM_ASK", CurrentChar.BaseName, tradeTeam.OfferedChar.BaseName), () => { baseMenu.CurrentState = ExchangeState.Exchange; tradeTeam.SetReady(baseMenu.CurrentState); }, () => { baseMenu.CurrentState = ExchangeState.Viewing; tradeTeam.SetReady(baseMenu.CurrentState); }); MenuManager.Instance.AddMenu(dialog, true); } else { if (input.JustPressed(FrameInput.InputType.Cancel)) { GameManager.Instance.SE("Menu/Cancel"); baseMenu.CurrentState = ExchangeState.Viewing; tradeTeam.SetReady(baseMenu.CurrentState); } } } else if (baseMenu.CurrentState == ExchangeState.Exchange) { if (tradeTeam.CurrentState == ExchangeState.Exchange || tradeTeam.CurrentState == ExchangeState.PostTradeWait) { int chosenIndex = baseMenu.CurrentPage * baseMenu.SpacesPerPage + baseMenu.CurrentChoice; DataManager.Instance.Save.ActiveTeam.Assembly[chosenIndex] = new Character(tradeTeam.OfferedChar, DataManager.Instance.Save.ActiveTeam); DataManager.Instance.Save.RegisterMonster(DataManager.Instance.Save.ActiveTeam.Assembly[chosenIndex].BaseForm.Species); baseMenu.CurrentState = ExchangeState.PostTradeWait; tradeTeam.SetReady(baseMenu.CurrentState); } else if (tradeTeam.CurrentState != ExchangeState.Ready) { MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_TRADE_CANCELED")), true); baseMenu.CurrentState = ExchangeState.Viewing; tradeTeam.SetReady(baseMenu.CurrentState); } } else if (baseMenu.CurrentState == ExchangeState.PostTradeWait) { if (tradeTeam.CurrentState != ExchangeState.Exchange) { DataManager.Instance.SaveMainGameState(); int chosenIndex = baseMenu.CurrentPage * baseMenu.SpacesPerPage + baseMenu.CurrentChoice; bool sendBack = CurrentChar.OriginalUUID == tradeTeam.TargetInfo.UUID; bool receiveBack = tradeTeam.OfferedChar.OriginalUUID == DataManager.Instance.Save.UUID; string sendString = Text.FormatKey(sendBack ? "DLG_TRADE_TEAM_SENT_BACK" : "DLG_TRADE_TEAM_SENT", CurrentChar.BaseName, tradeTeam.TargetInfo.Data.TeamName); string receiveString = Text.FormatKey(receiveBack ? "DLG_TRADE_TEAM_RECEIVED_BACK" : "DLG_TRADE_TEAM_RECEIVED", tradeTeam.OfferedChar.BaseName, tradeTeam.TargetInfo.Data.TeamName); tradeTeam.OfferChar(null); MenuManager.Instance.RemoveMenu(); MenuManager.Instance.ReplaceMenu(new TradeTeamMenu(chosenIndex)); GameManager.Instance.Fanfare("Fanfare/Note"); MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue( () => { MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue( () => { GameManager.Instance.Fanfare("Fanfare/JoinTeam"); MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(receiveString), false); }, Text.FormatKey("DLG_TRADE_TEAM_AND")), false); }, sendString), false); tradeTeam.SetReady(ExchangeState.Selecting); } } baseMenu.UpdateStatus(); } }
public IEnumerator <YieldInstruction> SetDialogue(MonsterID speaker, string speakerName, EmoteStyle emotion, bool sound, Action finishAction, int waitTime, params string[] msgs) { DialogueBox box = CreateDialogue(speaker, speakerName, emotion, sound, finishAction, waitTime, msgs); yield return(CoroutineManager.Instance.StartCoroutine(ProcessMenuCoroutine(box))); }
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 void Update(InputManager input) { Visible = true; NetworkManager.Instance.Update(); if (NetworkManager.Instance.Status == OnlineStatus.Offline) { //give offline message in a dialogue MenuManager.Instance.RemoveMenu(); MenuManager.Instance.RemoveMenu(); MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(NetworkManager.Instance.ExitMsg), false); } else { ActivityTradeItem tradeItem = NetworkManager.Instance.Activity as ActivityTradeItem; if (baseMenu.CurrentState == ExchangeState.Viewing) { if (input.JustPressed(FrameInput.InputType.Confirm)) { baseMenu.CurrentState = ExchangeState.Ready; tradeItem.SetReady(baseMenu.CurrentState); } else if (input.JustPressed(FrameInput.InputType.Cancel)) { GameManager.Instance.SE("Menu/Cancel"); MenuManager.Instance.RemoveMenu(); baseMenu.CurrentState = ExchangeState.Selecting; tradeItem.OfferItems(new List <InvItem>()); tradeItem.SetReady(baseMenu.CurrentState); } } else if (baseMenu.CurrentState == ExchangeState.Ready) { if (tradeItem.CurrentState == ExchangeState.Ready) { DialogueBox dialog = MenuManager.Instance.CreateQuestion(Text.FormatKey("DLG_TRADE_ITEM_ASK"), () => { baseMenu.CurrentState = ExchangeState.Exchange; tradeItem.SetReady(baseMenu.CurrentState); }, () => { baseMenu.CurrentState = ExchangeState.Viewing; tradeItem.SetReady(baseMenu.CurrentState); }); MenuManager.Instance.AddMenu(dialog, true); } else { if (input.JustPressed(FrameInput.InputType.Cancel)) { GameManager.Instance.SE("Menu/Cancel"); baseMenu.CurrentState = ExchangeState.Viewing; tradeItem.SetReady(baseMenu.CurrentState); } } } else if (baseMenu.CurrentState == ExchangeState.Exchange) { if (tradeItem.CurrentState == ExchangeState.Exchange || tradeItem.CurrentState == ExchangeState.PostTradeWait) { int chosenIndex = baseMenu.CurrentPage * baseMenu.SpacesPerPage + baseMenu.CurrentChoice; List <int> offerItems = new List <int>(); foreach (InvItem item in CurrentOffer) { offerItems.Add(item.ID); } DataManager.Instance.Save.ActiveTeam.TakeItems(offerItems); DataManager.Instance.Save.ActiveTeam.StoreItems(tradeItem.OfferedItems); baseMenu.CurrentState = ExchangeState.PostTradeWait; tradeItem.SetReady(baseMenu.CurrentState); } else if (tradeItem.CurrentState != ExchangeState.Ready) { MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_TRADE_CANCELED")), true); baseMenu.CurrentState = ExchangeState.Viewing; tradeItem.SetReady(baseMenu.CurrentState); } } else if (baseMenu.CurrentState == ExchangeState.PostTradeWait) { if (tradeItem.CurrentState != ExchangeState.Exchange) { DataManager.Instance.SaveMainGameState(); int chosenIndex = baseMenu.CurrentPage * baseMenu.SpacesPerPage + baseMenu.CurrentChoice; tradeItem.OfferItems(new List <InvItem>()); MenuManager.Instance.RemoveMenu(); MenuManager.Instance.ReplaceMenu(new TradeItemMenu(chosenIndex)); GameManager.Instance.Fanfare("Fanfare/Treasure"); MenuManager.Instance.AddMenu(MenuManager.Instance.CreateDialogue(Text.FormatKey("DLG_TRADE_ITEM_COMPLETE")), false); tradeItem.SetReady(ExchangeState.Selecting); } } baseMenu.UpdateStatus(); } }