connecterrorscriptmodule.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. enum EConnectErrorScript
  2. {
  3. UNKNOWN = -1, // -1 must always be UNKNOWN
  4. OK = 0, // 0 must always be OK
  5. ALREADY_CONNECTING, // Already joining a server
  6. ALREADY_CONNECTING_THIS, // Already joining this exact server
  7. }
  8. class ConnectErrorScriptModule : ErrorHandlerModuleScript
  9. {
  10. void ConnectErrorScriptModule()
  11. {
  12. SetCategory(ErrorCategory.ConnectErrorScript);
  13. }
  14. override void InitOptionalVariables()
  15. {
  16. super.InitOptionalVariables();
  17. m_Header = "#server_browser_connecting_failed";
  18. #ifndef NO_GUI
  19. m_UIHandler = new ConnectErrorScriptModuleUI();
  20. #endif
  21. }
  22. override void FillErrorDataMap()
  23. {
  24. super.FillErrorDataMap();
  25. InsertDialogueErrorProperties(EConnectErrorScript.ALREADY_CONNECTING, "#STR_script_already_connecting", DBT_YESNOCANCEL, DBB_NO);
  26. InsertDialogueErrorProperties(EConnectErrorScript.ALREADY_CONNECTING_THIS, "#STR_script_already_connecting_this");
  27. }
  28. override void OnEvent(EventType eventTypeId, Param params)
  29. {
  30. switch (eventTypeId)
  31. {
  32. case MPSessionPlayerReadyEventTypeID:
  33. #ifndef NO_GUI
  34. g_Game.GetUIManager().CloseSpecificDialog(m_LastErrorThrown);
  35. #endif
  36. break;
  37. default:
  38. break;
  39. }
  40. }
  41. }
  42. class ConnectErrorScriptModuleUI : UIScriptedMenu
  43. {
  44. protected static void DisconnectSession(bool loadMpPrivilege)
  45. {
  46. g_Game.DisconnectSessionForce();
  47. g_Game.DisconnectSessionScript();
  48. if (loadMpPrivilege)
  49. {
  50. OnlineServices.LoadMPPrivilege();
  51. }
  52. }
  53. override bool OnModalResult(Widget w, int x, int y, int code, int result)
  54. {
  55. super.OnModalResult(w, x, y, code, result);
  56. int error = ErrorModuleHandler.GetCodeFromError(code);
  57. switch ( error )
  58. {
  59. case EConnectErrorScript.ALREADY_CONNECTING:
  60. {
  61. switch ( result )
  62. {
  63. case DBB_YES:
  64. g_Game.GetCallQueue(CALL_CATEGORY_SYSTEM).Call(DisconnectSession, true);
  65. break;
  66. case DBB_CANCEL:
  67. g_Game.GetCallQueue(CALL_CATEGORY_SYSTEM).Call(DisconnectSession, false);
  68. break;
  69. default:
  70. break;
  71. }
  72. break;
  73. }
  74. default:
  75. break;
  76. }
  77. return true;
  78. }
  79. }