ConnectErrorScriptModule.c
enum EConnectErrorScript
{
UNKNOWN = -1, // -1 must always be UNKNOWN
OK = 0, // 0 must always be OK
ALREADY_CONNECTING, // Already joining a server
ALREADY_CONNECTING_THIS, // Already joining this exact server
}
class ConnectErrorScriptModule : ErrorHandlerModuleScript
{
void ConnectErrorScriptModule()
{
SetCategory(ErrorCategory.ConnectErrorScript);
}
override void InitOptionalVariables()
{
super.InitOptionalVariables();
m_Header = "#server_browser_connecting_failed";
#ifndef NO_GUI
m_UIHandler = new ConnectErrorScriptModuleUI();
#endif
}
override void FillErrorDataMap()
{
super.FillErrorDataMap();
InsertDialogueErrorProperties(EConnectErrorScript.ALREADY_CONNECTING, "#STR_script_already_connecting", DBT_YESNOCANCEL, DBB_NO);
InsertDialogueErrorProperties(EConnectErrorScript.ALREADY_CONNECTING_THIS, "#STR_script_already_connecting_this");
}
override void OnEvent(EventType eventTypeId, Param params)
{
switch (eventTypeId)
{
case MPSessionPlayerReadyEventTypeID:
#ifndef NO_GUI
g_Game.GetUIManager().CloseSpecificDialog(m_LastErrorThrown);
#endif
break;
default:
break;
}
}
}
class ConnectErrorScriptModuleUI : UIScriptedMenu
{
protected static void DisconnectSession(bool loadMpPrivilege)
{
g_Game.DisconnectSessionForce();
g_Game.DisconnectSessionScript();
if (loadMpPrivilege)
{
OnlineServices.LoadMPPrivilege();
}
}
override bool OnModalResult(Widget w, int x, int y, int code, int result)
{
super.OnModalResult(w, x, y, code, result);
int error = ErrorModuleHandler.GetCodeFromError(code);
switch ( error )
{
case EConnectErrorScript.ALREADY_CONNECTING:
{
switch ( result )
{
case DBB_YES:
g_Game.GetCallQueue(CALL_CATEGORY_SYSTEM).Call(DisconnectSession, true);
break;
case DBB_CANCEL:
g_Game.GetCallQueue(CALL_CATEGORY_SYSTEM).Call(DisconnectSession, false);
break;
default:
break;
}
break;
}
default:
break;
}
return true;
}
}