class_name Lobby extends Node var port = 2500; var _GuiAnimate : int = -1; var GUIAlpha : float = 0; var GUIHide : float = 0; var _gameName = "marsxplr"; var _timeoutHostList = 0.00; var _lastHostListRequest = -1000.0; var _lastHostListRefresh = -1000.0; var _hostListRefreshTimeout = 5.0; #UE: private var natCapable : ConnectionTesterStatus = ConnectionTesterStatus.Undetermined; var _NATHosts = false; var _probingPublicIP = false; var _doneTesting = false; var _timer : float = 0.0; var _filterNATHosts = false; var _forceNAT = false; var _hideTest = false; var _masterServerMessage = ""; var _masterServerConFailures = 0; var _testMessage = ""; var _netConIP : Array[String]; var _netConPort : int; var _netConAttempts = 0; var _useMasterServer : bool = true; var _disableMasterServer : bool = false; var _doNetworking = true; var userName = ""; var userCode = ""; var _userIsRegistered = false; var _remoteIP : String; var _userNameTemp = ""; var _userPassword = ""; var _userRemembered = false; var _userAuthenticating = ""; var windowRect : Rect2; var temp = ""; var _scrollPosition : Vector2; var _outdated = ""; var _hostRegistered = false; var _serverLevel = ""; var _showSettings = false; var _autoHostListRefresh = true; @export var useAlternateServer = false; var messages : Array[String]; var _listServerIP : String = ""; var _listServerPort : int; var _backupServerIP : String; var _backupServerPort : int = 23456; var _buttonHeight : float; var _buttonHeightTarget : float; var _mouseInServerList : bool; var _serverDetails : String = ""; var _serverDetailsBoxAlpha : float; @export var skin : Theme; #UE: var serverDetailsBox : GUIStyle; @export var lobbyDecor : LobbyDecor; @export var contentWidth : int = 0; var _hostDedicated : bool = false; var _dedicatedIP : Array[String]; var _dedicatedPort : int; var _dedicatedNAT : bool; var _dedicatedHostAttempts : int; @onready var GUI : Control = $GUI; var _www_data : String = ""; var _www_response_code : int; func _www_on_request_completed(_result, response_code, _headers, body): _www_data = body.get_string_from_utf8(); _www_response_code = response_code; func _ready(): ## Awake ## Start _userPassword = PlayerPrefs.GetString("userPassword", ""); userCode = PlayerPrefs.GetString("userCode", ""); _userRemembered = (PlayerPrefs.GetInt("userRemembered", 0) == 1); _userIsRegistered = (PlayerPrefs.GetInt("userRegistered", 0) == 1); GameData.masterBlacklist = ""; if GameData.userName != "": ##They just left a server userName = GameData.userName; if _userRemembered: _userNameTemp = userName; elif _userPassword != "": ##They are trying to play authenticated - don't let them in without validating their password _userNameTemp = PlayerPrefs.GetString("userName", ""); authenticateUser(); else: _userNameTemp = PlayerPrefs.GetString("userName", ""); userName = _userNameTemp + ("-" if _userNameTemp != "" else ""); var msgs : Array[String] = []; var wlds : Array[GameData.GameWorldDesc] = []; var www : HTTPRequest = HTTPRequest.new(); add_child(www); www.request_completed.connect(self._www_on_request_completed); var www_error = www.request("http://73.189.4.24/upd3"); await www.request_completed remove_child(www); if(www_error == OK && _www_response_code == HTTPClient.RESPONSE_OK): var data = _www_data.split('\n'); for dat : String in data: if dat == "": continue; var pos : int = dat.find('='); if !pos || pos == -1: continue; var val : Array[String] = [dat.substr(0, pos), dat.substr(pos + 1)]; if val[0] == "v" && val[1].to_float() > GameData.gameVersion: _outdated = val[1]; elif val[0] == "d": _hostDedicated = (val[1] == "1" || val[1] == "true"); elif val[0] == "m": msgs.append(val[1]); elif val[0] == "w": var nme = ""; var url = ""; var featured = false; var wrld = val[1].split(';'); for str : String in wrld: if str == "": continue; if str == "featured": featured = true; continue; var vals = str.split(':'); if vals[0] == "nme": nme = vals[1]; elif vals[0] == "url": url = str.substr(4); wlds.append(GameData.GameWorldDesc.new(nme, url, featured)); elif (val[0] == "s" && !useAlternateServer) || (val[0] == "s2" && useAlternateServer): var ipStr = val[1].split(':'); _listServerIP = ipStr[0]; _listServerPort = ipStr[1].to_int(); #UE: MasterServer.ipAddress = listServerIP; #UE: MasterServer.port = listServerPort; elif (val[0] == "f" && !useAlternateServer) || (val[0] == "f2" && useAlternateServer): var ipStr = val[1].split(':'); #UE: Network.natFacilitatorIP = ipStr[0]; #UE: Network.natFacilitatorPort = parseInt(ipStr[1]); elif (val[0] == "t" && !useAlternateServer) || (val[0] == "t2" && useAlternateServer): var ipStr = val[1].split(':'); #UE: Network.connectionTesterIP = ipStr[0]; #UE: Network.connectionTesterPort = parseInt(ipStr[1]); elif val[0] == "b": GameData.masterBlacklist += ("\n" if GameData.masterBlacklist != "" else "") + val[1]; elif val[0] == "n": GameData.networkMode = val[1].to_int(); else: GameData.errorMessage = "Alert: Update server is unreachable.\nIf this computer is online, the update server may be down.\n\nYou need to be connected to the internet to play Mars Explorer.\n\nPlease check MarsXPLR.com for news & updates!"; GameData.gameWorlds = wlds; messages = msgs; #UE: MasterServer.RequestHostList(gameName); func _gui(delta : float): GUI.theme = skin; GUI.modulate.a = GUIAlpha; #UE: if(QualitySettings.currentLevel < 3) QualitySettings.currentLevel = 3; //Server List GUI looks terrible at 1/4 res :) var t_elapsed : float = (Time.get_ticks_msec() as float) / 1000; var screen_size : Vector2 = get_viewport().get_visible_rect().size; if t_elapsed > 4.25: ##Fade GUI Out if _GuiAnimate == 1: if GUIAlpha <= 0: GUIAlpha = 0; _GuiAnimate = 0; else: GUIAlpha = GUIAlpha - delta * .35; if GUIHide > 1: GUIHide = 1; else: GUIHide += delta * .5; ##Fade GUI In elif _GuiAnimate == -1: GUIAlpha = 0; _GuiAnimate = -2; elif _GuiAnimate == -2: if GUIAlpha >= 1.4: GUIAlpha = 1.4; _GuiAnimate = 0; else: GUIAlpha += delta * .5; var width = screen_size.y * 1.2; ## * .84 if width > 800: width -= (width - 800) * .5; if width > 1200: width = 1200; if width > screen_size.x - 30: width = screen_size.x - 30; if width < 600: width = 600; contentWidth = width; func _process(delta : float): _gui(delta); func authenticateUser(): _userAuthenticating = ""; if(_userRemembered): PlayerPrefs.SetString("userName", _userNameTemp); PlayerPrefs.SetString("userPassword", _userPassword); PlayerPrefs.SetInt("userRemembered", 1); PlayerPrefs.SetInt("userRegistered", 1); else: PlayerPrefs.SetString("userName", ""); PlayerPrefs.SetString("userPassword", ""); PlayerPrefs.SetInt("userRemembered", 0); PlayerPrefs.SetInt("userRegistered", 0); _userNameTemp = ""; _userPassword = "";