Server List v2

Splix Server List has been updated with a server selector and now allows a single player to join a team server.

  1. // ==UserScript==
  2. // @name Server List v2
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.2
  5. // @description Splix Server List has been updated with a server selector and now allows a single player to join a team server.
  6. // @author The Retired Splixer
  7. // @match https://splix.io/*
  8. // @license GPLv3
  9. // @grant none
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. 'use strict';
  14.  
  15. const selNotCreated = ()=>{ return (document.forms[0].childElementCount == 8) };
  16. function sortServers() {
  17. window.servers.sort((a,b) => {
  18. if ( a.loc < b.loc ) return -1;
  19. if ( a.loc > b.loc ) return 1;
  20. return 0;
  21. });
  22. }
  23. function renderServerList(gameMode, flag, selectedValue) {
  24. let mode;
  25. (gameMode == 'Normal') ? (mode = servers[0].gamemodes[0].gm.startsWith('d') ? 0 : 1) : (mode = servers[0].gamemodes[0].gm.startsWith('t') ? 0 : 1);
  26. let selectedServerInnerHtml='<option value="" hidden disabled selected>'+(gameMode.startsWith("N")?('Select a server&ensp;(Current: auto)</option><option value="">auto') : 'Possible Servers: ') + '</option>';
  27. window.servers.forEach((srv,indx)=>{
  28. let serverDown = false;
  29. if(typeof(srv.gamemodes[mode].versions[0].lobbies[0]) == 'undefined') serverDown = true;
  30.  
  31. if(serverDown) { selectedServerInnerHtml += '<option value="undefined"'+(window.selectedGamemode.startsWith("N")?"":" disabled")+'word-spacing: 30px;>'+'~DOWN~'+'&emsp;('+srv.loc+')</option>';}
  32. else {selectedServerInnerHtml += '<option value="'+ srv.gamemodes[mode].versions[0].lobbies[0].hash + '"'+(window.selectedGamemode.startsWith("N")?"":" disabled")+'word-spacing: 30px;>'+srv.gamemodes[mode].versions[0].lobbies[0].hash+'&emsp;('+srv.loc+')</option>'; }
  33.  
  34. if(indx+1 == window.servers.length){
  35. window.serverSel.innerHTML=selectedServerInnerHtml;
  36. if(flag&&[...window.serverSel.options].some(e=>e.value==window.location.hash.slice(1)))window.serverSel.value=window.location.hash.slice(1);
  37. if(selectedValue == 0) window.serverSel.selectedIndex = 0;
  38. }
  39. });
  40. }
  41. function createServerSelect(gameMode, flag, selectedValue) {
  42. setTimeout(()=>{document.getElementById('joinButton').disabled = false;},1000);
  43. if(selNotCreated()) {
  44. window.serverSel = document.createElement("SELECT");
  45. Object.assign(window.serverSel.style, {
  46. width: '226px',
  47. background: 'url(/img/arrowD.svg) right center no-repeat #3bad48',
  48. color: '#fff',
  49. backgroundSize: '30px',
  50. fontSize: '14px'
  51. });
  52. window.serverSel.onchange = function(){
  53. if(window.serverSel.value == "") {
  54. window.history.replaceState(null,null,' ');
  55. }else{ window.location.hash = window.serverSel.value; }
  56. };
  57. window.serverSel.className="fancyBox inputFancy";
  58. document.getElementById('joinButton').insertAdjacentElement("afterend", window.serverSel);
  59. document.getElementById('joinButton').insertAdjacentElement("afterend", document.createElement("BR"));
  60. sortServers();
  61. renderServerList(gameMode, flag, selectedValue);
  62. }
  63. else {
  64. while(serverSel.options.length > 0){ serverSel.remove(0); }
  65. renderServerList(gameMode, flag, selectedValue);
  66. }
  67. }
  68. const selUpd = ()=>{
  69. if(window.serverSel == null) return;
  70. var selectedValue = window.serverSel.selectedIndex;
  71. window.serverSel.outerHTML="";
  72. setTimeout(async ()=>{
  73. while(!serversRequestDone) await new window.Promise(r => window.setTimeout(r,1));
  74. createServerSelect(window.selectedGamemode, true, selectedValue);
  75. },100);
  76. };
  77. /* Server List print in console(Old-code) */
  78. var locCountries = {
  79. "nyc": "USA",
  80. "sfo": "USA",
  81. "tor": "Canada",
  82. "ams": "Netherlands",
  83. "fra": "Germany",
  84. "sgp": "Singapore",
  85. "blr": "India"
  86. }
  87.  
  88. function printServerList(DATA) {
  89. console.log("%c" + "Location".padEnd(20, " ") + "%c" + "Normal".padEnd(10, " ") + "%c" + "Team".padEnd(10, " "),
  90. "color:black; font-weight: bold; background: #FFFFFF; font-size: 130%; font-weight: bold;",
  91. "color: #0086BF;background: #FFFFFF; font-size: 130%; font-weight: bold;",
  92. "color: #B152B1;background: #FFFFFF;font-size: 130%; font-weight: bold;");
  93. for (var l = 0; l < DATA.locations.length; l++) {
  94. var singleServerName = "Unknown";
  95. var teamServerName = "Unknown";
  96. if (DATA.locations[l].loc in locCountries) {
  97. let locString = DATA.locations[l].loc + " (" + locCountries[DATA.locations[l].loc] + ")";
  98. }
  99. else {
  100. let locString = DATA.locations[l].loc + "";
  101. }
  102. locString = locString.padEnd(20, " ");
  103. try {
  104. for (var gm = 0; gm < DATA.locations[l].gamemodes.length; gm++) {
  105. for (var ver = 0; ver < DATA.locations[l].gamemodes[gm].versions.length; ver++) {
  106. for (var lob = 0; lob < DATA.locations[l].gamemodes[gm].versions[ver].lobbies.length; lob++) {
  107. if (DATA.locations[l].gamemodes[gm].gm == "default") {
  108. singleServerName = DATA.locations[l].gamemodes[gm].versions[ver].lobbies[lob].hash;
  109. }
  110. else {
  111. teamServerName = DATA.locations[l].gamemodes[gm].versions[ver].lobbies[lob].hash;
  112. }
  113. }
  114. }
  115. }
  116. console.log("%c" + locString + "%c" + singleServerName.padEnd(10, " ") + "%c" + teamServerName.padEnd(10, " "),
  117. "color:black; font-weight: bold; background: #FFFFFF; font-size: 130%;",
  118. "color: #0086BF;background: #FFFFFF; font-size: 130%;",
  119. "color: #B152B1;background: #FFFFFF;font-size: 130%;");
  120. }
  121. catch (err) {
  122. console.log("%c" + locString+ "%c" + "Error",
  123. "color:black; font-weight: bold; background: #FFFFFF; font-size: 130%;",
  124. "color: #FF4F4F;background: #FFFFFF;font-size: 130%;");
  125. }
  126. }
  127. }
  128.  
  129. function parse(obj) {
  130. var DATA = JSON.parse(obj);
  131. printServerList(DATA);
  132. }
  133. var request = new XMLHttpRequest();
  134. request.open('GET', '/json/servers.2.json');
  135. request.onloadend = function() {
  136. parse(request.responseText);
  137. }
  138. request.send();
  139.  
  140. (async ()=>{
  141. while(!serversRequestDone) await new window.Promise(r=>window.setTimeout(r,1));
  142. createServerSelect(window.selectedGamemode, false, 0);
  143. })();
  144. window.addEventListener("hashchange", function() {
  145. if(window.serverSel!=null && window.selectedGamemode.startsWith("N") && "#"+window.serverSel.value != window.location.hash) selUpd();
  146. },false);
  147. document.querySelector('#gamemodeSelect').addEventListener("change", (e) => createServerSelect(e.target.value, false, 0));
  148. // Your code here...
  149. })();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址